chris: Datenbankabfrage - was ist falsch?

Hi. Möchte bei einem Script diverse Angaben aus einer Datenbank holen. Habe jetzt (hoffentlich) den richtigen Aufruf gefunden. Hier mal der Ausschnitt dazu (es handelt sich um $result welches in der while-Schleife ausgewertet werden soll):

   $result = mysql_query("SELECT id, titel, showbanner, banner FROM sf_".$sql_dat_pv);  
   if ($template == '') {  
    $template = "<table width=\"465\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><font size=\"2\" face=\"Arial, Helvetica, sans-serif\"><strong>{TITEL}</strong></font></td>";  
      $template .= "<td> <div align=\"right\"><font color=\"#00FF00\" size=\"-2\" face=\"Arial, Helvetica, sans-serif\"><strong>HitIn: {HITIN} </strong></font>";  
      $template .= "<strong><font size=\"-2\" face=\"Arial, Helvetica, sans-serif\">|</font><font color=\"#00FF00\" size=\"-2\" face=\"Arial, Helvetica, sans-serif\"> HitOut: {HITOUT}</font></strong></div></td></tr>";  
      $template .= "<tr> <td colspan=\"2\"><p align=\"justify\"><font size=\"2\" face=\"Arial, Helvetica, sans-serif\">";  
  
while($dat=mysql_fetch_array($result)) {  
if ($dat["showbanner"] == 1 and $dat["banner"] != '')  
  $template .= "<img src=\"{BANNER}\" width=\"465\" height=\"60\" border=\"0\" alt=\"".stripslashes($dat["titel"])."\"><br>";  
  
}  
$template .= "{BESCHR}</font></p></td></tr><tr><td colspan=\"2\"><font color=\"#00FF00\" size=\"-2\" face=\"Arial, Helvetica, sans-serif\"><strong>Partner seit: {DATUM}</strong></font></td></tr><tr> <td colspan=\"2\"><hr></td></tr></table><br>\n";  
}  

So, nun sollte bezweckt werden das bei jeder ID bei der showbanner==1 und banner nicht leer ist, das dann der betroffene Template-Teil angezeigt werden soll.

Aber anscheinend werden die IDs durcheinander gehauen. Wenn ich mir das Ergebnis ansehe, dann stelle ich fest, dass wenn die Abfrage ein erstes Ergebnis hat, nicht mehr weiter zu nächsten ID geht. So wollte ich z.B. im alt-Tag des Bildes den ebenfalls in der Datenbank gespeicherten "Titel" verwenden und da sehe ich halt, das nur Titel 1 verwendet wird bei allen Bildern und somit ja das Ergebnis nicht korrekt ist.

Könnt ihr mir evtl. weiterhelfen, was ich noch machen kann?

