Suchskript sucht nicht

Dolphon

Erfahrenes Mitglied
Moin.

Ich hab nen kleines Suchskript geschrieben, was die DB durchsuchen soll, und den ganzen Inhalt einer Zeile ausspucken soll, wo der Suchbegriff gefunden wurde.

Nur leider klappt es nicht. NAchdem ich den Scuhbegriff eingeben und das Formular abschicke, gibt er nix aus. Ich sehe immer nur die Eingabe. obwohl der Begriff in der DB vorhanden ist.

PHP:
<?php 
session_start(); 
if(!isset($_SESSION['user']) || $_SESSION['user'] == '') {

 if ($_SESSION['frei'] == 0)
{
echo "Sie sind noch nicht freigeschaltet!" ;
}

header("Location: http://www.mugamo.de/sebastian/index.php"); 
  die; 
} 
?> 

<table width="506" border="0" cellpadding="0" cellspacing="0" class="tabl" height="276">
  <tr>
    <td valign="top" height="38" colspan="2" width="1" bgcolor="#999999">
      <p>  <div align="justify">
      <img border="0" src="../images/newsoben.gif" width="485" height="20"></p>
    </td>
  </tr>
  <tr>
    <td valign="top" height="104" colspan="2" width="1" bgcolor="#999999">
      <table width="486" border="0" cellpadding="0" cellspacing="0" class="tabl" height="162">
        <tr>
          <td height="162" bgcolor="#BDBDBD" width="480">
<p align="left">

<?php 

### Konfigurationsdatei einlesen
require("config.inc.php");


// Zunächst brauchen wir eine Datenbankverbindung:



if(!($db = mysql_connect($db_host, $db_user, $db_pass))) //baue datebankverbindung auf 
  die(mysql_error());  //wenn nicht geht, gib fehlermeldung aus 
else //wenn doch geht 
{ 
  if(!mysql_select_db($db_name)) //wähle datenbank aus 
      die(mysql_error());   //wenn das nicht geht, gib fehler aus 
} 



if($suchen) //ueberprueft ob der submit button gedrückt wurde
{ 
                 
    
    $begriff = addslashes($begriff);             //Zeichen die im Programm Probleme verursachen könnten in PHP Spezialzeichen umwandeln
  
     

    $sqlkommando = "SELECT * FROM kunden WHERE * LIKE %'". $begriff ."%' ORDER BY nachname ASC";
    
    $res = mysql_query($sqlkommando) or die("Error: " . mysql_error()); // Kommando 'sqlkommando' ausfuehren
                                                                 // bei misserfolg beenden und fehlermeldung ausgeben
    while ($row = mysql_fetch_array($res)) 
{ 
    ?> 
        <tr> 
        <td width="100%" align="center"><?php echo $row['nachname'];  ?></td> 
        </tr> 
    <? 
}

}

?>

<form action="search.php?<? echo $_GET['session_name'].'='.$_GET['session_id'] ?> " method="post"> <!-- Anfang des Formulars -->
<p align="center"><b>Bitte geben Sie den Suchbegriff ein:</b> <p>
<b><font color="#336699">Suchbegriff:</b><br>
<input type="text" name="begriff" size="35"><br>
<input type="submit" name="suchen" value="Suchen">
</form>
</body>

    </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td valign="top" height="20" colspan="2" width="1" bgcolor="#999999"><img border="0" src="../images/newsunten1.gif" width="486" height="15"></td>
  </tr>
  <tr>
    <td valign="top" height="34" colspan="2" width="1" bgcolor="#999999">&nbsp;
</div>    
</td>

  </tr>
</table>
</p>

MFG

Dolphon
 
Ich glaube nicht, dass das bzgl. SQL-Syntax korrekt ist:
PHP:
$sqlkommando = "SELECT * FROM kunden WHERE * LIKE %'". $begriff ."%' ORDER BY nachname ASC";
das funktioniert schon eher:
PHP:
$sqlkommando = "SELECT * FROM kunden WHERE spalte LIKE '%". $begriff ."%' ORDER BY nachname ASC";
//spalte muss natürlich durch den Namen der Spalte in der DB ersetzt werden
und um nach dem Begriff in mehreren Spalten zu suchen:
PHP:
$sqlkommando = "SELECT * FROM kunden WHERE spalte1 LIKE '%". $begriff ."%' OR spalte2 LIKE '%". $begriff ."%'  OR spalte3 LIKE '%". $begriff ."%'  ORDER BY nachname ASC";
//spalte1 (2, 3) muss muss wieder durch den Namen der Spalte in der DB ersetzt werden

Ich bekomme auf jeden Fall immer nur Fehler mit deiner SQL-Abfrage. So müsste es jetzt allerdings funktionieren...
 
hab das mal so ümgeändert wie du es da oben angegeben ahst,. Nur leider spuckt er immer noch nix aus.
PHP:
$sqlkommando = "SELECT * FROM kunden WHERE ort LIKE '%". $begriff ."%' ORDER BY nachname ASC";

das hier steht in der DB:
PHP:
 id  vorname  nachname  straße  hnr  plz  ort  idhand  
1 fasdfdasf afsdsaf afdsaf 21a 56589 fdasdfdasfd 0 
2 Test1 Test1 In dr Au 21a 56589 NBB 0 
3 Test2 Test2 Test2 Test2 56589 Test2 0 
4 dsafd asdf asdfdsa 212 5657 asfdf 0 
 5 test etsat asdfasf 545 4545 sdfg Dolphon 
 6 sdafsd dasf asdf   0 asdfadsf

