tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
4857
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    Es folgt eine kurze Erklärung zum Script und danach das Problem darunter .

    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&uuml;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);
    ?>
    Erklärung:

    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)
     

  2. #2
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    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 videodann echo, ansonsten nichts echo ;) ) { echo "video.gif"; } ?>
    Geändert von son gohan (13.09.05 um 13:27 Uhr)
     

  3. #3
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Mein Vorschlag:
    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&uuml;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>";
        }
    ?>
    Gruß 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.

  4. #4
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    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?
     

  5. #5
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    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
    //
    Alternativ:
    PHP-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
    //
    Gruß 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.

  6. #6
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    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:
    PHP-Code:
    ."AND ID != ".$linkID); 
    Ich verstehe diesen Teil nicht, er funktioniert aber und gerne würde ich das nachvollziehen können.

    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?
     

  7. #7
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Zitat Zitat von son gohan
    dass man bei PHP mysql Abragen, erstens die SOL Befehle auch ruhig klein schreiben kann
    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 Zitat von son gohan
    , 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:
    PHP-Code:
    ."AND ID != ".$linkID); 
    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 Zitat von son gohan
    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?
    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.

    Gruß 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.

  8. #8
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    Ich glaube, ich verstehe was Du meinst. Die Datenbank hat jedoch keine Möglichkeit herauszufinden, welche URL aufgerufen wurde.
    Hat die Datenbank auch keine Möglichkeit heruaszufinden welche ID aufgerufen wurde?

    Jede Seite bei mir ist ja in der Tabelle mit ID gespeichert.
    Oder ist das das gleiche?
     

  9. #9
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    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
    Zitat Zitat von hpvw
    Die ID sollte im Skript bekannt sein
    Gruß 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.

  10. #10
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    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.
     

  11. #11
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Schau Dir mal das Tutorial "Navigation über die URL" an.
    Das ist ein üblicher Weg, wie die ID ins Skript kommen kann.

    Gruß 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.

  12. #12
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    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:
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/htdocs/domain/includ/verteiler.html on line 11
    Ich versteh das nicht, du vielleicht, das Script habe ich dort wie folgt eingebaut:

    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&uuml;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);
    ?>
    Zeile 11, wo diee Fehlermeldung drauf hinweist, sieht so aus:
    PHP-Code:
     if (mysql_num_rows($res) > 0) { 
    Was ist daran nicht valide und warum läuft es offline über xmapp und online über Webspace nicht?
    Geändert von son gohan (24.09.05 um 23:19 Uhr)
     

  13. #13
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    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ß 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.

  14. #14
    Avatar von son gohan
    son gohan son gohan ist offline Mitglied Diamant
    Registriert seit
    Dec 2004
    Beiträge
    1.742
    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

  1. DB Abfrage mit Array vergleichen
    Von starfoxfs im Forum PHP
    Antworten: 14
    Letzter Beitrag: 27.01.09, 11:08
  2. Abfrage von Inhalten in DB und vergleichen
    Von BlackCross im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 17.12.06, 19:02
  3. DB Abfrage mit 2 Abfrage vergleichen...
    Von markberg im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 26.03.06, 14:27
  4. MYSQL Abfrage mit Select in der Like-Abfrage
    Von TSchreiber im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 10.04.05, 19:09
  5. IF Abfrage mit 2 Var Vergleichen
    Von Webber im Forum PHP
    Antworten: 5
    Letzter Beitrag: 19.08.02, 07:03