PHP Datenbank Suchfunktion mit Ergebnisausgabe

JhnWyn

Lt. Junior Grade
Registriert
Aug. 2008
Beiträge
318
Hallo Leute :)

Und zwar hab ich nur eine kurze Frage:
Hab mit einem Kollegen eine kleine Website gebastelt und nun möchte ich noch eine Suchfunktion hinzufügen, welche es ermöglicht die MySQL Datenbank zu durchsuchen.

Um genauer zu sein soll gesucht werden nach: Vorname, Nachname, Benutzername, Region und Musik Stil.

Die Sucheingabe hab ich denke mal soweit fertig, nur komm ich mit der Exec noch nicht weiter :(


Das ist die Suche:

HTML:
<?php
        session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>DJ Suche</title>
<link href="design.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php
        if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) {
                echo '<ul class="err">';
                foreach($_SESSION['ERRMSG_ARR'] as $msg) {
                        echo '<li>',$msg,'</li>';
                }
                echo '</ul>';
                unset($_SESSION['ERRMSG_ARR']);
        }
?>
<form id="search" name="search" method="post" action="search-exec.php">
  <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
    <tr>
      <th>Vorname </th>
      <td><input name="vname" type="text" class="textfield" id="vname" /></td>
    </tr>
    <tr>
      <th>Nachname </th>
      <td><input name="nname" type="text" class="textfield" id="nname" /></td>
    </tr>
    <tr>
      <th width="124">DJ Name</th>
      <td width="168"><input name="login" type="text" class="textfield" id="login" /></td>
    </tr>
    <tr>
      <th>Region</th>
      <td><form action="search-exec.php" id="region" methode="post">
      <p>
      <select name="region" size="1">
       <option value="1" name="region">Baden-Württemberg</option>
       <option value="2" name="region">Bayern</option>
       <option value="3" name="region">Berlin</option>
       <option value="4" name="region">Brandenburg</option>
       <option value="5" name="region">Bremen</option>
       <option value="6" name="region">Hamburg</option>
       <option value="7" name="region">Hessen</option>
       <option value="8" name="region">Mecklenburg-Vorpommern</option>
       <option value="9" name="region">Niedersachsen</option>
       <option value="10" name="region">Nordrhein-Westfalen</option>
       <option value="11" name="region">Rheinland-Pfalz</option>
       <option value="12" name="region">Saarland</option>
       <option value="13" name="region">Sachsen</option>
       <option value="14" name="region">Sachsen-Anhalt</option>
       <option value="15" name="region">Schleswig-Holstein</option>
       <option value="16" name="region">Thüringen</option>
       <option value="17" name="region">Sonstige</option>
       </select>
       </p>
       </td>
      <tr>
      <th>Musik Stil</th>
      <td><form action="search-exec.php" id="stil" methode="post">
      <p>
      <select name="stil" size="1">
       <option value="1" name="stil">Elektronik</option>
       <option value="2" name="stil">Pop & Charts</option>
       <option value="3" name="stil">Rock</option>
       <option value="4" name="stil">Schlager</option>
       </select>
       </p>
       </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="Suche" /></td>
    </tr>
  </table>
</form>
</body>
</html>


So da kann man eben den Namen usw eingeben und eben die Region + Musik Stil.

Meine Exec habe ich so weit:

PHP:
<?php
        //starten der Session
        session_start();

        //Datenbankverbindungsdetails
        require_once('config.php');

        //Array zum speichern von Fehlern
        $errmsg_arr = array();

        //validierung der errorflags
        $errflag = false;

        //Verbindung zum My SQL Server
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        if(!$link) {
                die('Fehler bei Verbindunsaufbau: ' . mysql_error());
        }

        //auswahl der Datenbank
        $db = mysql_select_db(DB_DATABASE);
        if(!$db) {
                die("auswahl der datenbank nicht möglich");
        }



?>


Also die Datenbank heißt "members" die variablen sind "vname" "nname" "dj_name" "region" und "dj_genre"

Hab schon etwas hier mit rumprobiert:

$result = MYSQL_QUERY("SELECT * FROM members WHERE vname = 'hier das ergebnis von der suche' ");

aber iwie stell ich mich doof an oder steh vor einer Wand ka was los ist :freak:

Über jeden Tipp bin ich sehr dankbar!

Manu
Ergänzung ()

Hey hab jetzt mal eine einfache Suche geschrieben mit einem Eingabefeld und welche die Datenbank durchsucht.


HTML:
<form action="search-exec.php" method="post">
     <input type="text" name="suche" size="30" onfocus="if (this.value =='DJ Suche') { this.value=''}" onblur="if (value == '') {value='DJ Suche'}" value="DJ Suche" />
     <input type="submit" value="GO">
    </form>

