~ubuntu-branches/ubuntu/lucid/phpmyadmin/lucid

« back to all changes in this revision

Viewing changes to .pc/mootools.patch/tbl_select.php

  • Committer: Bazaar Package Importer
  • Author(s): Michal Čihař
  • Date: 2010-03-08 15:25:00 UTC
  • mfrom: (1.2.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20100308152500-6e8hmuqc5co39de5
Tags: 4:3.3.0-1
* New upstream version.
* Rediff debian/patches.
* Fix permissions on mediawiki export extension.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/* vim: set expandtab sw=4 ts=4 sts=4: */
 
3
/**
 
4
 * Handles table search tab
 
5
 *
 
6
 * display table search form, create SQL query from form data
 
7
 * and include sql.php to execute it
 
8
 *
 
9
 * @todo display search form again if no results from previous search
 
10
 * @version $Id: tbl_select.php 12627 2009-07-06 12:05:06Z lem9 $
 
11
 * @package phpMyAdmin
 
12
 */
 
13
 
 
14
/**
 
15
 * Gets some core libraries
 
16
 */
 
17
require_once './libraries/common.inc.php';
 
18
require_once './libraries/relation.lib.php'; // foreign keys
 
19
require_once './libraries/mysql_charsets.lib.php';
 
20
 
 
21
$GLOBALS['js_include'][] = 'tbl_change.js';
 
22
$GLOBALS['js_include'][] = 'mootools.js';
 
23
 
 
24
if ($GLOBALS['cfg']['PropertiesIconic'] == true) {
 
25
    $titles['Browse'] =
 
26
        '<img class="icon" width="16" height="16" src="' . $pmaThemeImage
 
27
        .'b_browse.png" alt="' . $strBrowseForeignValues . '" title="'
 
28
        .$strBrowseForeignValues . '" />';
 
29
 
 
30
    if ($GLOBALS['cfg']['PropertiesIconic'] === 'both') {
 
31
        $titles['Browse'] .= $strBrowseForeignValues;
 
32
    }
 
33
} else {
 
34
    $titles['Browse'] = $strBrowseForeignValues;
 
35
}
 
36
 
 
37
/**
 
38
 * Not selection yet required -> displays the selection form
 
39
 */
 
40
if (!isset($param) || $param[0] == '') {
 
41
    // Gets some core libraries
 
42
    require_once './libraries/tbl_common.php';
 
43
    //$err_url   = 'tbl_select.php' . $err_url;
 
44
    $url_query .= '&amp;goto=tbl_select.php&amp;back=tbl_select.php';
 
45
 
 
46
    /**
 
47
     * Gets tables informations
 
48
     */
 
49
    require_once './libraries/tbl_info.inc.php';
 
50
 
 
51
    /**
 
52
     * Displays top menu links
 
53
     */
 
54
    require_once './libraries/tbl_links.inc.php';
 
55
 
 
56
    if (!isset($goto)) {
 
57
        $goto = $GLOBALS['cfg']['DefaultTabTable'];
 
58
    }
 
59
    // Defines the url to return to in case of error in the next sql statement
 
60
    $err_url   = $goto . '?' . PMA_generate_common_url($db, $table);
 
61
 
 
62
    // Gets the list and number of fields
 
63
    $result     = PMA_DBI_query('SHOW FULL FIELDS FROM ' . PMA_backquote($table) . ' FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
 
64
    $fields_cnt = PMA_DBI_num_rows($result);
 
65
    // rabue: we'd better ensure, that all arrays are empty.
 
66
    $fields_list = $fields_null = $fields_type = $fields_collation = array();
 
67
    while ($row = PMA_DBI_fetch_assoc($result)) {
 
68
        $fields_list[] = $row['Field'];
 
69
        $type          = $row['Type'];
 
70
        // reformat mysql query output - staybyte - 9. June 2001
 
71
        if (strncasecmp($type, 'set', 3) == 0
 
72
            || strncasecmp($type, 'enum', 4) == 0) {
 
73
            $type = str_replace(',', ', ', $type);
 
74
        } else {
 
75
 
 
76
            // strip the "BINARY" attribute, except if we find "BINARY(" because
 
77
            // this would be a BINARY or VARBINARY field type
 
78
            if (!preg_match('@BINARY[\(]@i', $type)) {
 
79
                $type = preg_replace('@BINARY@i', '', $type);
 
80
            }
 
81
            $type = preg_replace('@ZEROFILL@i', '', $type);
 
82
            $type = preg_replace('@UNSIGNED@i', '', $type);
 
83
 
 
84
            $type = strtolower($type);
 
85
        }
 
86
        if (empty($type)) {
 
87
            $type = '&nbsp;';
 
88
        }
 
89
        $fields_null[] = $row['Null'];
 
90
        $fields_type[] = $type;
 
91
        $fields_collation[] = !empty($row['Collation']) && $row['Collation'] != 'NULL'
 
92
                          ? $row['Collation']
 
93
                          : '';
 
94
    } // end while
 
95
    PMA_DBI_free_result($result);
 
96
    unset($result, $type);
 
97
 
 
98
    // <markus@noga.de>
 
99
    // retrieve keys into foreign fields, if any
 
100
    // check also foreigners even if relwork is FALSE (to get
 
101
    // foreign keys from innodb)
 
102
    $foreigners = PMA_getForeigners($db, $table);
 
103
    ?>
 
104
<script type="text/javascript">
 
105
// <![CDATA[
 
106
function PMA_tbl_select_operator(f, index, multiple) {
 
107
    switch (f.elements["func[" + index + "]"].options[f.elements["func[" + index + "]"].selectedIndex].value) {
 
108
<?php
 
109
reset($GLOBALS['cfg']['UnaryOperators']);
 
110
while (list($operator) = each($GLOBALS['cfg']['UnaryOperators'])) {
 
111
    echo '        case "' . $operator . "\":\r\n";
 
112
}
 
113
?>
 
114
            bDisabled = true;
 
115
            break;
 
116
 
 
117
        default:
 
118
            bDisabled = false;
 
119
    }
 
120
    f.elements["fields[" + index + "]" + ((multiple) ? "[]": "")].disabled = bDisabled;
 
121
}
 
122
// ]]>
 
123
</script>
 
124
<form method="post" action="tbl_select.php" name="insertForm">
 
125
<?php echo PMA_generate_common_hidden_inputs($db, $table); ?>
 
126
<input type="hidden" name="goto" value="<?php echo $goto; ?>" />
 
127
<input type="hidden" name="back" value="tbl_select.php" />
 
128
 
 
129
<fieldset id="fieldset_table_search">
 
130
 
 
131
<fieldset id="fieldset_table_qbe">
 
132
    <legend><?php echo $strDoAQuery; ?></legend>
 
133
    <table class="data">
 
134
    <thead>
 
135
    <tr><th><?php echo $strField; ?></th>
 
136
        <th><?php echo $strType; ?></th>
 
137
        <th><?php echo $strCollation; ?></th>
 
138
        <th><?php echo $strOperator; ?></th>
 
139
        <th><?php echo $strValue; ?></th>
 
140
    </tr>
 
141
    </thead>
 
142
    <tbody>
 
143
    <?php
 
144
    $odd_row = true;
 
145
 
 
146
    for ($i = 0; $i < $fields_cnt; $i++) {
 
147
        ?>
 
148
        <tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
 
149
            <th><?php echo htmlspecialchars($fields_list[$i]); ?></th>
 
150
            <td><?php echo $fields_type[$i]; ?></td>
 
151
            <td><?php echo $fields_collation[$i]; ?></td>
 
152
            <td><select name="func[]">
 
153
        <?php
 
154
        if (strncasecmp($fields_type[$i], 'enum', 4) == 0) {
 
155
            foreach ($GLOBALS['cfg']['EnumOperators'] as $fc) {
 
156
                echo "\n" . '                        '
 
157
                   . '<option value="' . htmlspecialchars($fc) . '">'
 
158
                   . htmlspecialchars($fc) . '</option>';
 
159
            }
 
160
        } elseif (preg_match('@char|blob|text|set@i', $fields_type[$i])) {
 
161
            foreach ($GLOBALS['cfg']['TextOperators'] as $fc) {
 
162
            echo "\n" . '                        '
 
163
               . '<option value="' . htmlspecialchars($fc) . '">'
 
164
               . htmlspecialchars($fc) . '</option>';
 
165
            }
 
166
        } else {
 
167
            foreach ($GLOBALS['cfg']['NumOperators'] as $fc) {
 
168
                echo "\n" . '                        '
 
169
                   . '<option value="' .  htmlspecialchars($fc) . '">'
 
170
                   . htmlspecialchars($fc) . '</option>';
 
171
            }
 
172
        } // end if... else...
 
173
        if ($fields_null[$i]) {
 
174
            foreach ($GLOBALS['cfg']['NullOperators'] as $fc) {
 
175
                echo "\n" . '                        '
 
176
                   . '<option value="' .  htmlspecialchars($fc) . '">'
 
177
                   . htmlspecialchars($fc) . '</option>';
 
178
            }
 
179
        }
 
180
        ?>
 
181
 
 
182
                </select>
 
183
            </td>
 
184
            <td>
 
185
        <?php
 
186
        // <markus@noga.de>
 
187
        $field = $fields_list[$i];
 
188
 
 
189
        $foreignData = PMA_getForeignData($foreigners, $field, false, '', '');
 
190
 
 
191
        if ($foreigners && isset($foreigners[$field]) && is_array($foreignData['disp_row'])) {
 
192
            // f o r e i g n    k e y s
 
193
            echo '            <select name="fields[' . $i . ']">' . "\n";
 
194
            // go back to first row
 
195
 
 
196
            // here, the 4th parameter is empty because there is no current
 
197
            // value of data for the dropdown (the search page initial values
 
198
            // are displayed empty)
 
199
            echo PMA_foreignDropdown($foreignData['disp_row'],
 
200
                $foreignData['foreign_field'],
 
201
                $foreignData['foreign_display'],
 
202
                '', $GLOBALS['cfg']['ForeignKeyMaxLimit']);
 
203
            echo '            </select>' . "\n";
 
204
        } elseif ($foreignData['foreign_link'] == true) {
 
205
            ?>
 
206
            <input type="text" name="fields[<?php echo $i; ?>]"
 
207
                id="field_<?php echo md5($field); ?>[<?php echo $i; ?>]"
 
208
                class="textfield" />
 
209
            <script type="text/javascript">
 
210
            // <![CDATA[
 
211
                document.writeln('<a target="_blank" onclick="window.open(this.href, \'foreigners\', \'width=640,height=240,scrollbars=yes\'); return false" href="browse_foreigners.php?<?php echo PMA_generate_common_url($db, $table); ?>&amp;field=<?php echo urlencode($field); ?>&amp;fieldkey=<?php echo $i; ?>"><?php echo str_replace("'", "\'", $titles['Browse']); ?></a>');
 
212
            // ]]>
 
213
            </script>
 
214
            <?php
 
215
        } elseif (strncasecmp($fields_type[$i], 'enum', 4) == 0) {
 
216
            // e n u m s
 
217
            $enum_value=explode(', ', str_replace("'", '', substr($fields_type[$i], 5, -1)));
 
218
            $cnt_enum_value = count($enum_value);
 
219
            echo '            <select name="fields[' . $i . '][]"'
 
220
                .' multiple="multiple" size="' . min(3, $cnt_enum_value) . '">' . "\n";
 
221
            for ($j = 0; $j < $cnt_enum_value; $j++) {
 
222
                echo '                <option value="' . $enum_value[$j] . '">'
 
223
                    . $enum_value[$j] . '</option>';
 
224
            } // end for
 
225
            echo '            </select>' . "\n";
 
226
        } else {
 
227
            // o t h e r   c a s e s
 
228
            echo '            <input type="text" name="fields[' . $i . ']"'
 
229
                .' size="40" class="textfield" id="field_' . $i . '" />' .  "\n";
 
230
        };
 
231
        $type = $fields_type[$i];
 
232
        if ($type == 'date' || $type == 'datetime' || substr($type, 0, 9) == 'timestamp') {
 
233
        ?>
 
234
                    <script type="text/javascript">
 
235
                    //<![CDATA[
 
236
                    document.write('<a title="<?php echo $strCalendar;?>" href="javascript:openCalendar(\'<?php echo PMA_generate_common_url();?>\', \'insertForm\', \'field_<?php echo ($i); ?>\', \'<?php echo (substr($type, 0, 9) == 'timestamp') ? 'datetime' : substr($type, 0, 9); ?>\', \'\')"><img class="calendar" src="<?php echo $pmaThemeImage; ?>b_calendar.png" alt="<?php echo $strCalendar; ?>"/></a>');
 
237
                    //]]>
 
238
                    </script>
 
239
        <?php
 
240
        }
 
241
        ?>
 
242
            <input type="hidden" name="names[<?php echo $i; ?>]"
 
243
                value="<?php echo htmlspecialchars($fields_list[$i]); ?>" />
 
244
            <input type="hidden" name="types[<?php echo $i; ?>]"
 
245
                value="<?php echo $fields_type[$i]; ?>" />
 
246
            <input type="hidden" name="collations[<?php echo $i; ?>]"
 
247
                value="<?php echo $fields_collation[$i]; ?>" />
 
248
        </td>
 
249
    </tr>
 
250
        <?php
 
251
    } // end for
 
252
    ?>
 
253
    </tbody>
 
254
    </table>
 
255
</fieldset>
 
256
<?php
 
257
    PMA_generate_slider_effect('searchoptions', $strOptions);
 
258
?>
 
259
<fieldset id="fieldset_select_fields">
 
260
    <legend><?php echo $strSelectFields; ?></legend>
 
261
    <select name="param[]" size="<?php echo min($fields_cnt, 10); ?>"
 
262
        multiple="multiple">
 
263
    <?php
 
264
    // Displays the list of the fields
 
265
    foreach ($fields_list as $each_field) {
 
266
        echo '        '
 
267
            .'<option value="' . htmlspecialchars($each_field) . '"'
 
268
            .' selected="selected">' . htmlspecialchars($each_field)
 
269
            .'</option>' . "\n";
 
270
    }
 
271
    ?>
 
272
    </select>
 
273
    <input type="checkbox" name="distinct" value="DISTINCT" id="oDistinct" />
 
274
    <label for="oDistinct">DISTINCT</label>
 
275
</fieldset>
 
276
 
 
277
<fieldset id="fieldset_search_conditions">
 
278
    <legend><?php echo '<em>' . $strOr . '</em> ' .$strAddSearchConditions; ?></legend>
 
279
<?php echo PMA_showMySQLDocu('SQL-Syntax', 'Functions'); ?>
 
280
 
 
281
<input type="text" name="where" class="textfield" size="64" />
 
282
</fieldset>
 
283
 
 
284
<fieldset id="fieldset_limit_rows">
 
285
    <legend><?php echo $strLimitNumRows; ?></legend>
 
286
    <input type="text" size="4" name="session_max_rows"
 
287
        value="<?php echo $GLOBALS['cfg']['MaxRows']; ?>" class="textfield" />
 
288
</fieldset>
 
289
 
 
290
<fieldset id="fieldset_display_order">
 
291
    <legend><?php echo $strDisplayOrder; ?></legend>
 
292
    <select name="orderField" style="vertical-align: middle">
 
293
        <option value="--nil--"></option>
 
294
    <?php
 
295
    foreach ($fields_list as $each_field) {
 
296
        echo '        '
 
297
            .'<option value="' . htmlspecialchars($each_field) . '">'
 
298
            .htmlspecialchars($each_field) . '</option>' . "\n";
 
299
    } // end for
 
300
    ?>
 
301
    </select>
 
302
<?php
 
303
    $choices = array(
 
304
        'ASC'  => $strAscending,
 
305
        'DESC' => $strDescending
 
306
    );
 
307
    PMA_display_html_radio('order', $choices, 'ASC', false, true, "formelement");
 
308
    unset($choices);
 
309
?>
 
310
</fieldset>
 
311
</div>
 
312
</fieldset>
 
313
<fieldset class="tblFooters">
 
314
    <input type="hidden" name="max_number_of_fields"
 
315
        value="<?php echo $fields_cnt; ?>" />
 
316
    <input type="submit" name="submit" value="<?php echo $strGo; ?>" />
 
317
</fieldset>
 
318
</form>
 
319
    <?php
 
320
    require_once './libraries/footer.inc.php';
 
321
}
 
322
 
 
323
 
 
324
/**
 
325
 * Selection criteria have been submitted -> do the work
 
326
 */
 
327
else {
 
328
    // Builds the query
 
329
 
 
330
    $sql_query = 'SELECT ' . (isset($distinct) ? 'DISTINCT ' : '');
 
331
 
 
332
    // if all fields were selected to display, we do a SELECT *
 
333
    // (more efficient and this helps prevent a problem in IE
 
334
    // if one of the rows is edited and we come back to the Select results)
 
335
 
 
336
    if (count($param) == $max_number_of_fields) {
 
337
        $sql_query .= '* ';
 
338
    } else {
 
339
        $param = PMA_backquote($param);
 
340
        $sql_query .= implode(', ', $param);
 
341
    } // end if
 
342
     
 
343
    // avoid a loop, for example when $cfg['DefaultTabTable'] is set 
 
344
    // to 'tbl_select.php'
 
345
    unset($param);
 
346
 
 
347
    $sql_query .= ' FROM ' . PMA_backquote($table);
 
348
 
 
349
    // The where clause
 
350
    if (trim($where) != '') {
 
351
        $sql_query .= ' WHERE ' . $where;
 
352
    } else {
 
353
        $w = $charsets = array();
 
354
        $cnt_func = count($func);
 
355
        reset($func);
 
356
        while (list($i, $func_type) = each($func)) {
 
357
            list($charsets[$i]) = explode('_', $collations[$i]);
 
358
            if (isset($GLOBALS['cfg']['UnaryOperators'][$func_type]) && $GLOBALS['cfg']['UnaryOperators'][$func_type] == 1) {
 
359
                $fields[$i] = '';
 
360
                $w[] = PMA_backquote($names[$i]) . ' ' . $func_type;
 
361
 
 
362
            } elseif (strncasecmp($types[$i], 'enum', 4) == 0) {
 
363
                if (!empty($fields[$i])) {
 
364
                    if (!is_array($fields[$i])) {
 
365
                        $fields[$i] = explode(',', $fields[$i]);
 
366
                    }
 
367
                    $enum_selected_count = count($fields[$i]);
 
368
                    if ($func_type == '=' && $enum_selected_count > 1) {
 
369
                        $func_type    = $func[$i] = 'IN';
 
370
                        $parens_open  = '(';
 
371
                        $parens_close = ')';
 
372
 
 
373
                    } elseif ($func_type == '!=' && $enum_selected_count > 1) {
 
374
                        $func_type    = $func[$i] = 'NOT IN';
 
375
                        $parens_open  = '(';
 
376
                        $parens_close = ')';
 
377
 
 
378
                    } else {
 
379
                        $parens_open  = '';
 
380
                        $parens_close = '';
 
381
                    }
 
382
                    $enum_where = '\'' . PMA_sqlAddslashes($fields[$i][0]) . '\'';
 
383
                    for ($e = 1; $e < $enum_selected_count; $e++) {
 
384
                        $enum_where .= ', \'' . PMA_sqlAddslashes($fields[$i][$e]) . '\'';
 
385
                    }
 
386
 
 
387
                    $w[] = PMA_backquote($names[$i]) . ' ' . $func_type . ' ' . $parens_open . $enum_where . $parens_close;
 
388
                }
 
389
 
 
390
            } elseif ($fields[$i] != '') {
 
391
                // For these types we quote the value. Even if it's another type (like INT),
 
392
                // for a LIKE we always quote the value. MySQL converts strings to numbers
 
393
                // and numbers to strings as necessary during the comparison
 
394
                if (preg_match('@char|binary|blob|text|set|date|time|year@i', $types[$i]) || strpos(' ' . $func_type, 'LIKE')) {
 
395
                    $quot = '\'';
 
396
                } else {
 
397
                    $quot = '';
 
398
                }
 
399
 
 
400
                // LIKE %...%
 
401
                if ($func_type == 'LIKE %...%') {
 
402
                    $func_type = 'LIKE';
 
403
                    $fields[$i] = '%' . $fields[$i] . '%';
 
404
                }
 
405
                $w[] = PMA_backquote($names[$i]) . ' ' . $func_type . ' ' . $quot . PMA_sqlAddslashes($fields[$i]) . $quot;
 
406
 
 
407
            } // end if
 
408
        } // end for
 
409
 
 
410
        if ($w) {
 
411
            $sql_query .= ' WHERE ' . implode(' AND ', $w);
 
412
        }
 
413
    } // end if
 
414
 
 
415
    if ($orderField != '--nil--') {
 
416
        $sql_query .= ' ORDER BY ' . PMA_backquote($orderField) . ' ' . $order;
 
417
    } // end if
 
418
 
 
419
    require './sql.php';
 
420
}
 
421
 
 
422
?>