ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
4857
4857
EMPFEHLEN
-
Es folgt eine kurze Erklärung zum Script und danach das Problem darunter
.
Erklärung:PHP-Code:<?php
$res = mysql_db_query("DB007", "SELECT * FROM links WHERE MATCH name AGAINST ('$tit')");
$num = mysql_num_rows($res);
if ($num == 0) { echo ""; } else { echo "<p class=\"frage_1\">Weiterführende Themen</p>
<ul class=\"frage\">"; }
for ($i=0; $i<$num; $i++)
{
$vn = mysql_result($res, $i, "url");
$nn = mysql_result($res, $i, "name");
echo "<li><a href=\"$vn\">$nn <img class=\"wft_bild\" src=\"gif/schrift.gif\" alt=\"$nn\" title=\"$nn\" /></a></li>\n";
}
if ($num == 0) { echo ""; } else { echo "</ul>"; }
mysql_close($db);
?>
Das Script vergleicht mit der mysql_db_query Abfrage zunächst ob Einträge in der Tabelle sind die der Variable &tit ähneln und speichert die Ergebnisse in eine Variable $res.
Danach speichert es mit mysql_num_rows die Anzahl an Datensätze aus der Abfrage in eine Variable $num.
Mit der Variable $num vergleiche ich dann ob Datensätze gefunden wurden, wenn das der Fall ist werden zunächst mit Hilfe der If-Abfrage die Anfangs und Endtags der ul Liste ausgegeben.
Die einzelnen Listenpunkte zu der ul Liste werden wiederum mit Hilfe der for Schleife und anhand der Abfrage Ergebnisse erzeugt.
Alles klar bis hier hin
gut dann kann es ja weiter gehen zu meinem Problem...
Problem:
Die Tabelle hat noch ein Datenfeld mit Namen infoart, dort speichere ich jeweils die Art des Datensatzes, in meinem Fall handelt es sich um Hyperlinks die entweder zu einer Video oder Text Info führen, in die Spalten des Datenfeldes infoart schreibe ich dazu entweder video oder text zur Unterscheidung.
Jetzt habe ich in jedem Listenpunkt aus der for Schleife aber noch ein img Tag wo standardmässig ein gif Bild steht mit dem Namen schrift.gif, für Textinfos gedacht. Wenn es sich aber bei einem Datensatz um eine Video Info handelt, dann will ich das dort ein video.gif ausgegeben wird.
Ich habe auch schon überlegt das man das vielleicht einfach mit einer if-Abfrage lösen könnte. So das immer wenn es sich um einen Datensatz mit der Art video im Datenfeld infoart handelt ein video.gif ausgegeben wird als echo.
Aber ich weis nicht wie ich auf das Datenfeld infoart aus der Tabelle zugreifen kann um so eine if-Abfrage schreiben zu können.
Ich würde nur zu gern wissen wie man das lösen kann.Geändert von son gohan (13.09.05 um 13:27 Uhr)
-
Hallo, an alle die keine Lust haben die ganze Problemstellung aus dem oberen Beitrag zu lesen poste ich hier das Problem noch mal in Kurzform:
Ich habe auch schon überlegt das man das vielleicht einfach mit einer if-Abfrage lösen könnte. So das immer wenn es sich um einen Datensatz mit der Art video im Datenfeld infoart handelt ein video.gif ausgegeben wird als echo.
Aber ich weis nicht wie ich auf das Datenfeld infoart aus der Tabelle zugreifen kann um so eine if-Abfrage schreiben zu können.
Also wie kann ich in einer PHP if Abfrage auf Datenfelder aus der MySQL Tabelle zugerifen:
PHP-Code:<?php if (Datenfeld infoart gleich video, dann echo, ansonsten nichts echo ;) ) { echo "video.gif"; } ?>Geändert von son gohan (13.09.05 um 13:27 Uhr)
-
Mein Vorschlag:
Gruß hpvwPHP-Code:<?php
$res = mysql_db_query("DB007",
"SELECT * FROM links WHERE MATCH name AGAINST ('$tit')");
if (mysql_num_rows($res) > 0) {
echo '<p class="frage_1">Weiterführende Themen</p>'
."\n"
.'<ul class="frage">';
while ($row = mysql_fetch_assoc($res)) {
echo '<li><a href="'
.$row['url']
.'">'
.$row['name'];
if ($row['infoart']=='video') {
echo ' <img class="wft_bild" '
.'src="gif/video.gif" alt="';
} else {
echo ' <img class="wft_bild" '
.'src="gif/schrift.gif" alt="';
}
echo $row['name']
.'" title="'
.$row['name']
.'" /></a></li>'
."\n";
}
echo "</ul>";
}
?>Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Hallo hpvw,
das ist eine gute Lösung die auch funktioniert. Danke sehr. Ich habe mir für die nächsten Wochen ein paar PHP Turoials vorgenommen, damit ich das auch mal so gut schreiben kann wie du.
Wie würdest du das noch lösen, damit die Seite in welcher das Sciprt angeziegt wird, selber nicht als Linktip unten angezeigt wird? Die Links haben alle eine id und am besten wäre es die Id der Seite zu vergelichen und nicht zuzulassen. Tja wie man das aber jetzt schreibt ist eine andere Frage?
-
Alternativ:PHP-Code:
<?php
$linkID=2; // <- Die ID sollte im Skript bekannt sein
$res = mysql_db_query("DB007",
"SELECT * FROM links WHERE MATCH name AGAINST ('$tit') "
."AND ID != ".$linkID);
//der Rest, wie gehabt
//Gruß hpvwPHP-Code:<?php
$eigeneURL='http://...php'; // <- Die eigene URL sollte
// im Skript bekannt sein
$res = mysql_db_query("DB007",
"SELECT * FROM links WHERE MATCH name AGAINST ('$tit') "
."AND URL != '".$eigeneURL."'");
//der Rest, wie gehabt
//Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Hallo, dein Beispiel funktioniert, aber ich habe noch zwei Fragen:
1. Warum schreibst du bzw. warum wird die Abfrage so geschrieben, ich habe im galileo openbook MySQL Tutorial gelernt, dass man bei PHP mysql Abragen, erstens die SOL Befehle auch ruhig klein schreiben kann, und das die Abfrage anfängt und aufhört in Anführungsstrichen, in deinem Beispiel wird die Abfrage bis zum ('$tit') auch mit einem Anführungsstrich geschlossen, dann aber kommt ein Punkt und nochmal zwei Anführungsstriche und der rest halt wie folgt:
Ich verstehe diesen Teil nicht, er funktioniert aber und gerne würde ich das nachvollziehen können.PHP-Code:."AND ID != ".$linkID);
2. Das Beispiel funktioniert aber scheint sehr aufwendig zu sein, weil ich die Variabale id erst selber schreiben muss, um sie verwenden zu können, ich will aber gerne direkt auf die id aus der Tabelle zugreifen mit hilfe der Abfrage, ohne immer manuell eine Variable mit der id schreiben zu müssen, verstehst du?
-
Das kann man auch. Ich habe mir jedoch angewöhnt, sämtliche SQL-Schlüsselwörter und Funktionen groß zu schreiben, damit ich sofort erkenne, ob es sich um ein Datenelement (Feld, Tabelle, Alias) oder einen SQL-Begriff handelt.
Zitat von son gohan
Bei dem Punkt handelt es sich um den Verkettungsoperator für Strings. Auch das habe ich mir für die Übersicht angwöhnt. Bei passendem Syntaxhighlighting erkennt man sofort, an welcher Stelle eine Variable in den String kommt. Außerdem können viele andere Programmiersprachen keine Variablen direkt im String verwenden. So muß ich nicht dauernd umdenken.
Zitat von son gohan
Ich glaube, ich verstehe was Du meinst. Die Datenbank hat jedoch keine Möglichkeit herauszufinden, welche URL aufgerufen wurde. Du könntest evtl. auch mit $_SERVER['PHP_SELF'] das aktuelle Skript herausfinden, aber nicht direkt die aufgerufene URL.
Zitat von son gohan
Gruß hpvwWarum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Hat die Datenbank auch keine Möglichkeit heruaszufinden welche ID aufgerufen wurde?Ich glaube, ich verstehe was Du meinst. Die Datenbank hat jedoch keine Möglichkeit herauszufinden, welche URL aufgerufen wurde.
Jede Seite bei mir ist ja in der Tabelle mit ID gespeichert.
Oder ist das das gleiche?
-
Und woher weiß Dein Skript, welche Seite angezeigt werden soll? Vermutlich doch durch eine übergebene Variable? Diese könntest Du dann auch im Query verwenden. Das wäre eine Möglichkeit von
Gruß hpvw
Zitat von hpvw
Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Ja, das ist wohl das Problem, ich muss dem Script immer irgendwie die ID übergeben, das ich dazu jetzt in jede Seite, die id als Variable selbst rein schreiben muss, hatte ich mir eigentlich gedacht sparen zu können, aber es geht wohl nicht anders.
Alos danke nochmal für die Hilfe.
-
Schau Dir mal das Tutorial "Navigation über die URL" an.
Das ist ein üblicher Weg, wie die ID ins Skript kommen kann.
Gruß hpvwWarum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Hallo,
danke für den Link zum Tutorial, der ist schon lernenswert für mich, aber ich muss kurz nochmal zu dem MySQL Script zurückkommen.
Über meinen lokalen XMAPP Server läuft der Fehlerfrei, aber wenn ich das über meinen Webserver online teste, dann kommt die Fehlermeldung:
Ich versteh das nicht, du vielleicht, das Script habe ich dort wie folgt eingebaut:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/htdocs/domain/includ/verteiler.html on line 11
Zeile 11, wo diee Fehlermeldung drauf hinweist, sieht so aus:PHP-Code:<?php
$res = mysql_db_query("DB007",
"SELECT * FROM links WHERE MATCH name AGAINST ('$tit')");
if (mysql_num_rows($res) > 0) {
echo '<p class="frage_1">Weiterführende Themen</p>'
."\n"
.'<ul class="frage">';
while ($row = mysql_fetch_assoc($res)) {
echo '<li><a href="'
.$row['url']
.'">'
.$row['name'];
if ($row['infoart']=='video') {
echo ' <img class="wft_bild" '
.'src="gif/video.gif" alt="';
} else {
echo ' <img class="wft_bild" '
.'src="gif/schrift.gif" alt="';
}
echo $row['name']
.'" title="'
.$row['name']
.'" /></a></li>'
."\n";
}
echo "</ul>";
}
mysql_close($db);
?>
Was ist daran nicht valide und warum läuft es offline über xmapp und online über Webspace nicht?PHP-Code:if (mysql_num_rows($res) > 0) {
Geändert von son gohan (24.09.05 um 23:19 Uhr)
-
Ich denke mal, dass mit der Datenbank auf dem Server etwas nicht stimmt.
Entweder hast Du keine oder Du hast noch das lokale Kennwort und den lokalen Benutzernamen im Skript oder der Datenbankname ist ein anderer als lokal oder Du hast Deine Tabellen noch nicht angelegt...
Es könnte so vieles sein. Mehr erfährst Du, wenn Du mysql_error() nach den entsprechenden Datenbankfunktionen (mysql_query(), mysql_select_db(), etc.) zur Fehlerausgabe nutzt.
Gruß hpvwWarum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.
-
Hallo,
mit der Abfrage mysql error konnte ich das Problem lösen, ich hatte vergessen der Tabelle über meine Webdatendank erst mal einen Volltext index zu geben damit die Volltextsuche überhaupt klappt.
Gut das du mir den Hinweis auf mysql error gegeben hast, vielen Dank noch mal.
Ähnliche Themen
-
DB Abfrage mit Array vergleichen
Von starfoxfs im Forum PHPAntworten: 14Letzter Beitrag: 27.01.09, 11:08 -
Abfrage von Inhalten in DB und vergleichen
Von BlackCross im Forum Relationale DatenbanksystemeAntworten: 8Letzter Beitrag: 17.12.06, 19:02 -
DB Abfrage mit 2 Abfrage vergleichen...
Von markberg im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 26.03.06, 14:27 -
MYSQL Abfrage mit Select in der Like-Abfrage
Von TSchreiber im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 10.04.05, 19:09 -
IF Abfrage mit 2 Var Vergleichen
Von Webber im Forum PHPAntworten: 5Letzter Beitrag: 19.08.02, 07:03





Zitieren
Login





