Kleines Prob vom PHP-Newbie....

He@dkiller

Grünschnabel
Hallo erstmal :)

Ich habe mich hier mal ein wenig umgeschaut, weil ich eine Suchfunktion brauchte... Hab mir die Tuts durchgelesen, ausprobiert, verändert, usw....

Ich hatte mir vorher eine Suchfunktion gebastelt, die auch 100% funktionierte, da war allerdings das Problem, das die Suche immer nur 1 Wort gesucht hat, aber das richtig :-)

Aber JETZT kommt das eigentliche Problem.... Ich poste Euch erstmal den Code meiner find.php:

PHP:
<?php include("header.inc.php");?>

<?

function formular_ausgabe($eingabe){ 
    global $PHP_SELF;                         
    echo "<form name=\"formular\" action=\"".$PHP_SELF."?aktion=check\" method=post>
          <table><tr><td colspan=2 align=left><b>Name:</b></td></tr>
           <tr><td colspan=2><input name=\"name\" type=text size=40 maxlength=40 value=\"".$eingabe."\"></td></tr>
           <td align=right>
           <input type=submit></td></tr></table>";
}
formular_ausgabe($eingabe);
?>

<?php $eingabe_array = explode(' ',$eingabe); ?>

<?php
$db_host  = 'localhost';
$db_user  = '';
$db_pass  = '';
$db_name  = 'heaven2';
$db_table = 'tb_daten';
$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$conn);


    $query = 'select * from table tb_daten where '; //anfang der abfrage
    for($i=0; $i<count($eingabe_array); $i++){
        $query .= "(title like '%".$eingabe_array[$i]."%' or description like '%".$eingabe_array[$i]."%' or info 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('heaven2', $query); //anfrage an die datenbank

    $num_news = mysql_num_rows($result); //anzahl der zurückgegebenen datensätze

    for($i=0; $i<$num_news; $i++){
        $id = mysql_result($result,$i,'id'); //abfrage der link_id von der datenbank
        $title = mysql_result($result,$i,'title'); //abfrage des link_titles
        $description = mysql_result($result,$i,'description'); //abfrage der beschreibung
        $first = array_slice(explode(' ', $description), 0, 40); //explode teilt den string wieder an der ' ' und array_slice erstellt einen neuen array mit den ersten 40 elementen = worten der news
        $kurze_news = join(' ', $first) . '...&nbsp;'; //join verbindet die elemente des arrays wieder zu einem string. am ende werden noch drei punkte angehängt...


        echo '<a href="show.php?id='.$id.'">'.$title.'</a><br>'; //link auf die seite show.php

        echo $kurze_news.'<br><br>'; //der 40 worte lange anfang des newstextes
    }
?>

Das Formular wird mir auch angezeigt, aber gleichzeitig auch eine Fehlermeldung welche lautet: Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\eselmoviez\find.php on line 40

In Zeile 40 steht das hier:
PHP:
$num_news = mysql_num_rows($result);

Ich denke auch mal, das ein Fehler in meiner DB-Abfrage besteht, bin mir aber nicht sicher....

Könnt Ihr mal bitte so nett sein und diesen Code überprüfen? Ich weiß absolut nicht warum, wieso und weshalb ich ein Fehler bekomme...

Das meißte aus diesem Script habe ich hier her: http://www.tutorials.de/tutorials9872.html (Big Lob an bad taste *g*)

Danke im Vorraus
 
Hi,
mach mal folgendes:

PHP:
$result = mysql_db_query('heaven2', $query); //anfrage an die datenbank
if(!$result) {
echo mysql_error();
}

und berichte :)
 
Zuletzt bearbeitet:
Mein Bericht lautet:

You have an error in your SQL syntax near 'table tb_daten where (title like '%%' or description like '%%' or info like '%%'' at line 1

Das heißt also, das der Suchbegriff nicht an die Varialbe übergeben wird.... :(

Aber warum nicht
 
Wenn innerhalb deiner %% nichts steht macht das nichts, Ergebnis wäre nur das er dann alles findet!

am besten du schaust erstmal das du ein paar echos einbaust und mal prüfst wieso die Variablen nicht übergeben werden!

dann würd ich mal nur einen Datensatz testen und am ende dann die for Schleife bauen!
 
Aber normalerweise müssten doch die Suchbegriffe, z.b. Action, vom Formular an die Variable "$eingabe" übergeben werden, und hinterher zwischen den %% auch stehen, da er ja danach suchen soll :confused:

Sorry meine dumme Fragerei, aber wie genau meinste du das mit den echo befehlen?

das ich mit dem echo befehl die variable "$eingabe" abfrage und anzeigen lasse :confused:

Danke, He@dkiller :)
 