und die exec

PHP:
<?php
        //starten der Session
        session_start();

        //Datenbankverbindungsdetails
        require_once('config.php');

        //Array zum speichern von Fehlern
        $errmsg_arr = array();

        //validierung der errorflags
        $errflag = false;

        //Verbindung zum My SQL Server
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        if(!$link) {
                die('Fehler bei Verbindunsaufbau: ' . mysql_error());
        }

        //auswahl der Datenbank
        $db = mysql_select_db(DB_DATABASE);
        if(!$db) {
                die("auswahl der datenbank nicht möglich");
        }


$sql = "SELECT * FROM `members` WHERE (`ID` LIKE
'%$_POST['searchquery']%
' OR `vname` LIKE
'%$_POST['searchquery']%
' OR `nname` LIKE
'%$_POST['searchquery']%
' OR `region` LIKE
'%$_POST['searchquery']%
' OR `dj_name` LIKE
'%$_POST['searchquery']%
' OR `dj_genre` LIKE
')"; $db_erg = mysql_query( $sql );
if ( ! $db )

?>

kirge es immer noch nicht gebacken :(
 
Ich bin jetzt nicht der PHP Pro, aber was sagt die SQL Fehlermeldung?

Ka ob SQL das mit dem $_POST im String so nimmt oder ob du das händisch zusammenbasteln musst mit konkatenationen...

Mein Verdacht ist nämlich dass du

PHP:
'%'.$_POST['searchquery'].'%'

Schreiben müsstest, denn sonst hast du den String "$_POST[...]" und nicht dessen inhalt in der $sql value
 
hey danke für die antwort :)

also wenn ich die Suchfunktion benutze kommt schön der error 404 das er die search-exec.php nicht findet ??

obwohl ich die auch hochgeladen hab

edit: oh man ich depp hab - mit _ vertauscht :/
jetzt krieg ich einen syntax fehler bei line 28


Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /users/findyourdj/www/search_exec2.php on line 28
 
Zuletzt bearbeitet:
kannst dus händisch aufrufen im browser?

bzw. gehts vl. wenn du bei form es mit /search-exec.php ?
 
Du kannst einen String nicht über mehrere Zeilen definieren. Du müsstet in jeden Zeile einen String schreiben und alle konkatenieren.

Edit: Kommando zurück, PHP unterstützt das tatsächlich.
interessant wäre, wie Zeile 28 denn jetzt aussieht.
 
Zuletzt bearbeitet:
Also hier nochmal die exec zur Suche


PHP:
<?php
        //starten der Session
        session_start();

        //Datenbankverbindungsdetails
        require_once('config.php');

        //Array zum speichern von Fehlern
        $errmsg_arr = array();

        //validierung der errorflags
        $errflag = false;

        //Verbindung zum My SQL Server
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        if(!$link) {
                die('Fehler bei Verbindunsaufbau: ' . mysql_error());
        }

        //auswahl der Datenbank
        $db = mysql_select_db(DB_DATABASE);
        if(!$db) {
                die("auswahl der datenbank nicht möglich");
        }

$sql = "SELECT * FROM member WHERE (`ID` LIKE
'%$_POST['searchquery']%
' OR `vname` LIKE
'%$_POST['searchquery']%
' OR `nname` LIKE
'%$_POST['searchquery']%
' OR `region` LIKE
'%$_POST['searchquery']%
' OR `dj_name` LIKE
'%$_POST['searchquery']%
' OR `dj_genre` LIKE
')"; $db_erg = mysql_query( $sql );
if ( ! $db )


$result = mysql_query("SELECT * FROM members WHERE `ID` LIKE ");

while($row = mysql_fetch_row($result))
echo $row[0].' - '.$row[1].'<br />';


?>


line 27 ist
'%$_POST['searchquery']%



Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /users/findyourdj/www/search_exec2.php on line 27


krieg es einfach nicht gebacken :(
 
Zeroflow hat das Problem schon erkannt: $_POST wird zwar erkannt, PHP kann aber nicht richtig auf das Array zugreifen, da es sich in einem String befindet.
Du müsstest also tatsächlich vor $_POST den String beenden und erst danach wieder anfangen.
 
Zeile 27 müsstest du so umändern:
Code:
'%".$_POST['searchquery']."%
Die anderen Zeilen musst ebenfalls entsprechend abändern.
 
danke danke :)

also das klappt :p nun hab ich nur noch das problem das ich das Ergebnis nicht ausgegeben kriege


