Suchfunktion für Datenbanktabelle

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Suchfunktion für Datenbanktabelle

Beitrag 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);
?> 
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag 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']),
    ));
    
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Suchfunktion für Datenbanktabelle

Beitrag 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
KB:knigge
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag 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.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag 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  
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag 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:
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag 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
Zuletzt geändert von Miriam am 06.10.2012 19:21, insgesamt 1-mal geändert.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag 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 . '
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“