| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

27-07-2009, 00:21
|
|
erniedd
Registrierter Benutzer
|
|
Registriert seit: Mar 2009
Beiträge: 51
|
|
Suchfunktion mit PHP und SQL
Hallo erstmal :-)
ich möchte für meine Website eine Suchfunktion einbauen, das ganze soll ein eingabe
feld haben und einen suchbutton,
dann soll sich das ganze auf einer neuen Site aufbauen um dann die ergebnisse
sortiert auspucken.
Ich habe zunächst im Internet etwas reserchiert und habe folgendes Scrypt
gefunden:
PHP-Code:
Hallo, das Ziel dieses Tutorial ist, dass es jedem möglich sein sollte eine Suchfunktion für seine Datenbank zu programmieren.
Wichtig: Dieses Skript für die Suchfunktion beinhaltet nur das aller nötigste! Sprich es soll nur zeigen wie eine Suchfunkion aufgebaut sein kann. Natürlich kann man soclhe "Extras" noch ergänzen.
Zum Skript: Ich poste einfach mal das ganze Skript. Folgend werden dann die verschiedenen Punkte genauer erklärt. php:
<?
//Formularfeld echo " <form name=form1 method=post action='" .$_SERVER['PHP_SELF'] ."'>\n"; echo "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"; echo "<input class= formular type=submit name=Submit value='Senden'>\n"; echo "<input class= formular type=reset name=Submit value=Reset>\n</form>";
//Verbindung herstellen include 'db_connect.inc'; $sqldatabase = mysql_pconnect("$host","$user","$pwd") or die('<b>#'.mysql_errno().':</b> '.mysql_error()); mysql_select_db($dbname, $sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error());
//Suche starten, Ergebnise ausgeben $daten = mysql_query('SELECT * FROM `'.$tblname.'` WHERE `Artist`=\''.$_POST['suche'].'\'', $sqldatabase); while($row=mysql_fetch_array($daten)){ echo $row['Artist']; }
?>
Gut, also zur genaueren Erklärung des Skripts:
1.Eingaben per Formularfeld php:
<?php //Formularfeld echo " <form name=form1 method=post action='" .$_SERVER['PHP_SELF'] ."'>\n"; echo "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"; echo "<input class= formular type=submit name=Submit value='Senden'>\n"; echo "<input class= formular type=reset name=Submit value=Reset>\n</form>"; ?>
Dieser Code beinhaltet das Formularfeld. Die Angaben aus dem Formular wird danach an sich selber geschickt. (action='" .$_SERVER['PHP_SELF'] ."') Das Textfeld bekommt den Wert: $_POST (value='".$_POST['suche']."')
2. Verbindung herstellen php:
<?php include 'db_connect.inc'; $sqldatabase = mysql_pconnect("$host","$user","$pwd") or die('<b>#'.mysql_errno().':</b> '.mysql_error()); mysql_select_db($dbname, $sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); ?>
In diesem Abschnitt wird Verbindung mit der Datenbank aufgenommen. Ich benütze dafür eine externe Datei! Man muss einfach $host, $user, $pwd, $tblname, $dbname durch seine Daten ersetzen.
3. Suche starten und Ergebnisse anzeigen: php:
<?php $daten = mysql_query('SELECT * FROM `'.$tblname.'` WHERE `Artist`=\''.$_POST['suche'].'\'', $sqldatabase); while($row=mysql_fetch_array($daten)){ echo $row['Artist']; } ?>
so nun zum wichtigsten Punkt. Hier wird wie es der Titel schon sagt, die Eingaben verwertet. Er checkt ab, ob der Suchbegriff mit einem Wert der Spalte identisch ist. (WHERE `Artist`=\''.$_POST['suche'].) Also muss man "Artist" durch einen vorhandenen Spaltennamen ersetzen. Danach wird mit der while schleife der Suchbegriff weiterverarbeitet bis zum echo $row['Artist'];! Hier werden die Ergebniss per echo ausgegen!
Den Scrypt bin ich dann schritt für schritt durchgegangen nur leider klappt es nicht.
Meine Daten:
$hostname_verbindung = "localhost";
$database_verbindung = "phost136983";
$username_verbindung = "phost136983";
$password_verbindung = "******";
Meine Tabelle heißt: tblspieledatenbank und meine Spalte str_spiel_name
Es soll mit hilfe von Stichwörten nach Spielen gesucht werden.
Ich habe dann 2 Datein erstellt, erstmal das Eingabe Formular:
PHP-Code:
<?php //Formularfeld echo " <form name=form1 method=post action='" .$_SERVER['PHP_SELF'] ."'>\n"; echo "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"; echo "<input class= formular type=submit name=Submit value='Senden'>\n"; echo "<input class= formular type=reset name=Submit value=Reset>\n</form>"; ?>
<?php require_once('../test/connect.html'); ?> <?php
<?php $daten = mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', $sqldatabase); while($row=mysql_fetch_array($daten)){ echo $row['Artist']; } ?>
und connect.php :
PHP-Code:
<?php include 'db_connect.inc'; $sqldatabase = mysql_pconnect("localhost","phost136983","*****") or die('<b>#'.mysql_errno().':</b> '.mysql_error()); mysql_select_db(phost136983, tblspieledatenbank) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); ?>
Ich bekomme folgenden Fehler:
Parse error: parse error in C:\xampp\htdocs\gameboxx\test\formular.php on line 24
Und ich verstehe auch nicht, was $sqldatabase zu bedeuten hat, ich bin jetzt mal davon
ausgegangen, dass es meine Taballe tblspieledatenbank ist O.o, glaube aber das es falsch ist.
für Hilfe bin ich sehr dankbar :-)
|