PHP:
<?php
        //starten der Session
        session_start();

        //Datenbankverbindungsdetails
        require_once('config.php');

        //Array zum speichern von Fehlern
        $errmsg_arr = array();

        //validierung der errorflags
        $errflag = false;

        //Verbindung zum My SQL Server
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        if(!$link) {
                die('Fehler bei Verbindunsaufbau: ' . mysql_error());
        }

        //auswahl der Datenbank
        $db = mysql_select_db(DB_DATABASE);
        if(!$db) {
                die("auswahl der datenbank nicht möglich");
        }



$sql = "SELECT * FROM member WHERE (`ID` LIKE
'%".$_POST['searchquery']."%
' OR `vname` LIKE
'%".$_POST['searchquery']."%
' OR `nname` LIKE
'%".$_POST['searchquery']."%
' OR `region` LIKE
'%".$_POST['searchquery']."%
' OR `dj_name` LIKE
'%".$_POST['searchquery']."%
' OR `dj_genre` LIKE
')"; $db_erg = mysql_query( $sql );
if ( ! $db )


$result = mysql_query("SELECT * FROM members");

while($row = mysql_fetch_row($result))
echo $row[0].' - '.$row[1].'<br />';

?>


bei while($row = mysql_fetch_row($result)) wird mir ein error angezeigt, aber ich denke mal das ich vorher schon was falsch mache

Warning: mysql_fetch_row() expects parameter 1 to be resource, null given in /users/findyourdj/www/search_exec2.php on line 45

mfg
 
Der Fehler sagt aus, dass $result null ist. Und das wird auch nur gesetzt, wenn !$db (Zeile 40) true ist. Ich denke mal, das ist so nicht beabsichtigt?
 
nee also ich muss



$result = mysql_query("SELECT * FROM members");

while($row = mysql_fetch_row($result))
echo $row[0].' - '.$row[1].'<br />';


irgendwie verändern das er mir eben nur das gesuchte auch anzeigt, ich weiß nur nicht wie
 
Ich habe mal Leerzeilen entfernt und den Code richtig eingerückt:
PHP:
if ( ! $db )
    $result = mysql_query("SELECT * FROM members");

while...
Fällt was auf?
 
mein gehirn ist schon so matsch, aber ich glaub das einfach die komplette "members" db abgerufen wird?
was ich ja nicht will sondern das die Ergebnisse von der Suche angezeigt werden?

ich krieg heut ja gar nichts mehr gebacken :D
 
Ich wollte eigentlich darauf hinaus, dass $result nie gesetzt wird...
 
versteh ich grad nicht... wie soll ich denn die ausgabe machen?

mfg
 
Es geht ja nicht um die while-Schleife (noch nicht). Den Fehler machst du ja schon vorher. (!$db) wird an dieser Stelle immer zu false ausgewertet, also wird die nachfolgende Anweisung, also das setzen von $result, nie ausgeführt.

Schau dir mal Zeile 39 genauer an. So müsstest du dir es mal gedacht haben:
PHP:
<?php
        //starten der Session
        session_start();

        //Datenbankverbindungsdetails
        require_once('config.php');

        //Array zum speichern von Fehlern
        $errmsg_arr = array();

        //validierung der errorflags
        $errflag = false;

        //Verbindung zum My SQL Server
        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        if(!$link) {
                die('Fehler bei Verbindunsaufbau: ' . mysql_error());
        }

        //auswahl der Datenbank
        $db = mysql_select_db(DB_DATABASE);
        if(!$db) {
                die("auswahl der datenbank nicht möglich");
        }



$sql = "SELECT * FROM member WHERE (`ID` LIKE
'%".$_POST['searchquery']."%
' OR `vname` LIKE
'%".$_POST['searchquery']."%
' OR `nname` LIKE
'%".$_POST['searchquery']."%
' OR `region` LIKE
'%".$_POST['searchquery']."%
' OR `dj_name` LIKE
'%".$_POST['searchquery']."%
' OR `dj_genre` LIKE
')";
$db_erg = mysql_query( $sql );
if ( ! $db_erg)
    die("Hier gibt's nichts zu sehen");


//$result = mysql_query("SELECT * FROM members");

while($row = mysql_fetch_row($db_erg))
echo $row[0].' - '.$row[1].'<br />';

?>
 
Zuletzt bearbeitet: (echo in die geändert)
joa hier gibts nichts zu sehen :D

hatte es also in der falschen zeile?

edit: musste es aber trotzdem von db_erg zu db abändern
 
Welches $db_erg hast du abgeändert?
 

Ähnliche Themen

Zurück
Oben