Als Suchbegriff haeb ich "nbb" eingegben.
 
1:
Ich vermute, dass folgende Zeile fehl schlägt, weil register_globals auf off steht:

PHP:
if($suchen) //ueberprueft ob der submit button gedrückt wurde

Die per POST übergebenen Variablen solltest Du dann mittels

PHP:
$_POST['suchen'] 
// und
$_POST['begriff']
abfragen.

2:
Ich habe es Dir schon einmal gesagt: Du solltest Deine Signatur ändern!

~snuu~
 
Deine Idee klappt nicht.
Ein freies Land fordert freie Siganturen:)
an register_globals kann es nicht liegen, weil sonnst meien anderen Skripte auch nicht laufen würden. Dies tuen sie aber.
 
Wenn Du nicht weisst, warum der Code nicht funktioniert, dann fang an zu debuggen. Setze ein paar "echo" an relevante Stellen Deines Quelltextes und prüfe, welche Zeilen durchlaufen werden.

mfg, snuu
 
Hab mich nochmals rangesetz.
SO hab vor die If Abfrage, ob der Button gedrückt würde, eine echo ausgabe gemacht. DOrt wird der Suchbegriff einwandfrei ausgegeben. Sobald er in der If-Abfrage ist, nicht mehr. Ich weiß aber nicht warum die If-Abfrage nicht durchlaufen wird.

Hier mal der gesamte Code:

PHP:
<?php 
session_start(); 
if(!isset($_SESSION['user']) || $_SESSION['user'] == '') {

header("Location: http://www.xxxx.de/index.php"); 
  die; 
} 

if(!isset($_SESSION['frei']) || $_SESSION['frei'] == '0')
{
 echo "Sie sind noch nicht freigeschaltet!" ;
  die;
} 

if(!isset($_SESSION['gewerbe']) || $_SESSION['gewerbe'] == '2')
{
 echo "Sie haben diesen Dienst nicht beantragt, und sind kein Handwerker!" ;
  die;
} 
?>

<?php

### Konfigurationsdatei einlesen
require("config.inc.php");


// Zunächst brauchen wir eine Datenbankverbindung:



if(!($db = mysql_connect($db_host, $db_user, $db_pass))) //baue datebankverbindung auf 
  die(mysql_error());  //wenn nicht geht, gib fehlermeldung aus 
else //wenn doch geht 
{ 
  if(!mysql_select_db($db_name)) //wähle datenbank aus 
      die(mysql_error());   //wenn das nicht geht, gib fehler aus 
} 
 echo $_POST['begriff']; 
 
if(isset($_POST['suchen'])) //ueberprueft ob der submit button gedrückt wurde
{ 
               
$eingabe_array = explode(' ',$_POST['begriff']);
 $query = 'SELECT id, vorname_kunden, nachname_kunden, ort_kunden FROM kunden WHERE '; //anfang der abfrage 
    for($i=0; $i<count($eingabe_array); $i++){ 
     
$query .= "(vorname_kunden like '%".$eingabe_array[$i]."%' or nachname_kunden like '%".$eingabe_array[$i]."%' or ort_kunden like '%".$eingabe_array[$i]."%')";

            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft) 
        if($i<count($eingabe_array)-1){ 
            $query .= ' and '; 
        } 
        //verknüpfung der einzelnen worte mit und 
    } 


 $result = mysql_query($query); //anfrage an die datenbank 

    $num_kunden = mysql_num_rows($result); //anzahl der zurückgegebenen datensätze 
    for($i=0; $i<$num_kunden; $i++){ 
        $kunden_id = mysql_result($result,$i,'id'); //abfrage der kunden_id von der datenbank 
        $vorname = mysql_result($result,$i,'vorname_kunden'); //abfrage des Vornamen 
        $nachname = mysql_result($result,$i,'nachname_kunden'); //abfrage des Nachnamen
        $ort = mysql_result($result,$i,'ort_kunden'); //abfrage des Ortes
 
      
        echo '<a href="intern.php?site=kunden&kunden_id='.$kunden_id.'">'.$vorname.' '.$nachname.' '.$ort.'</a><br>'; //links auf die seite show_news.php 
        
    } 
}

?>

<form action="intern.php?site=searchkunden" method="post"> <!-- Anfang des Formulars -->
<p align="center"><b>Hier können sie den Namen, Nachnamen oder Ort des Kunden eingeben den Sie suchen!<br>Bitte geben Sie den Suchbegriff ein:</b> <p>
<b><font color="#336699">Suchbegriff:</b><br>
<input type="text" name="begriff" size="35"><br>
<input type="submit" name="suchen" value="Suchen">
</form>
 
Also ich kann auch nur sagen "Debug'n" ... ohne geht's bei mir auch nie 8) Einfach jede Zeile, vielleicht auch relevante Variablen mit "echo" ausgeben und kontrollieren.

Irgendetwas muss dann nicht stimmen, es liegt zumindest in den seltensten Fällen an der Programmiersprache. Und für Suchanfragen würde ich dir immer noch reguläre Ausdrücke mit MySQL ans Herz legen, ich glaube mit diesem Werkzeug erzielst du die besten Ergebnise.

Wenn dir das auf der MySQL-Homepage zu hoch ist (mir teilweise auch), google ein bisschen... irgendwo findest du sicher etwas, was verständlicher ist.
 
Zurück