Suche durch eine Datenbank [Problem]

erniedd

Grünschnabel
Hallo :-) , ich möchte in meine Seite eine Suchmaschine einbauen, dazu hab ich hier ein tutorial befolgt:

Suche durch eine Datenbank von bad taste

http://www.tutorials.de/forum/php-tutorials/9872-php-mysql-suche-durch-eine-datenbank.html

Nun meine Daten:

$hostname_verbindung = "localhost";
$database_verbindung = "phost136983";
$username_verbindung = "phost136983";
$password_verbindung = "*****";

Meine Tabelle: tblspieledatenbank und Spalten: int_spiel_id, str_spiel_name, txt_beschreibung

Ich habe 3 datein erstellt (suche.php, detailtest.php, verbindung.php)

suche.php

PHP:
<?php require_once('../Connections/verbindung.php'); ?>


<form action='detailtest.php' method=POST>
None of these words: <input type='text' length=40 name='eingabe' value="<? echo $_POST['eingabe']?>"><br>
<input type='submit' value='Search'>
</form>



<?
if($_POST['eingabe']=="")  
{ 
    echo "<b>Bitte geben Sie ein Suchwort ein.</b>"; 
} 
else 
{ 

 $eingabe_array = explode(' ',$eingabe); 


    $query = 'select * from tblspieledatenbank where '; //anfang der abfrage 
    for($i=0; $i<count($eingabe_array); $i++){ 
        $query .= "(txt_beschreibung like '%".$eingabe_array[$i]."%' or str_spiel_name 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_db_query($query); //anfrage an die datenbank 
    if(mysql_num_fields($result) < 1) 
    { 
        echo "Leider keine Treffer. Bitte geben Sie einen anderen Suchbegriff ein"; 
    } 
    else 

    for($i=0; $i<$num_news; $i++){ 
        $id = mysql_result($result,$i,'int_spiel_id'); //abfrage der news_id von der datenbank 
        $header = mysql_result($result,$i,'str_spiel_name'); //abfrage der ueberschift 
        $text = mysql_result($result,$i,'txt_beschreibung'); //abfrage der news 
        $first = array_slice(explode(' ', $txt_beschreibung), 0, 40); //explode teilt den string wieder an der ' ' und array_slice erstellt einen neuen array mit den ersten 40 elementen = worten der news 
        $txt_beschreibung = join(' ', $first) . '...&nbsp;'; //join verbindet die elemente des arrays wieder zu einem string. am ende werden noch drei punkte angehängt... 
        echo '<a href="detailtest.php?id='.$int_spiel_id.'">'.$str_spiel_name.'</a><br>'; //links auf die seite show_news.php 
        echo $txt_beschreibung_kurz.'<br><br>'; //der 40 worte lange anfang des newstextes 
    } 
}
?>

verbindung.php

PHP:
<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_verbindung = "localhost";
$database_verbindung = "phost136983";
$username_verbindung = "phost136983";
$password_verbindung = "******";
$verbindung = mysql_pconnect($hostname_verbindung, $username_verbindung, $password_verbindung) or trigger_error(mysql_error(),E_USER_ERROR); 
?>

detailtest.php

PHP:
<?php require_once('../Connections/verbindung.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_verbindung, $verbindung);
$query_row = "SELECT * FROM tblspieledatenbank";
$row = mysql_query($query_row, $verbindung) or die(mysql_error());
$row_row = mysql_fetch_assoc($row);
$totalRows_row = mysql_num_rows($row);
?>
<body>

<table border="1" align="center">
  <tr>
    <td>int_spiel_id</td>
    <td><?php echo $row['int_spiel_id']; ?></td>
  </tr>
  <tr>
    <td>str_spiel_name</td>
    <td><?php echo $row['str_spiel_name']; ?></td>
  </tr>
  <tr>
    <td>txt_beschreibung</td>
    <td><?php echo $row['txt_beschreibung_kurz']; ?></td>
  </tr>
</table>
</body>
</html><?php
mysql_free_result($row);
?>

</html>


Das Problem ist egal nach was ich suche er gibt mir kein ergebnis raus, also detailtest bleibt leer aus, fehlermeldung bekomme ich keine.

Für Hilfe bin ich sehr Dankbar :-)
 
Zuletzt bearbeitet:
Hi,

tausche mal diese Zeile:
PHP:
$result = mysql_db_query($query);

gegen das hier aus:
PHP:
if (!$result = mysql_db_query($query))
{
    print mysql_error();
}

Dann bekommst du auch Fehler angezeigt.


/edit:

Übrigens: mysql_db_query() ist veraltet. Nimm statt dessen mysql_query().

Quelle: http://de2.php.net/manual/de/function.mysql-db-query.php
 
Zuletzt bearbeitet:
Kann es sein das das

PHP:
        if($i<count($eingabe_array)-1){ 
            $query .= ' and '; 
        } 
        //verknüpfung der einzelnen worte mit und

die Ursache dafür ist das nichts gefunden wird (zumindest wenn mehr als 1 Suchbegriff eingegeben wird)

So wie ich das sehe machst du folgende Abfrage:

PHP:
txt_beschreibung  LIKE '%abc%' OR str_spiel_name LIKE '%abc%' AND txt_beschreibung  LIKE '%xyz%' OR str_spiel_name LIKE '%xyz%'

Somit muss txt_beschreibung sowohl abc als auch xyz enthalten.

Was passiert wenn du das nicht mit AND sondern mit OR verknüpfst
 
Hi,

Wird der Link hier richtig ausgegeben?
PHP:
 echo '<a href="detailtest.php?id='.$int_spiel_id.'">'.$str_spiel_name.'</a><br>';


Auf der Seite detailtest.php kannst du das $row-Array nicht verwenden wenn du erst draufklicken musst.

Das heist, du musst dir in detailtest.php erstmal den passenden Datensatz holen.
 
Hallo erniedd,

lass dir mal die Variable $query ausgeben.

Den SQL kannst du dann mal direkt auf der DB testen und ggf. auch posten.
 
Was mir gerade ausgefallen ist:

PHP:
$eingabe_array = explode(' ',$eingabe);

Müsste das nicht

PHP:
$eingabe_array = explode(' ',$_POST["eingabe"]);

heißen?
 
Hallo erniedd,

lass dir mal die Variable $query ausgeben.

Den SQL kannst du dann mal direkt auf der DB testen und ggf. auch posten.


oki das muss mir genauer erklärt werden bitte, wie geb ich den die query aus ?

Datensatz hab ich eingefügt, siehe oben, bleibt alles beim alten.

Was mir gerade ausgefallen ist:

PHP:
$eingabe_array = explode(' ',$eingabe);

Müsste das nicht

PHP:
$eingabe_array = explode(' ',$_POST["eingabe"]);

heißen?

hab ich au gemacht, is immern noch wie vorher ...
 
Zuletzt bearbeitet:
Hallo erniedd,

nachdem du deine Abfrage in die Variable $query geschrieben hast, schickst du die mit
PHP:
$result = mysql_db_query($query); //anfrage an die datenbank
an die DB.
Lass dir den Query ausgeben
PHP:
echo $query;
$result = mysql_db_query($query); //anfrage an die datenbank

Der Sql steht dann irgendwo auf deiner Seite bzw. lass dir im Browser den Quellcode der Seite anzeigen.
Da steht dann "select * from tblspieledatenbank " usw.
 
Zurück