<?php
mysql_connect( 'localhost', 'root', '' ) or die( __LINE__.": ".mysql_error() );
mysql_select_db( 'test' ) or die( __LINE__.': '.mysql_error() );
// zu durchsuchende tabelle
$table = 'suchen';
// spalten, nach denen man nicht suchen können soll
$hiddencols = array('id', 'datum', 'link';
$cols = array();
$cols_res = mysql_query( "show columns from `$tabelle`" ) or die( __LINE__.': '.mysql_error() );
while( $col = mysql_fetch_assoc( $cols_res ) ) {
if( in_array( $col['Field'], $hiddencols, true ) ) continue;
$cols[] = $col['Field'];
}
if(empty($_GET['search'])){
// formular
?>
<form method="get">
<?
foreach( $cols as $id => $c ) {
print( $c.': <input type="text" name="field['.$id.']"><br />'."\n" );
}
?>
<input type="submit" name="search" value="suchen">
</form>
<?
} else {
// suchen
$find_where = array();
foreach( $_GET['field'] as $id => $val) { // formular-daten auswerten
$val = trim( $val );
$val = mysql_escape_string( $val );
if( $val == '' || !isset( $cols[$id] ) ) continue; // kein wert bzw. nicht existierende spalte
// BUGFIX 3
$find_where[] = " `{$cols[$id]}` like '%$val%' ";
}
if( count( $find_where ) == 0 ) {
print( 'bitte suchkriterien angeben!' );
} else {
// BUGFIX 1
$find_sql = 'select `'.implode( '`, `', $cols ).'` from `'.$table.'` where '.implode( 'and', $find_where );
$find_res = mysql_query( $find_sql ) or die( __LINE__.': '.mysql_error() );
?>
Ergebnis:
<table border="0">
<tr>
<?
// BUGFIX 2
foreach( $cols as $c ) {
print( "\t\t<th>".$c."</th>\n" );
}
?>
</tr>
<?
while( $row = mysql_fetch_assoc($find_res) ) {
print( "\t<tr>\n" );
foreach($row as $field)
print( "\t\t<td>".$field."</td>\n" );
print( "\t</tr>\n" );
}
?>
</table>
<?
}
}
?>
also das ist ein code der is eig. genau das was ich brauche.. nur wird hier für jedes zu durchsuchende feld ein eigenes input angezeigt.. wie kann man das ändern dass nur ein input suchfeld für alle zu durchsuchenden felder angezeigt wird??
mfg