Danke

  1. hi,

    Aber anscheinend werden die IDs durcheinander gehauen. Wenn ich mir das Ergebnis ansehe, dann stelle ich fest, dass wenn die Abfrage ein erstes Ergebnis hat, nicht mehr weiter zu nächsten ID geht. So wollte ich z.B. im alt-Tag des Bildes den ebenfalls in der Datenbank gespeicherten "Titel" verwenden und da sehe ich halt, das nur Titel 1 verwendet wird bei allen Bildern und somit ja das Ergebnis nicht korrekt ist.

    Du jagst den ganzen Käse (übersichtlich ist ja wohl was anderes) ja offenbar anschliessend noch durch eine Template-Engine. Wie sieht das, was den Script erzeugt, denn aus, _bevor_ diese es verwurstet?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Du jagst den ganzen Käse (übersichtlich ist ja wohl was anderes) ja offenbar anschliessend noch durch eine Template-Engine. Wie sieht das, was den Script erzeugt, denn aus, _bevor_ diese es verwurstet?

      Hi wahsaga, ich weiß dass es nicht toller Code ist. Aber das ist ein fertiges Script welches ich mir nur anpassen wollte. Habe diesen Code nicht selbst geschrieben.

      Und eigentlich sieht der betroffene (Template-) Teil so aus:

         $get_tpl_dat=mysql_query("SELECT template FROM sf_".$sql_cfg_pv) or die("Template konnte nicht geladen werden!<br />".mysql_error());  
         $template_e=mysql_fetch_array($get_tpl_dat);  
         $template=$template_e["template"];  
         if ($template == '') {  
          $template = "<table align=\"center\" border=\"1\" bordercolor=\"#000000\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\"><tr><th ";  
          $template .= "align=\"left\" colspan=\"3\">{TITEL}</th></tr><tr><td valign=\"top\" colspan=\"3\"><p align=\"justify\">{BESCHR}</p></td>";  
          $template .= "</tr><tr><td>HitIn: {HITIN}</td><td>HitOut: {HITOUT}</td><td>Partner seit: {DATUM}</td></tr></table><br>\n";  
         }  
      
      

      Das habe ich mir dann so umgebaut, das die Anordnung nur anders aussieht und dann wollte ich mir nun nur noch eine Abfrage einbauen, das bei richtigen Ergebnis der zusätzlicher Template-Teil mit dem Bild eingefügt wird.

      gruß,
      wahsaga

      gruß Chris

      1. Das habe ich mir dann so umgebaut, das die Anordnung nur anders aussieht und dann wollte ich mir nun nur noch eine Abfrage einbauen, das bei richtigen Ergebnis der zusätzlicher Template-Teil mit dem Bild eingefügt wird.

        Was ich vermisse ist ein Prüfung ob überhaupt ein Ergebnis vorhanden ist.

        Struppi.

        1. Hi, steht doch aber schon im ersten Beitrag von mir! (Im zweiten Beitrag wollte Wahsaga wissen, wie es ohne meinen "Mist" aussieht):

          $result = mysql_query("SELECT id, titel, showbanner, banner FROM sf_".$sql_dat_pv);  
          .  
          .  
          .  
          while($dat=mysql_fetch_array($result)) {  
          if ($dat["showbanner"] == 1 and $dat["banner"] != '')  
            $template .= "<img src=\"{BANNER}\" width=\"465\" height=\"60\" border=\"0\" alt=\"".stripslashes($dat["titel"])."\"><br>";  
            
          }  
          $template .= "{BESCHR}</font></p></td></tr><tr><td colspan=\"2\"><font color=\"#00FF00\" size=\"-2\" face=\"Arial, Helvetica, sans-serif\"><strong>Partner seit: {DATUM}</strong></font></td></tr><tr> <td colspan=\"2\"><hr></td></tr></table><br>\n";  
          }  
          
          
  2. Hi, steht doch aber schon im ersten Beitrag von mir! (Im zweiten Beitrag wollte Wahsaga wissen, wie es ohne meinen "Mist" aussieht):

    $result = mysql_query("SELECT id, titel, showbanner, banner FROM sf_".$sql_dat_pv);  
    .  
    .  
    .  
    while($dat=mysql_fetch_array($result)) {  
    if ($dat["showbanner"] == 1 and $dat["banner"] != '')  
      $template .= "<img src=\"{BANNER}\" width=\"465\" height=\"60\" border=\"0\" alt=\"".stripslashes($dat["titel"])."\"><br>";  
      
    }  
    $template .= "{BESCHR}</font></p></td></tr><tr><td colspan=\"2\"><font color=\"#00FF00\" size=\"-2\" face=\"Arial, Helvetica, sans-serif\"><strong>Partner seit: {DATUM}</strong></font></td></tr><tr> <td colspan=\"2\"><hr></td></tr></table><br>\n";  
    }  
    
    
    1. Hi, steht doch aber schon im ersten Beitrag von mir! (Im zweiten Beitrag wollte Wahsaga wissen, wie es ohne meinen "Mist" aussieht):

      Ich nehme an du hast auf meinen Beitrag antowrten wollen.

      Ich sehe keine Prüfung auf irgendwas, nur auf das was du erwartest.

      Wobei ich mich aber Frage:

      if ($dat["showbanner"] == 1 and $dat["banner"] != '')
        $template .= "<img src="{BANNER}" width="465" height="60" border="0" alt="".stripslashes($dat["titel"]).""><br>";

      Wo du {BANNER} und vor allem mit was füllst?

      Hast du dir mal den Code angeschaut, der tatsächlich an dieser Stelle im Browser ankommt?

      Struppi.

      1. Ich sehe keine Prüfung auf irgendwas, nur auf das was du erwartest.

        Und das heißt? Ich prüfe es doch mit if oder?

        Wobei ich mich aber Frage:

        if ($dat["showbanner"] == 1 and $dat["banner"] != '')
          $template .= "<img src="{BANNER}" width="465" height="60" border="0" alt="".stripslashes($dat["titel"]).""><br>";

        Wo du {BANNER} und vor allem mit was füllst?

        {BANNER} wird auch aus der Datenbank geholt. Der betroffene Teil steht aber allerdings genau unter dem von mir vorher geposteten Coded des Template-teiles.

           while($dat=mysql_fetch_array($inhalt)) {  
            echo str_replace(array("{TITEL}","{URL}","{SHOWBANNER}","{BANNER}","{BESCHR}","{HITIN}","{HITOUT}","{DATUM}"),  
             array("<a href=\"".$cfg["url"]."/sf_partner.php?view=hitout&id=".$dat["id"]."\" target=\"".$cfg["target"]."\">".stripslashes($dat["titel"])."</a>",  
             $cfg["url"]."/sf_partner.php?view=partner&id=".$dat["id"],$dat["showbanner"],$dat["banner"],stripslashes($dat["text"]),$dat["hitin"],$dat["hitout"],  
             date("j.m.Y", $dat["since"])." um ".date("G:i", $dat["since"])." Uhr"),  
             $template);  
              }  
        
        

        wobei dann $inhalt so definiert ist:

        $inhalt = mysql_query("select * from sf_".$sql_dat_pv." where status='Y' order by titel ASC limit ".$pos.", ".$cfg["psite"]) or die("Partner-&Uuml;bersicht konnte nicht geladen werden!<br />".mysql_error());

        Hoffe das ist etwas verständlich?

        1. Hoffe das ist etwas verständlich?

          Naja, und was kommt im browser an?

          Struppi.

          1. Hoffe das ist etwas verständlich?

            Naja, und was kommt im browser an?

            Na das hier:

            Irgendwie wird nicht jede ID geprüft (Denke ich). So wie auf dem Bild wird beim ersten positiven Ergebnis, also beim ersten Partner stimmt die Abfrage überein, dann für die anderen immer "Link 1" als alt-Text ausgegeben. Obwohl ja eigentlich 4 Links da sind und jeder einen anderen alt-Text haben müsste.

            Also es wird nicht jeder Partner richtig ausgewertet, sondern wenn der erste stimmt wird es für alle genommen. So interpretiere ich das.

            Oder was denkst du?

            1. Hoffe das ist etwas verständlich?

              Naja, und was kommt im browser an?

              Na das hier:

              ich meinte nicht was du siehst, sondern was der Browser sieht.

              Struppi.

              1. ich meinte nicht was du siehst, sondern was der Browser sieht.

                Du meinst den Quelltext nach dem Aufruf oder was?
                Bitteschön:

                <table border="0" cellspacing="0" cellpadding="2" width="400" />  
                <tr>  
                <td align="center"><p><a href="/partner/beispiel_uebersicht.php?view=formular"><b>Als Link-Partner bewerben</b></a>  
                </p><table width="465" border="0" align="center" cellpadding="0" cellspacing="0"><tr><td><font size="2" face="Arial, Helvetica, sans-serif"><strong><a href="http://www.energiefans.de/partner/sf_partner.php?view=hitout&id=22" target="_blank">Link1</a></strong></font></td><td> <div align="right"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>HitIn: 0 </strong></font><strong><font size="-2" face="Arial, Helvetica, sans-serif">|</font><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"> HitOut: 0</font></strong></div></td></tr><tr> <td colspan="2"><p align="justify"><font size="2" face="Arial, Helvetica, sans-serif"><img src="http://img401.imageshack.us/img401/2955/bild1bw2.gif" width="465" height="60" border="0" alt="Link1"><br>Hier steht ein Link mit showbanner ==1 und eine Banner-URL</font></p></td></tr><tr><td colspan="2"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>Partner seit: 7.07.2007 um 1:57 Uhr</strong></font></td></tr><tr> <td colspan="2"><hr></td></tr></table><br>  
                <table width="465" border="0" align="center" cellpadding="0" cellspacing="0"><tr><td><font size="2" face="Arial, Helvetica, sans-serif"><strong><a href="http://www.energiefans.de/partner/sf_partner.php?view=hitout&id=12" target="_blank">Link2</a></strong></font></td><td> <div align="right"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>HitIn: 0 </strong></font><strong><font size="-2" face="Arial, Helvetica, sans-serif">|</font><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"> HitOut: 1</font></strong></div></td></tr><tr> <td colspan="2"><p align="justify"><font size="2" face="Arial, Helvetica, sans-serif"><img src="" width="465" height="60" border="0" alt="Link1"><br>Hier steht ein Link mit showbanner ==0 und keiner Banner-URL</font></p></td></tr><tr><td colspan="2"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>Partner seit: 6.07.2007 um 18:26 Uhr</strong></font></td></tr><tr> <td colspan="2"><hr></td></tr></table><br>  
                <table width="465" border="0" align="center" cellpadding="0" cellspacing="0"><tr><td><font size="2" face="Arial, Helvetica, sans-serif"><strong><a href="http://www.energiefans.de/partner/sf_partner.php?view=hitout&id=13" target="_blank">Link3</a></strong></font></td><td> <div align="right"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>HitIn: 0 </strong></font><strong><font size="-2" face="Arial, Helvetica, sans-serif">|</font><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"> HitOut: 0</font></strong></div></td></tr><tr> <td colspan="2"><p align="justify"><font size="2" face="Arial, Helvetica, sans-serif"><img src="" width="465" height="60" border="0" alt="Link1"><br>Hier steht ein Link mit showbanner ==1 aber keine Banner-URL</font></p></td></tr><tr><td colspan="2"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>Partner seit: 6.07.2007 um 22:34 Uhr</strong></font></td></tr><tr> <td colspan="2"><hr></td></tr></table><br>  
                <table width="465" border="0" align="center" cellpadding="0" cellspacing="0"><tr><td><font size="2" face="Arial, Helvetica, sans-serif"><strong><a href="http://www.energiefans.de/partner/sf_partner.php?view=hitout&id=14" target="_blank">Link4</a></strong></font></td><td> <div align="right"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>HitIn: 0 </strong></font><strong><font size="-2" face="Arial, Helvetica, sans-serif">|</font><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"> HitOut: 0</font></strong></div></td></tr><tr> <td colspan="2"><p align="justify"><font size="2" face="Arial, Helvetica, sans-serif"><img src="http://img47.imageshack.us/img47/3068/bild4ld9.gif" width="465" height="60" border="0" alt="Link1"><br>Hier steht ein Link mit showbanner ==0 aber eine Banner-URL</font></p></td></tr><tr><td colspan="2"><font color="#00FF00" size="-2" face="Arial, Helvetica, sans-serif"><strong>Partner seit: 6.07.2007 um 22:51 Uhr</strong></font></td></tr><tr> <td colspan="2"><hr></td></tr></table><br>  
                
                
                1. Sehen kannst du es auch hier:
                  http://www.energiefans.de/partner/beispiel_uebersicht.php?view=uebersicht

                2. ich meinte nicht was du siehst, sondern was der Browser sieht.

                  Du meinst den Quelltext nach dem Aufruf oder was?
                  Bitteschön:

                  Eigentlich wäre davon ausgegenagen, dass du den anschaust und versuchst rauszufinden was dort ankommt, wo du einen Fehler siehst. Gerade in Anbetracht der Tatsache das der Code das schrecklichste ist was ich in den letzten 10 Jahren gesehen habe (du solltest dich dringenst mit CSS auseinandersetzen du könntest den HTML Code auf ca. 10% eindampfen). Trotzdem habe ich mich diesem Gesundheitsriskio ausgesetzt und mal nach "img" gesucht und wurde bei der 2 Fundstelle im Quellcode fündig:
                  <img src="" width="465" height="60" border="0" alt="Link1">

                  So, und warum das so ist musst du selber rausfinden, das läßt sich anhand deines Codes nicht sagen.

                  Struppi.

                  1. Eigentlich wäre davon ausgegenagen, dass du den anschaust und versuchst rauszufinden was dort ankommt, wo du einen Fehler siehst.

                    Das habe ich gemacht und ich sehe es ja auch, das
                    2x <img src="" width="465" height="60" border="0" alt="Link1">
                    drin steht, was nicht sein soll/darf.

                    Gerade in Anbetracht der Tatsache das der Code das schrecklichste ist was ich in den letzten 10 Jahren gesehen habe (du solltest dich dringenst mit CSS auseinandersetzen du könntest den HTML Code auf ca. 10% eindampfen).

                    Das habe ich nicht selbst geschrieben, es war ein fertiges Script. Klar kann ich die ganzen Angaben mit CSS machen, is ja auch kein Problem. Aber ich wollte erstmal das ganze zum laufen bringen, was ja nicht mit dem wirren html code zu tun haben dürfte.

                    So, und warum das so ist musst du selber rausfinden, das läßt sich anhand deines Codes nicht sagen.

                    Und genau das war ja meine eigentliche Frage. Die Abfrage im Script selbst stimmt doch. Das dieser img-teil nur angezeigt werden soll wenn showbanner==1 und banner nicht leer ist.

                    Ich meine, es passt ja eigentlich wenn ich mir die links ansehe:

                    <a href="..sf_partner.php?view=hitout&id=22" target="_blank">Link2</a>
                    <a href="..sf_partner.php?view=hitout&id=12" target="_blank">Link2</a>
                    <a href="..sf_partner.php?view=hitout&id=13" target="_blank">Link3</a>
                    <a href="..sf_partner.php?view=hitout&id=14" target="_blank">Link4</a>

                    Nur dann hört es auf. Die Abfrage wird nicht beachtet...

                    1. Nur dann hört es auf. Die Abfrage wird nicht beachtet...

                      Natürlich wird die Abfrage beachtet, wie kommst du zu dieser Schlußfolgerung?

                      Struppi.

                      1. Natürlich wird die Abfrage beachtet, wie kommst du zu dieser Schlußfolgerung?

                        Na weil die Abfrage doch nicht ausgeführt wird.
                        Ich sage, wenn showbanner==1 und banner != '' dann soll das Bild eingefügt werden, sonst nicht.

                        Es werden aber alle Bilder angezeigt.

                        Und komischerweise werden im alt-Tag nicht für jeden Link der richtige Titel ausgegeben (also Titel 1, Titel 2, Titel 3 und Titel 4), sondern immer Titel 1.

                        Was aber wiederrum im Link des Partners richtig angezeigt wird.
                        Dort ist der Aufruf: <a href="www...">".stripslashes($dat["titel"])."</a>

                        und im Bild habe ich das selbe nur im alt-Tag:
                        <img src="{BANNER}" ... alt="".stripslashes($dat["titel"])."">

                        Hier wird es wie gesagt nicht richtig übernommen...

                        1. Natürlich wird die Abfrage beachtet, wie kommst du zu dieser Schlußfolgerung?

                          Na weil die Abfrage doch nicht ausgeführt wird.
                          Ich sage, wenn showbanner==1 und banner != '' dann soll das Bild eingefügt werden, sonst nicht.

                          Das Bild wird eingefügt. Das img Tag ist ja da.

                          und im Bild habe ich das selbe nur im alt-Tag:
                          <img src="{BANNER}" ... alt="".stripslashes($dat["titel"])."">

                          Hier wird es wie gesagt nicht richtig übernommen...

                          Genau, es stimmt mit deiner Template-Engine was nicht. Oder mit dem wie du sie einsetzt, keine Ahnung.

                          Struppi.