Seite 1 von 3

Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 10:51
von Walter91
Mit folgenden Suchscript kann ich eine Datenbanktabelle nach allen vorkommenden Zeichen durchsuchen.
Es werden exakt alle Datensätze angezeigt in denen der Suchbegriff enthalten ist.
Das funktioniert super !
Kann mir mal jemand bitte helfen wie ich das in "phpbb-Form" umschreibe?
Es geht nur um den php-Teil, Sprachdatei und Template bekomme ich selber hin.

Code: Alles auswählen

 <?php
// Verbindung zur Datenbank herstellen
$host = "localhost"; 
$user = "xxxxx"; 
$pass = "xxxxx"; 
$db = "kunden"; 

mysql_connect($host, $user, $pass) or die ("Keine Verbindung zur Datenbank");
mysql_select_db($db);

// Datenbank durchsuchen
if ($_POST['submit'])
{
 $sql = 'SELECT Id, Vorname, Nachname, Ort, Strasse, Geburtsdatum 
FROM `kunden` WHERE Vorname LIKE "%'.$_POST['suche'].'%" or Nachname like "%'.$_POST['suche'].'%" or Geburtsdatum like "%'.$_POST['suche'].'%" or Strasse like "%'.$_POST['suche'].'%" or Ort like "%'.$_POST['suche'].'%'.$_POST['suche'].'%"';
 
$res = mysql_query($sql) or die (mysql_error());

// Datenbank , Einträge anzeigen
echo "<ul>";
while ($row = mysql_fetch_assoc($res)) echo "<li><a href=\"suche_funtions.php?id={$row["Id"]}\">{$row["Vorname"]} {$row["Nachname"]} {$row["Ort"]} {$row["Strasse"]} {$row["Geburtsdatum"]} </a></li>";
echo "</ul>";

mysql_free_result($res);
}
else
{
echo '<form method="post" action="">
<table width="500" border="0">
  <tr>
    <td>Suche</td>
    <td><input type="text" name="suche" /></td>
  </tr>
 <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="submit" value="Suchen"></td>
  </tr>
</table>
</form>';
}
?> 

Code: Alles auswählen

<?php
// Verbindung zur Datenbank herstellen
$host = "localhost"; 
$user = "xxxxx"; 
$pass = "xxxxx"; 
$db = "kunden"; 

mysql_connect($host, $user, $pass) or die ("Keine Verbindung zur Datenbank");
mysql_select_db($db);

$sql = "SELECT * FROM kunden WHERE Id = \"{$_GET["id"]}\"";
$res = mysql_query($sql) or die (mysql_error());
$i = 0;

echo '<table width="500" class="table" align="left">';

while ($row = mysql_fetch_assoc($res)) {
    $i++;
    foreach ($row as $key => $value) {
        echo '<td>' . $key .  '</td><td>'  . $value . '</td></tr>';
    }
    echo '  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>';
}
echo '</table>';
mysql_free_result($res);
?> 

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 13:44
von Pyramide

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 13:48
von Walter91
@Pyramide
Wiki habe ich schon gelesen.

Ich habe einen Schreibfehler im Code und finde die Lösung nicht.
Die Schreibweise ab der Zeile where id... ist falsch.
Hier der aktuelle Stand:

Code: Alles auswählen


