Suche Formular mit PDO

Den code unten funktioniert jetzt, aber wie kann ich es so machen, wenn keine Ergebnisse gefunden werden es gibt eine Botschaft, statt leere.

Ich glaube, ich habe es geschafft, erstellen Sie eine Suchabfrage für die Datenbank. Es ist nur eine sehr einfache Suche, aber es scheint nicht aus irgendeinem Grund arbeiten. Jede Beratung wäre geschätzt, im noch neu zu pdo (sehr neu! freundlich sein!).

Auch keine Benutzer eingegebenen Daten in die Datenbank eingefügt, so dass ich denke, ich kann ausschließen, xss vorausgesetzt, Ihre SQL-inject kostenlos? Was von dem, was ich verstehen PDO ist? im plus mit einem stand-alone DB-Benutzer ohne Schreibrechte.

Haben, ersetzen Sie die Daten mit xxx für Sicherheit

Datei aufgerufen wird search.php

*aktualisiert änderungen vorgeschlagen
2. *aktualisiert, um Hilfe
*3. update

   <html>
<head>
</head>
<body>
<form name="frmSearch" method="post" action="search.php">
  <table width="599" border="1">
    <tr>
      <th>Keyword
      <input name="var1" type="text" id="var1">
      <input type="submit" value="Search"></th>
    </tr>
  </table>
</form>
<?php
$nameofdb = 'xxxxxx';
$dbusername = 'xxxxxxxxxxxxxx';
$dbpassword = 'xxxxxxxxxxxxx';



//Connect to MySQL via PDO
try {
$dbh = new PDO("mysql:dbname=$nameofdb;host=localhost", $dbusername, $dbpassword);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

$var1 = str_replace(array('%','_'),'',$_POST['var1']);
if (!$var1)
{
    exit('Invalid form value: '.$var1);
}


$query = "SELECT * FROM xxxxx WHERE xxxxxx LIKE :search OR xxxxx LIKE :search";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':search', '%' . $var1 . '%', PDO::PARAM_INT);
$stmt->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");


 $result = $stmt->fetchAll();

foreach( $result as $row ) {
    echo $row["id"];
    echo $row["title"];
}




?>

</body>
</html>
  • Beachten Sie, dass, obwohl man mit prepared statements, ich kann noch Ihr Skript wieder die gesamte DB durch das ausfüllen nichts, _ oder % in der form (MySQL-wildcards). Sie würden gut daran tun, bei der überprüfung von Benutzereingaben unabhängig von der Verwendung von prepared statements oder nicht
  • Hallo danke, wie mache ich das? Ich mysqli_real_escape_string aber im lost int PDO Welt!
  • einfach überprüfen: $var1 = str_replace(array('%','_'),'',$_POST['var1']); if (!$var){ exit('Invalid form value: '.$var1);}
  • Ich habe Hinzugefügt, dies in der richtigen Stelle? Danke Jungs für Eure Hilfe.
  • Hallo Elias ich habe jetzt das Skript mit $var1 = $_POST['var1']; aber nicht $var1 = str_replace(array('%','_'),",$_POST['var1']); if (!$var){ exit('Ungültige form-Wert: '.$var1);} ersetzt $var1 = $_POST['var1']; oder füge ich es oben/unten?
  • Sie müssen nur ersetzen Sie die reguläre Zuweisung ($var1 = $_POST['var1']; mit $var1 = str_replace(array('%','_'),'',$_POST['var1']); die if Aussage nach, dass wird zu true ausgewertet (und beenden, ohne die Abfrage ausführen), wenn der Benutzer eingegeben nur Platzhalter, oder 0
  • alles kommt da "Ungültige form-Wert:Suchbegriff"
  • aktualisiert haben Sie den code oben entsprechend Ihren änderungen. Vielen Dank für Ihre Hilfe mit diesem. Sobald ich Ihr etwas Arbeit mit dem code, den ich denke im SQL_inject frei
  • denn Sie haben !$var aber es muss sein !$var1
  • WAHEY! es funktioniert! ok also 2 Letzte Fragen. 1) ist dieses Skript SQL_inject dann frei? 2) wie kann ich belohnen Sie die Nutzer hier mit den Punkten etc?
  • Perry hat Recht, ich bearbeitet Ihre post. Beachten Sie, dass der code, so wie es jetzt steht, wird immer das Problem invalid form value: wenn der client views in der form zum ersten mal, wie die PHP-code eingebettet in HTML-Seite
  • brill, also nur zu bestätigen, Spritzen kostenlos (im paranoid über diesem!) auch ich habe angenommen, perry, aber wie kann ich die Belohnung @elias für die Hilfe hier vor?
  • dam, wenn ich einen Raum betreten es echos die gesamte Datenbank? false alarm hatte nicht hochgeladen neue Datei
  • wenn das der Fall ist, ändern Sie entweder das array in der str_replace(), und fügen Sie eine ' ' Wert (nicht empfohlen), oder wickeln Sie das gesamte str_replace Ausdruck in einer trim nennen: $var1 = trim(str_replace(array(),'',$_POST));
  • Hallo, tut mir Leid, Sie zu stören wieder, aber wie würde ich echo die Ergebnisse z.B. echo nur die ID am Ende statt all die details? z.B. Regel-id do echo $row['id']; aber seine scheint nicht zu funktionieren
  • denke, ich habe es behoben mit $result = $stmt->fetchAll(); foreach( $Ergebnis as $Zeile ) { echo $row["id"]; echo $row["Titel"]; }
  • Der obige code funktioniert jetzt, aber wie kann ich es so machen, wenn keine Ergebnisse gefunden werden es gibt eine Botschaft, statt leere.
  • siehe mein update 4 🙂

InformationsquelleAutor user1657967 | 2013-07-16
Schreibe einen Kommentar