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

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

Check mal BNas Codeanpassungen zu dieser Thematik: Klick

Hint: Deine Single Quotes sind nicht escaped, daher der Parse Fehler.
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 »

@Miriam
Schreibweise stimmt erst mal alles genau wie von BNa geschrieben.

$id = request_var('id', 0); bzw. $id = request_var('id', '', 0); hab ich mal mit beiden Varianten getestet.

if ($_POST['submit']) hab ich geändert in
$submit = (isset($_POST['submit'])) ? true : false;

Fehler ist immer noch da
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

Walter91 hat geschrieben:Parse error: syntax error, unexpected T_VARIABLE on line 22
das ist diese Zeile:
WHERE id = ' . $_POST['suche']$id . '
Hier wird doch eine ganz andere Zeile / anderer Code angemeckert. Oder stehe ich jetzt auf dem Schlauch? :o

Alle $_POST['suche'] sind doch weg bzw. sollten weg sein.
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 »

@Miriam
Ist mir ehrlich gesagt auch rätselhaft. Komischerweise kommt jetzt der Fehler:
Parse error: syntax error, unexpected ')'
Irgendwo eine Klammer falsch gesetzt ???
Der aktuelle Code

Code: Alles auswählen

$submit = (isset($_POST['submit'])) ? true : false;    
{        

    $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', '');

    $sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '       
		                
                WHERE id = ' . $id . '
                AND vorname = ' . $vorname . '
                AND nachname = ' . $nachname . '
                AND ort = ' . $ort . '
                AND strasse = ' . $strasse . '
                AND geburtsdatum = ' . $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'  => append_sid($phpbb_root_path . 'search_functions.' . $phpEx, 'mode=search&id=' . $row['id']),
 ));
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

Ich weiss jetzt nicht, wo genau der Fehler angemeckert wurde. Aber einige Variablen in der SQL Query sind doch Strings, dann mußt Du das etwas anders schreiben, weil die einfachen Quotes bei Dir das Ende des $sql-Variablen-Strings bezeichnen und nicht den übergebenen Wert als String markieren.... Ich hoffe, das war verständlich.

Es sollte also eher so aussehen (ungetestet):

Code: Alles auswählen

    $submit = (isset($_POST['submit'])) ? true : false;   
    if ($submit)
    {
        $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', '');

        $sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '       
                WHERE id = ' . (int)$id . "
                    OR vorname = '" . $db->sql_escape($vorname) . "'
                    OR nachname = '" . $db->sql_escape($nachname) . "'
                    OR ort = '" . $db->sql_escape($ort) . "'
                    OR strasse = '" . $db->sql_escape($strasse) . "'
                    OR geburtsdatum = '" . $db->sql_escape($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'  => append_sid($phpbb_root_path . 'search_functions.' . $phpEx, 'mode=search&id=' . $row['id']),
        ));
    } 
Du solltest in der Where Clause eher LIKE einsetzen als =.
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 »

Danke Miriam
Habe die Zeilen von AND auf OR geändert.
Ganz unten hatte ich die letze Klammer vergessen. Jetzt läuft das erst mal ohne Fehlermeldung bis zum Suchformular durch.

Jetzt kann ich mich daran machen die Ausgabeseite zu basteln.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von BNa »

Miriam hat geschrieben:Eine Variable wird aber so: $id = request_var('id', 0);* in Integer gecastet.
War ein langer Tag, da kann sowas mal passieren.
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag von Walter91 »

Ich habe das jetzt mal auf eine vorhandene größere Datenbank umgeschrieben um mehr Testmöglichkeiten zu haben.
Die search.php soll die Daten einsammeln und an die search_2.php ausgeben.
Leider funktioniert die Datenübergabe noch nicht. Hat jemand einen Tipp wo der Fehler liegt?

search.php

Code: Alles auswählen

$submit = (isset($_POST['submit'])) ? true : false;
{ 
    $id = request_var('id', 0); 
		$land = request_var('land', '', true);     
    $name = request_var('name', '', true);
    $plz = request_var('plz', '', true);
    $ort = request_var('ort', '', true);
    $strasse = request_var('strasse', '', true);
    $telefon = request_var('telefon', '', true);
                   
		$sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '       
            WHERE id = ' . (int)$id . "
                  OR land LIKE '" . $db->sql_escape($land) . "' 
                  OR name LIKE '" . $db->sql_escape($name) . "' 
                  OR plz LIKE '" . $db->sql_escape($plz) . "' 
                  OR ort LIKE '" . $db->sql_escape($ort) . "' 
                  OR strasse LIKE '" . $db->sql_escape($strasse) . "'                   
                  OR telefon LIKE '" . $db->sql_escape($telefon). "'";
                  $result = $db->sql_query($sql);
									 							  
    $template->assign_vars(array(     
    'U_FORM_ACTION' => append_sid($phpbb_root_path . 'search_2.' . $phpEx, 'mode=search' . $row['id']),	        
   ));
 }   
search.html

Code: Alles auswählen

<form method="post" action="{U_FORM_ACTION}">
<table width="300" border="0">
  <tr>
    <td>Suchbegriff eingeben</td>
    <td><input type="text"  id="id"  name="id" /></td>
  </tr>
 <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="submit" value="Suchen"></td>
  </tr>
</table>
search_2.php

Code: Alles auswählen

	$sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '  
		        ORDER BY name'; 
		        $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {                 				  
        $template->assign_block_vars('liste', array(             
            'POST_ID'       => $row['id'],
            'POST_LAND'     => $row['land'],
            'POST_NAME'     => $row['name'],
            'POST_PLZ'      => $row['plz'],
            'POST_ORT'      => $row['ort'], 
            'POST_STRASSE'  => $row['strasse'],             
            'POST_TELEFON'	=> $row['telefon'],					      					                               				                   
        ));
      }
    $db->sql_freeresult($result);
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag von Walter91 »

Ich habe das jetzt hin bekommen es funktioniert.
Allerdings mit einer kleinen Einschränkung.
Wenn ich in die Suche eingebe:
z.B. den Vornamen Mike findet das Script z.B. Mike Müller , Mike Meier, Mike Schulze usw.
Suche ich dagegen nach Müller , Meier oder Schulze findet er nichts.
Das Script findet also jetzt nur Zeichen die am Anfang des Datensatzes stehen.

Kann jemand helfen wie ich das ändern kann?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

Beispiel: .... LIKE '%" . $db->sql_escape($name) . "%'
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

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