Schleife für Suchfunktion
Simon
- php
0 Mewes0 Mewes0 Simon
0 Christoph Jeschke0 SImon
Hi,
würd gern eine Suchfunktion machen. Ansich funktionierts ja auch, nur wenn in der Datenbank 2 gleiche Begriffe stehen wird immer nur einer angezeigt.
Ist ja ansich auch ganz logisch wenn man sich mein Script anschaut.
Kann mir vielleicht jemand sagen wie ich das machen kann dass alle gefundenen Ergebnisse angezeigt werden?
<?php
function search($suche) {
$hostUrl = '';
$userName = '';
$password = '';
$mysql_datetime = date('Y-m-d H:i:s');
$connectID = mysql_connect($hostUrl, $userName, $password)
or die ("Tut mir leid, kann keine Verbindung zur Datenbank aufbauen");
mysql_select_db("", $connectID)
or die ("Auswahl der Datenbank nich Möglich");
$myDataID = mysql_query("SELECT * FROM tabelle WHERE Nachname = '$suche'" , $connectID)
or die ("Auswahl von Datenbank nicht möglich");
return $myDataID;
mysql_close($connectID);
}
if (@$_POST['searched']) {
$suche = $_POST['suche'];
$returnedRecord = search($suche);
$LastName = @mysql_result($returnedRecord,0,'Nachname');
$FirstName = @mysql_result($returnedRecord,0,'Vorname');
$id = @mysql_result($returnedRecord,0,'id');
echo "<a href=\"test.php?tcid=$id\">$LastName $FirstName</a>";
}
?>
MfG
Simon
Hi,
würd gern eine Suchfunktion machen. Ansich funktionierts ja auch, nur wenn in der Datenbank 2 gleiche Begriffe stehen wird immer nur einer angezeigt.
Ist ja ansich auch ganz logisch wenn man sich mein Script anschaut.
Kann mir vielleicht jemand sagen wie ich das machen kann dass alle gefundenen Ergebnisse angezeigt werden?
<?php
function search($suche) {
$hostUrl = '';
$userName = '';
$password = '';
$mysql_datetime = date('Y-m-d H:i:s');
$connectID = mysql_connect($hostUrl, $userName, $password)
or die ("Tut mir leid, kann keine Verbindung zur Datenbank aufbauen");
mysql_select_db("", $connectID)
or die ("Auswahl der Datenbank nich Möglich");
$myDataID = mysql_query("SELECT * FROM tabelle WHERE Nachname = '$suche'" , $connectID)
or die ("Auswahl von Datenbank nicht möglich");
return $myDataID;
mysql_close($connectID);
}
Ich habe es nicht getestet, dürfte aber funktionieren. Und probier das nächste mal php.net, dort ist dieses Beispiel auch gelistet.
Mewes
<?php
function search($suche) {
$hostUrl = '';
$userName = '';
$password = '';
$mysql_datetime = date('Y-m-d H:i:s');
$connectID = mysql_connect($hostUrl, $userName, $password)
or die ("Tut mir leid, kann keine Verbindung zur Datenbank aufbauen");
mysql_select_db("", $connectID) or die ("Auswahl der Datenbank nich Möglich");
return mysql_query("SELECT * FROM tabelle WHERE Nachname = '$suche'" , $connectID)
or die ("Auswahl von Datenbank nicht möglich");
mysql_close($connectID);
}
if (@$_POST['searched']) {
$suche = $_POST['suche'];
$records = search($suche);
while ($record = mysql_fetch_array($records, MYSQL_ASSOC)) {
$LastName = $record['Nachname'];
$FirstName = $record['Vorname'];
$id = $record['Vorname'];
echo "<a href="test.php?tcid=$id">$LastName $FirstName</a>";
}
}
?>
if (@$_POST['searched']) {
$suche = $_POST['suche'];
$returnedRecord = search($suche);
$LastName = @mysql_result($returnedRecord,0,'Nachname');
$FirstName = @mysql_result($returnedRecord,0,'Vorname');
$id = @mysql_result($returnedRecord,0,'id');
echo "<a href="test.php?tcid=$id">$LastName $FirstName</a>";
}
?>
>
> MfG
> Simon
>
$id = $record['Vorname'];
muss natürlich
$id = $record['id'];
heißen. Mein Fehler (copy & paste).
Ok danke,
ich bekomme aber leider als Meldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
Guten Tag,
$mysql_datetime = date('Y-m-d H:i:s');
Ist wohl überflüssig, da nirgendwo in der Funktion verwendet.
if (@$_POST['searched']) {
Man sollte Warnungen nicht deaktiveren. Einerseits braucht man sie, um Fehler zu finden, andererseits ist der @-Operator unperformant.
$suche = $_POST['suche'];
Das öffnet SQL-Injection Tür und Tor.
$records = search($suche);
while ($record = mysql_fetch_array($records, MYSQL_ASSOC)) {
Man kann auch direkt search() aufrufen, anstatt in $records zwischenzuspeichern.
$LastName = $record['Nachname'];
$FirstName = $record['Vorname'];
$id = $record['Vorname'];
echo "<a href="test.php?tcid=$id">$LastName $FirstName</a>";
Auch die Ausgabe sollte man entsprechen behandeln. Eventuell ist XSS oder CSRF möglich.
Gruß
Christoph Jeschke
»» $suche = $_POST['suche'];
Das öffnet SQL-Injection Tür und Tor.
»»
Ich weiß, mir geht es hier aber nur grad um die Suchfunkion, den Rest später
Auch die Ausgabe sollte man entsprechen behandeln. Eventuell ist XSS oder CSRF möglich.
Kannst du etwas näher erklären ?
Guten Tag,
Ich weiß, mir geht es hier aber nur grad um die Suchfunkion, den Rest später
Das ist _genau_ die richtige Einstellung.
Auch die Ausgabe sollte man entsprechen behandeln. Eventuell ist XSS oder CSRF möglich.
Kannst du etwas näher erklären ?
Wenn du die Daten aus der Datenbank nicht angemessen an die neue Umgebung (HTML) anpasst, kann ein Angreifer bösartigen Code einbinden, z.B. JavaScript. Auch könnte ein argloser Nutzer versehentlich Zeichen mit Metabedeutung eingeben, z.B. doppelte Anführungszeichen, und damit den Ausgabekontext verändern.
Ansonsten findest du bei der Suchmaschine deines Vertrauens umfangreiche Informationen zu beiden Stichwörtern.
Gruß
Christoph Jeschke
»» Das ist _genau_ die richtige Einstellung.
Ich weiß. Mir haben auch schon oft die Leute davon abgeraten, nur ich wollt halt nur mal die Suche ansich hinbekommen.
MfG
Simon