tuffli
Goto Top

PHP Suchfunktion in einer MYSQL-Datenbank

Hallo,
ich bin gerade dabei eine kleine Suchfunktion für meine Datenbank mithilfe von PHP zu basteln.
$verbindung = mysql_connect ("localhost", "root", "") or die ("keine Verbindung zur Datenbank");    
mysql_select_db("inventory") or die ("Die Datenbank wurde nicht gefunden");  

$suche = $_POST['suche'];  

$abfrage="SELECT LI_PCNAME, LI_SCANIP FROM li_pcinfo WHERE LI_PCNAME LIKE '%$suche%' ";  
$ergebnis=@mysql_query($abfrage) or die(mysql_error());  

if($ausgabe = mysql_fetch_assoc($ergebnis)) 
{ 
        echo " ".$ausgabe['suche']." ";   
}

else 
{ 
	echo "Es wurde kein Einrag für \"<u>$suche</u>\" gefunden.<br />  
}
Wenn der gesuchte Datensatz nicht vorhanden ist, wird dies auch so widergegeben. Ist der Datensatz vorhanden gibt er gar nichts aus...
Was hab ich denn falsch gemacht?

Danke schonmal im voraus!
Tuffli
Kommentar vom Moderator Dani am Apr 27, 2011 um 14:16:23 Uhr
Formatierungshilfen eingefügt! In Zukunft bitte auch benutzen!

Content-Key: 165267

Url: https://administrator.de/contentid/165267

Printed on: April 23, 2024 at 09:04 o'clock

Mitglied: 48507
48507 Apr 27, 2011 at 14:51:02 (UTC)
Goto Top
echo " ".$ausgabe['suche']." ";

irritiert mich. Wo ist denn 'suche' definiert? Wie wärs mit:

mysql_fetch_array($ergebnis)

und dann echo " ".$ausgabe['LI_PCNAME']." "; etc.

oder

mysql_fetch_row($ergebnis)

und dann echo " ".$ausgabe." "; etc.

Außerdem fehlt die Schleife um die Ausgabe:

while($data=mysql_fetch_array($ergebnis) {

echo " ".$data['LI_PCNAME']

}
Mitglied: 48507
48507 Apr 27, 2011 at 14:55:25 (UTC)
Goto Top
Also so:

if(mysql_fetch_assoc($ergebnis))  {

  while($data=mysql_fetch_array($ergebnis) {

    echo " ".$data['LI_PCNAME']." ";  
    echo " ".$data['LI_SCANIP']."<br>";  

   }
}

else {  

   echo "Es wurde kein Einrag für \"<u>$suche</u>\" gefunden.<br /> ";  

}
Member: Arano
Arano Apr 27, 2011 at 15:28:54 (UTC)
Goto Top
Hallo zusammen

Öhm... also
"if(mysql_fetch_assoc($ergebnis)) {"
ist nicht gut !
  1. Ist nicht klar was du denn willst, soll es Zeilen enthalten oder nicht ? UND
  2. geht dir der erste Datensatz verloren !
PHP-Manual mysql_num_rows()
<?php
  // Enthält die Such-Ergebnistabelle mehr als NULL Zeilen ( = mindestens ein Suchtreffer benötigt)
  if(0 < mysql_num_rows($ergebnis))  {
  }
?>


~Arano
Mitglied: 48507
48507 Apr 27, 2011 at 15:31:38 (UTC)
Goto Top
Sicher? if(mysql_fetch_assoc($ergebnis)) gibt doch nur true oder false aus. Wo geht hier der erste Datensatz verloren? Aber hast Recht, mysql_num_rows ist besser.
Member: Arano
Arano Apr 27, 2011 at 15:46:21 (UTC)
Goto Top
Hi spytnik

öhm nö !
PHP-Manual - mysql_fetch_assoc()
Returns an associative array of strings that corresponds to the fetched row, or FALSE if there are no more rows.
Liefert ein assoziatives Array, das den geholten entprechenden Datensatz enthält. Sind keine weiteren Datensätze vorhanden gibt diese Funktion FALSE zurück.
Und wenn das was eine Funktion zurück gibt nicht in eine Variable gespeichert wird (z.B. $var = fnc();) geht es verloren.


~Arano
Member: dog
dog Apr 27, 2011 at 21:19:05 (UTC)
Goto Top
nicht in eine Variable gespeichert wird (z.B. $var = fnc();) geht es verloren.

Genau das macht der TO ja:

if($ausgabe = mysql_fetch_assoc($ergebnis))

Das Problem ist wie bereits gesagt, dass "suche" keine Ergebnisspalte des SELECT-Statements ist.

Viel interessanter ist doch die SQL-Injection und das ungültige Statement wenn man die Seite mal ohne POST aufruft...
Member: Arano
Arano Apr 27, 2011 at 23:19:08 (UTC)
Goto Top
Hallo dog

Zitat von @dog:
> nicht in eine Variable gespeichert wird (z.B. $var = fnc();) geht es verloren.

Genau das macht der TO ja:

> if($ausgabe = mysql_fetch_assoc($ergebnis))

Ja stimmt, aber in dem Lösungsbeispiel von spytnik fehlte es. Und ganz offensichtlich hat er auch mit einem anderem Verhalten von "mysql_fetch_assoc()" gerechnet.

Das Problem ist wie bereits gesagt, dass "suche" keine Ergebnisspalte des SELECT-Statements ist.

Viel interessanter ist doch die SQL-Injection und das ungültige Statement wenn man die Seite mal ohne POST aufruft...
Wundert mich gerade das du in diesem Zusammenhang nicht
<?php
ini_set('error_reporting', E_ALL|E_STRICT);  
ini_set('display_errors', 'On');  
?>
erwähnst, die in beiden Fällen (Injections ausgenommen) eine NOTICE angezeigt hätten.


~Arano
Member: dog
dog Apr 28, 2011 at 00:13:16 (UTC)
Goto Top
Wundert mich

Irgendwann hat man keine Lust mehr jeden Tag das selbe wieder und wieder zu erzählen face-smile
Nicht mal die Firma, der ich 2007 über die SQL-Lücken in ihrer kommerziellen Software erzählt habe, hat bis heute was gemacht...
Member: Tuffli
Tuffli Apr 28, 2011 at 07:06:55 (UTC)
Goto Top
Zitat von @Arano:
Hallo zusammen

Öhm... also
"if(mysql_fetch_assoc($ergebnis)) {"
ist nicht gut !
  1. Ist nicht klar was du denn willst, soll es Zeilen enthalten oder nicht ? UND
  2. geht dir der erste Datensatz verloren !
PHP-Manual mysql_num_rows()
<?php
>   // Enthält die Such-Ergebnistabelle mehr als NULL Zeilen ( = mindestens ein Suchtreffer benötigt)
>   if(0 < mysql_num_rows($ergebnis))  {
>   }
> ?>


~Arano

Danke an alle...
Ja, wenn man verzweifelt versucht es zum laufen zu bekommen, entstehen manchmal komische Sachen. Vor dem Ergebnis stand ich schonmal fast. Aber wenn man dann anfängt zu googlen und den gefunden Code mit dem eigenen zusammenbastelt kommt oft nur Mist raus. Deshalb die Frage hier im Forum. Vielen Dank nochmal.
Klappt jetzt 1A.