if ($_POST['submit'])
{        

$id = request_var('id', '');   		
$vorname = request_var('vorname', '');
$nachname = request_var('nachname', '');
$ort = request_var('ort', '');
$strasse = request_var('strasse', '');
$geburtsdatum = request_var('geburtsdatum', '');

$sql = 'SELECT * FROM ' . KUNDEN_TABLE ."
   
    WHERE id = '" . $_POST['suche']$id . "'
            AND vorname = '" . $_POST['suche']$vorname . "'
            AND nachname = '" . $_POST['suche']$nachname . "'
            AND ort = '" . $_POST['suche']$ort . "'
            AND strasse = '" . $_POST['suche']$strasse . "'
						AND geburtsdatum = '" . $_POST['suche']$geburtsdatum . "'";
    
 $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {         
        $template->assign_block_vars('liste', array(
             
            'POST_ID'            => $row['id'],
            'POST_VORNAME'       => $row['vorname'],
            'POST_NACHNAME'      => $row['nachname'], 
						'POST_ORT'           => $row['ort'], 
						'POST_STRASSE'       => $row['strasse'],                         
            'POST_GEBURTSDATUM'  => $row['geburtsdatum'],				    					                   
        ));
    }
    $db->sql_freeresult($result);
   
  $template->assign_vars(array(        
  'U_FORM_ACTION_SEARCH'    => append_sid($phpbb_root_path . 'search_functions.' . $phpEx, 'mode=search&id=' . $row['id']),
    ));
    

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 15:34
von Pyramide
$_POST['suche']$id
So direkt hintereinander zwei Variablen kann natürlich nicht funktionieren. Sieht für mich so aus, als hättest du vergessen die $_POST da rauszunehmen.

Ansonsten ganz wichtig: http://de.wikipedia.org/wiki/SQL_Injection bzw. https://wiki.phpbb.com/Database_Abstrac ... sql_escape und https://wiki.phpbb.com/Database_Abstrac ... uild_array

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 16:37
von Walter91
Pyramide hat geschrieben
So direkt hintereinander zwei Variablen kann natürlich nicht funktionieren. Sieht für mich so aus, als hättest du vergessen die $_POST da rauszunehmen.
Das ist ja gerade mein Problem. Was in php fast spielend einfach ist, bekomme ich trotz der Wiki nicht in phpbb übersetzt weil die Schreibweisen völlig anders sind.

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 18:09
von BNa
Ersetze

Code: Alles auswählen

$sql = 'SELECT * FROM ' . KUNDEN_TABLE ."
   
    WHERE id = '" . $_POST['suche']$id . "'
            AND vorname = '" . $_POST['suche']$vorname . "'
            AND nachname = '" . $_POST['suche']$nachname . "'
            AND ort = '" . $_POST['suche']$ort . "'
            AND strasse = '" . $_POST['suche']$strasse . "'
                  AND geburtsdatum = '" . $_POST['suche']$geburtsdatum . "'";
mit

Code: Alles auswählen

    $sql = 'SELECT * FROM ' . KUNDEN_TABLE . '
            WHERE id = ' . $id . '
            AND vorname = ' . $vorname . '
            AND nachname = ' . $nachname . '
            AND ort = ' . $ort . '
            AND strasse = ' . $strasse . '
            AND geburtsdatum = ' . $geburtsdatum;
------------------------------

Und für volle UTF8 Kompatibilität (Umlaute etc.) und richtiges Type Casting (für $id, sofern eine echte Zahl und das Geburtsdatum, sofern meine Schreibweise ok ist) ändere gleich noch das

Code: Alles auswählen

$id = request_var('id', '');         
$vorname = request_var('vorname', '');
$nachname = request_var('nachname', '');
$ort = request_var('ort', '');
$strasse = request_var('strasse', '');
$geburtsdatum = request_var('geburtsdatum', '');
in das

Code: Alles auswählen

$id = request_var('id', '', 0);      
$vorname = request_var('vorname', '', true);
$nachname = request_var('nachname', '', true);
$ort = request_var('ort', '', true);
$strasse = request_var('strasse', '', true);
$geburtsdatum = request_var('geburtsdatum', 00.00.0000, true); 
// Nochmal auf Sicherheit checken ^
// Geburtsdatum vorher 'auseinander nehmen', auf int()(Zahl) testen und wieder zusammen setzen  

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 18:34
von Miriam
  • An diesem neuen Code ist es nicht sehr hilfreich AND zu verwenden, da sollte es doch besser OR heissen, weil Du dann im Grunde schon alle Daten, die Du erst auslesen willst, kennst.
  • Die Zuhilfenahme von LIKE (so wie im Eingangspost) ist/wäre auch keine schlechte Wahl.

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 18:36
von BNa
Um Logik und Struktur soll sich mal der OP Köppe machen :grin:
Hier gings (erstmal) nur ums funktionieren und n Tuck mehr Sicherheit :wink:

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 18:43
von Miriam
Supi....
Eine Variable wird aber so: $id = request_var('id', 0);* in Integer gecastet.
Das nur am Rande.

(int)$id geht auch.... denke ich.

*Quelle

Re: Suchfunktion für Datenbanktabelle

Verfasst: 06.10.2012 19:17
von Walter91
Erst mal vielen Dank für eure schnelle Hilfe :grin:
Allerdings hab ich jetzt noch folgenden Fehler drin:

Parse error: syntax error, unexpected T_VARIABLE on line 22
das ist diese Zeile:
WHERE id = ' . $_POST['suche']$id . '