Wenn Du Dir schon die Mühe machst, den Tabellennamen in einer Var zu speichern, dann solltest Du sie auch nutzen. :-)

$db_table = 'tb_daten';
...
$query = 'select * from '.$tb_daten.' where '; //anfang der abfrage

Die Konstruktion: $query = 'select * from table tb_daten where '; habe ich noch nicht gesehen. Vielleicht bricht der MySQL-Server da schon ab und deshalb sind dann die anderen Variablen nicht mit drin? Streiche das "table" mal.
 
Hi...

Erstmal danke für die schnellen Antworten :-)

Hab ich garnicht drauf geachtet mit dem Tabellennamen als Varialbe *vormkopfhau* :-)

Ich habe das table weggemacht, aber jetzt habe ich das problem, das die Abfrage scheinbar die komplette DB durchsucht obwohl ich KEIN SUCHBEGRIFF angegeben habe, und meine CPU-Last auf 100% steigt :( Die Seite baut sich auch nicht neu auf, bzw. das dauert ewig...

Wenn ich nun $query = 'select * from '.$tb_daten.' where '; //anfang der abfrage nehme, dann kommt auch wieder die gleiche Fehlermeldung:

You have an error in your SQL syntax near 'where (title like '%%' or description like '%%' or info like '%%')' at line 1
Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\eselmoviez\find.php on line 43


Vielleicht sollte ich mal mit weniger Variablen arbeiten.....

Im folgenden habe ich auch mal die "alte" Routine für Euch:

find.php
PHP:
<form method=post action="result2.php">
<p> Suchbegriff: <input type=text name=titel size=25 maxlength=25>
<p> <input type=submit> </form>

results.php
PHP:
<?
 include("header.inc.php");
 
$db_host  = 'localhost';
$db_user  = '';
$db_pass  = '';
$db_name  = 'heaven2';
$db_table = 'tb_daten';
$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$conn);

if ($titel == "")
{$titel = '%';}

$result = mysql_query("SELECT * FROM $db_table WHERE title LIKE '%$titel%'",$conn);

if ($query = mysql_fetch_array($result)) {

do {

  PRINT "<b>Link ID:     </b>     ";
  print $row["id"];
  print ("<p>");
  PRINT "<b>Titel:     </b>     ";
  print $row["title"];
  print ("<p>");
  PRINT "<b>Beschreibung:     </b><br><br>     ";
  print $row["description"];
  print ("<hr><p>");
  PRINT "<b>Downloadlinks:     </b>     ";
  PRINT "<a href=\"$row[urla]\">$row[titlea]</a>&nbsp&nbsp&nbsp";
  print (" ");
  print ("$nbsp");
  
} while($row = mysql_fetch_array($result));
} else {print "Sorry, no records were found!";}
?>

Diese hat super funktioniert, allerdings wenn ich nen Suchbegriff eingegeben habe der z.b. "Vom Winde verweht" heißt, dieser Satz aber NIRGENDWO in dieser Schreibweise vorkommt, die Suchroutine mir keine Ergebnisse anzeigt :( Aber er soll ja entweder nach "vom" oder "winde" oder "verweht" suchen...

Habt ihr dazu vielleicht ne lösung? Dann hör ich auch auf Euch zu nerven und gugg noch intensiver ins PHP-Buch :p :-)

Danke, He@dkiller
 
Original geschrieben von He@dkiller
Diese hat super funktioniert, allerdings wenn ich nen Suchbegriff eingegeben habe der z.b. "Vom Winde verweht" heißt, dieser Satz aber NIRGENDWO in dieser Schreibweise vorkommt, die Suchroutine mir keine Ergebnisse anzeigt :( Aber er soll ja entweder nach "vom" oder "winde" oder "verweht" suchen...

Dann darfst Du die einzelnen Bedingungen nicht mit AND verknüpfen, sondern mit OR.

Dein eigentliches Problem ist aber immer noch, dass keine korrekte SQL-Abfrage zusammengebaut wird. Lass mal die Klammern weg und lass Dir den Query mit "echo $query" auf dem Bildschirm anzeigen. Wahrscheinlich findest Du den Fehler dann von alleine.
Sollten zwischen den Prozentzeichen immer noch keine Variablen zu sehen sein, dann musst Du forschen warum da so ist.
Falls doch, musst Du den Query syntaktisch anpassen.
Jedenfalls weißt Du mehr, wenn Du Dir erstmal den Query auf den Schirm schmeissen lässt.
:)
 
Zurück