27-07-2009, 00:35
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
In Zeile 24 oder davor, hast du einen Tippfehler drin.
Der Fehler hat nix mit der DB zu tun.
|

27-07-2009, 00:38
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo Ernie,
Zitat:
Zitat von erniedd
Ich bekomme folgenden Fehler:
Parse error: parse error in C:\xampp\htdocs\gameboxx\test\formular.php on line 24
|
Hättest du nicht vielleicht Lust, diese Datei (formular.php) mal zu posten und darin die Zeile 24 kenntlich zu machen, z. B. durch Einfügen von "// Line 24" (ohne ") am Ende der Zeile?
Zitat:
Zitat von erniedd
Und ich verstehe auch nicht, was $sqldatabase zu bedeuten hat, ich bin jetzt mal davon
ausgegangen, dass es meine Taballe tblspieledatenbank ist O.o, glaube aber das es falsch ist.
für Hilfe bin ich sehr dankbar :-)
|
Die Dinger, die mit $ beginnen, nennt man in PHP Variablen, die Assoziation zu Variablen aus Mathe ist durchaus angebracht. In dieser speziellen Variablen befindet sich ein Wert, der die Verbindung zu deiner Datenbank repräsentiert. Deine Annahme, dass sich dahinter deine Taballe tblspieledatenbank verbirgt, ist also falsch.
Beispielcode und Funktionen zum Arbeiten mit MySQL-Datenbanken findest du unter PHP: PDO - Manual (objektorientierter, allgemeiner Ansatz), unter PHP: Mysqli - Manual (verbesserter, objektorientierter MySQL-Zugriff) und schließlich unter PHP: MySQL - Manual (traditioneller, funktionsbasierter MySQL-Zugriff)
Gruß,
Anja
|

27-07-2009, 00:43
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Achso, ich seh grad, in deinem ersten Code-Block geht in Zeile 7 ein PHP-Block auf, der nicht wieder geschlossen wird, dann kommen Leerzeilen und dann geht wieder ein Block auf. Das darf nicht sein, PHP-Blöcke lassen sich nicht verschachteln, also: Zeile 7 löschen, wenn dort sowieso nichts mehr kommt.
|

