Seite 2 von 3
Re: Suchfunktion für Datenbanktabelle
Verfasst: 06.10.2012 19:21
von Miriam
Check mal BNas Codeanpassungen zu dieser Thematik:
Klick
Hint: Deine Single Quotes sind nicht escaped, daher der Parse Fehler.
Re: Suchfunktion für Datenbanktabelle
Verfasst: 06.10.2012 20:13
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
Re: Suchfunktion für Datenbanktabelle
Verfasst: 06.10.2012 20:18
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?
Alle
$_POST['suche']
sind doch weg bzw. sollten weg sein.
Re: Suchfunktion für Datenbanktabelle
Verfasst: 06.10.2012 21:14
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']),
));
Re: Suchfunktion für Datenbanktabelle
Verfasst: 06.10.2012 21:42
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
=
.
Re: Suchfunktion für Datenbanktabelle
Verfasst: 06.10.2012 23:43
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.
Re: Suchfunktion für Datenbanktabelle
Verfasst: 07.10.2012 18:12
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.
Re: Suchfunktion für Datenbanktabelle
Verfasst: 08.10.2012 20:04
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> </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);
Re: Suchfunktion für Datenbanktabelle
Verfasst: 10.10.2012 15:41
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?
Re: Suchfunktion für Datenbanktabelle
Verfasst: 10.10.2012 15:59
von Miriam
Beispiel: .... LIKE '%" . $db->sql_escape($name) . "%'