Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Dani am 27.04.2011 um 16:16:23 Uhr
Formatierungshilfen eingefügt! In Zukunft bitte auch benutzen!
GELÖST

PHP Suchfunktion in einer MYSQL-Datenbank

Frage Entwicklung PHP

Mitglied: Tuffli

Tuffli (Level 1) - Jetzt verbinden

27.04.2011, aktualisiert 16:16 Uhr, 3788 Aufrufe, 9 Kommentare

Hallo,
ich bin gerade dabei eine kleine Suchfunktion für meine Datenbank mithilfe von PHP zu basteln.
01.
$verbindung = mysql_connect ("localhost", "root", "") or die ("keine Verbindung zur Datenbank");   
02.
mysql_select_db("inventory") or die ("Die Datenbank wurde nicht gefunden"); 
03.
 
04.
$suche = $_POST['suche']; 
05.
 
06.
$abfrage="SELECT LI_PCNAME, LI_SCANIP FROM li_pcinfo WHERE LI_PCNAME LIKE '%$suche%' "; 
07.
$ergebnis=@mysql_query($abfrage) or die(mysql_error());   
08.
 
09.
if($ausgabe = mysql_fetch_assoc($ergebnis))  
10.
{  
11.
        echo " ".$ausgabe['suche']." ";  
12.
13.
 
14.
else  
15.
{  
16.
	echo "Es wurde kein Einrag für \"<u>$suche</u>\" gefunden.<br /> 
17.
}
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
Mitglied: 48507
27.04.2011 um 16:51 Uhr
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[0]." "; etc.

Außerdem fehlt die Schleife um die Ausgabe:

while($data=mysql_fetch_array($ergebnis) {

echo " ".$data['LI_PCNAME']

}
Bitte warten ..
Mitglied: 48507
27.04.2011 um 16:55 Uhr
Also so:

01.
if(mysql_fetch_assoc($ergebnis))  { 
02.
 
03.
  while($data=mysql_fetch_array($ergebnis) { 
04.
 
05.
    echo " ".$data['LI_PCNAME']." "; 
06.
    echo " ".$data['LI_SCANIP']."<br>"; 
07.
 
08.
09.
10.
 
11.
else {   
12.
 
13.
   echo "Es wurde kein Einrag für \"<u>$suche</u>\" gefunden.<br /> "; 
14.
 
15.
}
Bitte warten ..
Mitglied: Arano
27.04.2011 um 17:28 Uhr
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()
01.
<?php 
02.
  // Enthält die Such-Ergebnistabelle mehr als NULL Zeilen ( = mindestens ein Suchtreffer benötigt) 
03.
  if(0 < mysql_num_rows($ergebnis))  { 
04.
05.
?>

~Arano
Bitte warten ..
Mitglied: 48507
27.04.2011 um 17:31 Uhr
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.
Bitte warten ..
Mitglied: Arano
27.04.2011 um 17:46 Uhr
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
Bitte warten ..
Mitglied: dog
27.04.2011 um 23:19 Uhr
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...
Bitte warten ..
Mitglied: Arano
28.04.2011 um 01:19 Uhr
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
01.
<?php 
02.
ini_set('error_reporting', E_ALL|E_STRICT); 
03.
ini_set('display_errors', 'On'); 
04.
?>
erwähnst, die in beiden Fällen (Injections ausgenommen) eine NOTICE angezeigt hätten.


~Arano
Bitte warten ..
Mitglied: dog
28.04.2011 um 02:13 Uhr
Wundert mich

Irgendwann hat man keine Lust mehr jeden Tag das selbe wieder und wieder zu erzählen
Nicht mal die Firma, der ich 2007 über die SQL-Lücken in ihrer kommerziellen Software erzählt habe, hat bis heute was gemacht...
Bitte warten ..
Mitglied: Tuffli
28.04.2011 um 09:06 Uhr
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()
01.
<?php 
02.
>   // Enthält die Such-Ergebnistabelle mehr als NULL Zeilen ( = mindestens ein Suchtreffer benötigt) 
03.
>   if(0 < mysql_num_rows($ergebnis))  { 
04.
>   } 
05.
> ?>

~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.
Bitte warten ..
Ähnliche Inhalte
PHP
PHP MySQL Abfrage aus Datenbank
Frage von Lost144PHP12 Kommentare

Hallo, Ich habe in einer Datenbank daten über VM's stehen. Angaben wie hostname,adresse, serverat usw. Wie kann ich in ...

PHP
Daten via PHP aus mysql Datenbank auslesen und löschen
gelöst Frage von KyrinjaPHP5 Kommentare

Guten Morgen liebe Leute, ich verzweifle! Ich versuche Daten aus einer DB auszulesen und hinter den Daten einen Löschenbutton ...

PHP
PHP und Mysql aus Datenbank auslesen und geänderte Daten einfügen
gelöst Frage von gamerffPHP4 Kommentare

Hallo Forum, könntet ihr mir bitte weiterhelfen, ich habe ein php Code mit dem ich einen Datensatz auslesen möchte, ...

PHP
PHP Umstellung mysql connect
Frage von DPiegzaPHP7 Kommentare

Hallo zusammen. Ich bekomme immer diese Fehlermeldung / Warnung: Deprecated: mysql_connect(): The mysql extension is deprecated and will be ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 3 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...