• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Php Sql Suchformular

erniedd

New member
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:
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:
<?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:
<?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 :)
 
Frage: Hast du schon mal was mit PHP gemacht?
Wenn nein - lern' bitte erst die Grundlagen.
Wenn ja - wiederhol' bitte die Grundlagen.

Hier erst einmal ein paar grundlegende Fehler:

Du machst ein <?php auf, aber nicht mehr zu - die Frage ist sowieso, wieso du so viele davon auf und zu machst.

Heißt die Datei jetzt connect.html oder connect.php?

Zum näheren Verständniss von MySQL in PHP würde ich dir das PHP-Manual an's Herz legen: http://de2.php.net/manual/en/book.mysql.php
 
jupp, und wenn du mit php klar kommst schauste dir mal die möglichkeiten bei MySQL an, kannste dann mit PHP super zusammen arbeiten lassen:
Server - Hessen
(ist von einer dortigen schule erstellt worden, sehr empfehlenswert ;) )
 
schon ma danke für die replys :)
ich habe es jetzt überarbeitet:

PHP:
<?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:
while($row=mysql_fetch_array($daten)){

wäre sehr dankbar wenn ihr mir au da weiterhelfen könntet
 
Zuletzt bearbeitet:
Deine Query wurde nicht erfolgreich ausgeführt. Probier mal dein SQL-Statement in PHPMyAdmin aus oder machs so:

PHP:
$daten = mysql_query(....) or die(mysql_error());
 
ich hab nun den fehler ich hatte bei tblspieledatenbank das $ zufiel, allerdings funktioniert die suche nur wenn man das komplett gesuchte wort eingibt und nicht nur ein teil des wortes, naja habt ihr vielleicht ein tuturoil oder ein Scrypt, das besser ist ?

PHP:
<?php ;
$sqldatabase = mysql_connect("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) or die(mysql_error());   
while($row=mysql_fetch_array($daten)){
echo mysql_errno() . ": " . mysql_error() . "\n";
echo $row['str_spiel_name'];
} ?>
 
ich hab nun den fehler ich hatte bei tblspieledatenbank das $ zufiel ..
PHP:
<?php $daten = mysql_query('SELECT * FROM `'.tblspieledatenbank.'`
WHERE `str_spiel_name`=\''.$_POST['suche'].'\'', $sqldatabase) or die(mysql_error());   
while($row=mysql_fetch_array($daten)){
echo mysql_errno() . ": " . mysql_error() . "\n";
echo $row['str_spiel_name'];
} ?>

Auch wenn das funktioniert, ist es falsch. Entweder mit $ weils ne Variable ist, oder als String. Wenn letzteres dann aber auch so:

PHP:
$daten = mysql_query('SELECT * FROM `tblspieledatenbank`
WHERE `str_spiel_name`="'.$_POST['suche'].'"', $sqldatabase) or die(mysql_error());
Durch die Verwendung von " machst du dir das mit dem Escapen auch etwas einfacher.

Davon mal abgesehen ist deine SQL-Query ne Einladung für SQL-Injection. Du fügst einen vom Benutzer eingebenen Inhalt ohne ihn zu prüfen in deine SQL-Query ein. Such mal nach SQL-Injection hier im Forum oder bei Google/PHP.net. Ich würde dir die Verwendung von mysqli (statt mysql) in Kombination mit prepared Statements empfehlen. Ist am Anfang etwas Umgewöhnung aber dafür sicherer.

P.S.: Diese Angewohnheit vor Tabellennamen ein tbl zustellen verstehe ich nicht, das ergibt sich doch schon aus dem Kontext und macht nur die Namen unleserlicher.

P.S.S.: Und ne Datenbank ist deine tblspieledatenbank auch nicht.
 
Zurück
Oben