 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
07.06.2004, 21:47
|
#1
|
|
TP-Senior
Registriert seit: Aug 2002
Ort: Göttingen
|
[PHP + MySQL] Anfrage wird nicht bearbeitet
Hi!
Ich versuche schon den ganzen Tag folgendes Problem zu lösen!
Ich habe 2 Tabellen die ich getrennt von einander dursuchen möchte, allerdings wird die zweite überhaupt nicht durchgesucht.
In dem Suchformular wird der Suchbegriff und der zu druchsuchende Bereich ausgewählt!
Naja schaut es euch an:
PHP-Code:
<?php
if ( $suche == "" )
{
$titel .= "Suchformular";
$display .= "Gib bitte den gewünschten Begriff ein nachdem unsere interne Suchmaschine suchen soll!";
$display .= "<form name=\"search\" method=\"post\" action=\"$PHP_SELF?module=search\">\n";
$display .= "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"content\">\n";
$display .= "<tr>\n";
$display .= "<td width=\"120\"><b>Suchbegriff:</b></td>\n";
$display .= " <td><input name=\"suche\" type=\"text\" id=\"suche\" size=\"50\" maxlength=\"255\"></td>\n";
$display .= "</tr>\n";
$display .= "<tr>\n";
$display .= "<td><b>Bereich:</b></td>\n";
$display .= "<td><select name=\"bereich\" id=\"bereich\">\n";
$display .= "<option value=\"goals\">Replays</option>\n";
$display .= "<option value=\"news\">Neuigkeiten</option>\n";
$display .= "</select></td>\n";
$display .= "</tr>\n";
$display .= "<tr>\n";
$display .= "<td> </td>\n";
$display .= "<td><input type=\"submit\" name=\"Submit\" value=\"Suchen!\"></td>\n";
$display .= "</tr>\n";
$display .= "</table>\n";
$display .= "</form>\n";
}
elseif ( ! $suche == "" )
{
$user_ip = $REMOTE_ADDR;
$date = time();
$anfrage = "INSERT INTO suchanfragen ( suchwort, bereich, datum, ip ) VALUES ( '$suche', '$bereich', '$date', '$user_ip' )";
mysql_query ( $anfrage, $link );
if ( $bereich == "goals" )
{
$titel = "Suche (Bereich: Replays)";
$display .= "Hier findest du alle Ergebnisse zu deiner Suche!<br>\n";
$display .= "Dein Suchbegriff lautet: <b>$suche</b><br><br>\n";
$ergebnis = mysql_query ( "SELECT * FROM replays WHERE beschreibung LIKE '$suche' OR mannschaft LIKE '$suche' OR gegner LIKE '$suche' OR scorer LIKE '$suche' ORDER BY id" );
$anzahl = mysql_num_rows ( $ergebnis );
if ( $anzahl == 0 )
{
$display .= "Es wurden keine Einträge zu dem Begriff <b>$suche</b> gefunden!";
}
else
{
$display .= "Folgende Einträge wurden gefunden:<br>\n";
while ( $data = mysql_fetch_array ( $ergebnis ) )
{
$display .= "<b><img src=\"images/plus.gif\" width=\"9\" height=\"25\"> <a href=\"#\" onclick=\"swap_content('$data[id]'); return false;\">$data[mannschaft] vs. $data[gegner]</a></b><br>\n";
$display .= "<span id=\"$data[id]\" style=\"display: none\"><b>Einsender:</b> $data[einsender]<br>\n<b>Schwierigkeitsgrad</b>: $data[stars] Stern(e)<br>\n<b>Torschütze:</b> $data[scorer]<br>\n$data[beschreibung]<br><br><div align=\"center\"><img src=\"images/leiste.gif\" width=\"299\" height=\"4\"></div><br></span>";
}
}
}
elseif ( $bereich == "news" )
{
$titel = "Suche (Bereich: Neuigkeiten)";
$display .= "Hier findest du alle Ergebnisse zu deiner Suche!<br>\n";
$display .= "Dein Suchbegriff lautet: <b>$suche</b><br><br>\n";
$ergebnis = mysql_query ( "SELECT * FROM news WHERE text LIKE '$suche'" );
$anzahl = 1;//mysql_num_rows ( $ergebnis );
if ( $anzahl == 0 )
{
$display .= "Es wurden keine Einträge zu dem Begriff <b>$suche</b> gefunden!";
}
else
{
$display .= "Folgende Einträge wurden gefunden:<br>\n";
while ( $data = mysql_fetch_array ( $ergebnis ) )
{
$display .= "<b><img src=\"images/plus.gif\" width=\"9\" height=\"25\"> <a href=\"#\" onclick=\"swap_content('$data[id]'); return false;\">$data[headline]</a></b><br>\n";
$display .= "<span id=\"$data[id]\" style=\"display: none\"><b>Einsender:</b> $data[autor_id]<br>\n$data[text]<br><br><div align=\"center\"><img src=\"images/leiste.gif\" width=\"299\" height=\"4\"></div><br></span>";
}
}
}
$display .= "<div align=\"center\"><h3><a href=\"$PHP_SELF?module=search\">Zurück zum Suchformular</a></h3></div>";
}
?>
Um es im Original zu sehen besucht: http://www.pes3-goals.de/index.php?module=search
|
|
|
08.06.2004, 01:10
|
#2
|
|
TP-Supporter
Registriert seit: Apr 2001
|
Hi
vom Abfragescript scheint es schon zu stimmen.
Allerdings sendet mysql bei der Suche durch 1. Tabelle folgende Meldung
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web104/html/modules/search.php on line 44
Was mir weiterhin auffällt, Du setzt keine wildcards(%), welche den like-operater veranlassen, auch Zeichenketten am Anfang, innerhalb bzw. am Ende eines Strings zu erkennen und die entsprechenden Datensätze auszugeben, was ja Sinn machen würde.
bsp. ...where feld like '%$suche%'
Ich gehe jetzt mal davon aus, dass die Variablen $suche und $bereich den Feldern zugewiesen worden sind bzw. entspr. Einstellungen.
__________________
Liebe Grüße, die Judi!
|
|
|
08.06.2004, 01:52
|
#3
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Genau in den Wildcards liegt das Problem.
Um ein Suchergebnis zu haben, muss alles im Suchfeld so eingegeben werden, wie es in der Tabellenspalte "text" steht.
Steht also in der Spalte der Text "Hier sind die News"
wird es nur gefunden wenn man nach "Hier sind die News" sucht, nicht aber wenn man nach "Hier" sucht.
Ergo muss ich den ganzen Text bei der Suche eingeben, den ich suche...recht unsinnig 
Wenn Du in der ersten Tabelle was gefunden hast, hast Du bestimmt exakt was aus den Spalten beschreibung, mannschaft, gegner oder scorer als Suchbegriff eingegeben.
|
|
|
08.06.2004, 18:05
|
#4
|
|
TP-Senior
Registriert seit: Aug 2002
Ort: Göttingen
|
Ja jetzt funktioniert es!
Liegt an den Wildcards!
Danke schön!
Aber eine Frage habe ich noch, um die gefunden Daten hervorzuheben arbeite ich mit eregi_replace
PHP-Code:
$ersatz = "<b><font color=\"red\" style=\"background-color: yellow;\">$suche</font></b>";
$headline = eregi_replace ( $suche, $ersatz, $data[headline] );
$text = eregi_replace ( $suche, $ersatz, $data[text] );
Allerdings wird das Wort jetzt genau so geschrieben wie der Benutzer es eingegeben hat (egal ob groß oder klein)!
Wie kann ich jetzt einstellen das das Wort nicht verändert wird?
|
|
|
08.06.2004, 20:58
|
#5
|
|
TP-Supporter
Registriert seit: Apr 2001
|
Du musst für die Ersatzkette einen anderen Operatoren nehmen z.B. \\0 erlaubt den Zugriff auf den gesamten Ausdruck.
Ferner kannst Du sowas auch schön in eine Funktion schreiben, dann kannst Du diese für beliebig viele Ausgaben nutzen.
PHP-Code:
function umwandeln($msg){
global $suche;
$msg = eregi_replace($suche,"<b><font color=\"red\" style=\"background-color: yellow;\">\\0</font></b>",$msg);
return $msg;
}
z.b. umwandeln($data[text]) oder umwandeln($data[headline])
Es kann Dir allerdings passieren, dass, je nach Suchbegriff plötzlich html-Code replaced wird. Hier sollte man mit einem RegExp vorbeugen
bsp.
PHP-Code:
$msg = preg_replace("'(?!<.*?)$suche(?![^<>]*?>)'si","<span class=\"suchtext\">\\0</span>", $msg);
__________________
Liebe Grüße, die Judi!
Geändert von Judi (08.06.2004 um 21:03 Uhr).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:10 Uhr.
|
 |