27-07-2009, 00:52
|
|
erniedd
Registrierter Benutzer
|
|
Registriert seit: Mar 2009
Beiträge: 51
|
|
so ersteinmal die zeile
24
PHP-Code:
<?php $daten = mysql_query('SELECT * FROM `'.tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', tblspieledatenbank);
Geändert von erniedd (27-07-2009 um 00:55 Uhr)
|

27-07-2009, 01:14
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hinten bei tblspieledatenbnak fehlt der Dollar davor.
Edit: achso und vorne ja auch
|

27-07-2009, 01:22
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Wenn ich nochmal genauer auf deine bisher geposteten Beispiele sehe, fällt mir auf, dass da noch mehr gravierende Fehler drin sind, die mich zu der Vermutung führen, dass du noch nie mit PHP zu tun hattest.
In diesem Falle solltest du auf PHP: Hypertext Preprocessor mit der Einführung beginnen (wenn du genug Zeit hast) oder in diesem Forum dein Glück versuchen: Jobs und Projekte - PHP script resource
Denn ohne zumindest Grundlagen von PHP zu haben, glaube ich nicht ganz daran, dass du in den nächsten 3 Tagen eine Suchfunktion in deiner Homepage anbieten kannst.
Gruß,
Anja
|

27-07-2009, 09:16
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Der Code ist anfällig für SQL-Injections. Jeder Anfänger könnte die Seite hacken.
|

29-07-2009, 19:19
|
|
erniedd
Registrierter Benutzer
|
|
Registriert seit: Mar 2009
Beiträge: 51
|
|
Hey, erstma sorry das ich mich nicht solange gemeldet habe, und danke für die vielen antworten :-), ich hab es überarbeitet:
PHP-Code:
<?php ;
$sqldatabase = mysql_pconnect("localhost","phost136983","******") or die('<b>#'.mysql_errno().':</b> '.mysql_error()); mysql_select_db(phost136983, $sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); ?>
<?php //Formularfeld echo " <form name=form1 method=post action='" .$_SERVER['PHP_SELF'] ."'>\n"; echo "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"; echo "<input class= formular type=submit name=Submit value='Senden'>\n"; echo "<input class= formular type=reset name=Submit value=Reset>\n</form>"; ?>
<?php $daten = mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', $sqldatabase); while($row=mysql_fetch_array($daten)){ echo $row['str_spiel_name']; } ?>
Ich bekomme folgenden Fehler:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\gameboxx\test\formular.php on line 19
Die Reihe 19 ist diese hier(die dritt letzte) :
PHP-Code:
while($row=mysql_fetch_array($daten)){
wäre sehr dankbar wenn ihr mir au da weiterhelfen könntet
Geändert von erniedd (29-07-2009 um 20:07 Uhr)
|

29-07-2009, 19:22
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
Zitat von erniedd
........ich hab es überarbeitet:
................
wäre sehr dankbar wenn ihr mir au da weiterhelfen könntet
|
Wieso sehe ich kein mysql_error() an der richtigen Stelle ? Du kennst es doch schon...
Weiterhin anfällig gegen:
1. SQL Injection
2. XSS
P Connect ist bedenklich.
Solange du nicht weißt, was du tust: Lass das P weg.
|

29-07-2009, 19:34
|
|
erniedd
Registrierter Benutzer
|
|
Registriert seit: Mar 2009
Beiträge: 51
|
|
da is doch nen mysql error ganz oben, sql injection hab ich mich noch nit so richtig drum gekümmert, weis zwar ja jetzt was es damit auf sich jetzt hat, aber muss mir das nochma in ruhe vertiefen
oder meintest du das so ?
PHP-Code:
<?php $daten = mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', $sqldatabase); while($row=mysql_fetch_array($daten)){ echo mysql_errno() . ": " . mysql_error() . "\n"; echo $row['str_spiel_name']; } ?>
Geändert von erniedd (29-07-2009 um 19:39 Uhr)
|

29-07-2009, 19:43
|
|
gourmet
Registrierter Benutzer
|
|
Registriert seit: Feb 2007
Beiträge: 154
|
|
Zitat:
Zitat von erniedd
da is doch nen mysql error ganz oben, sql injection hab ich mich noch nit so richtig drum gekümmert, weis zwar ja jetzt was es damit auf sich jetzt hat, aber muss mir das nochma in ruhe vertiefen
oder meintest du das so ?
PHP-Code:
<?php $daten = mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', $sqldatabase);
while($row=mysql_fetch_array($daten)){
echo mysql_errno() . ": " . mysql_error() . "\n";
echo $row['str_spiel_name'];
} ?>
|
nein so
PHP-Code:
$daten = mysql_query('SELECT * FROM `'.$tblspieledatenbank.'`
WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', $sqldatabase) or die(mysql_error());
|

29-07-2009, 19:45
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Wo tritt der Fehler auf?
Hier: while($row=mysql_fetch_array($daten))
Warum?
Weil in $daten nicht das erwartete drin steht.
Warum steht in $daten nicht das erwartete din?
Weil die vorhergehende Abfrage fehlschlägt.
Warum schlägt die vorhergehende Abfrage fehl?
KA!
Du hast da kein mysql_error() eingebaut
|

29-07-2009, 19:58
|
|
erniedd
Registrierter Benutzer
|
|
Registriert seit: Mar 2009
Beiträge: 51
|
|
ahhh ok
er hat mir angezeigt das der table name nit korrekt ist, nun hab ich das $ von tblspieledatenbnk weggemacht und dann gings, allerdings ist die suche irgendwie dumm
möchte ich beispiels weiße nach duke nukem 3d suchen, muss ich den kompletten namen eingeben, statt einfach nur duke oder nukem oder 3d
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
Ähnliche Themen
|
| Thema |
Autor |
Forum |
Antworten |
Letzter Beitrag |
|
suchfunktion
|
crislot |
SQL / Datenbanken |
16 |
21-09-2006 17:52 |
|
Sql Php Suchfunktion
|
sonny411 |
SQL / Datenbanken |
2 |
10-03-2006 12:36 |
|
suchfunktion
|
joeCrack |
Fragen/Vorschläge zum Forum |
4 |
20-02-2006 10:11 |
|
suchfunktion
|
lukeacid |
SQL / Datenbanken |
5 |
21-11-2005 21:13 |
|
suchfunktion
|
mukraker |
BRAINSTORMING PHP/SQL/HTML/JS/CSS |
2 |
18-02-2004 21:26 |
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|