php/mysql ...wenn datensatz leer, schreibe nichts

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php/mysql ...wenn datensatz leer, schreibe nichts

    hi,
    ich habe von php wirklich kaum ahnung bin jedoch derzeit damit beschäftigt eine kleine abfrage in eine php datei einzufügen.
    ich möchte auf eine mysql datenbank zugreifen
    in der es in der tabelle jos_vm_product
    ein feld namens product_laenge gibt

    nun möchte ich dieses feld anzeigen lassen, jedoch nur wenn werte darin sind ansonsten soll nichts ausgegeben werden

    bis jetzt funktioniert das so:

    <?PHP
    if (strlen({product_laenge}))
    { echo '<tr>
    <td>{product_laenge}</td>
    </tr>'
    }
    ?>

    und ich bekomme sogar was ausgegeben (nur leider etwas zuviel):

    Länge: L)) { echo '' } ?>
    Länge: L

    Zeile 1 ist hier jedoch vollkommen unerwünscht, ich weiß nicht warum das ausgegeben wird.


    wobei es stimmt, dass es sich um eine template datei handelt in der ansonsten kein php drin vorkommt.
    Zuletzt geändert von paulkuhn; 02.12.2005, 12:07.

  • #2
    Dein Output weist darauf hin, daß Deine Datei gar nicht von PHP geparst wird.
    Ist PHP auch definitiv auf Deinem Server installiert?
    Hat Deine Datei auch die Endung .php?

    Bei {productLaenge} fehlt noch ein $:

    {$productLaenge}

    und in der IF-Abfrage sind die geschweiften Klammern fehl am Platze. Die gehen nur in Strings.

    Kommentar


    • #3
      danke für deine antwort. ist aber leider keine lösung, da:
      1. kein $ fehlt
      2. der komplette webshop schon läuft, also läuft auch definitiv php

      <td colspan="3">{product_type}</td>
      </tr>

      <?PHP
      if (strlen({product_laenge}))
      { echo '<tr>
      <td colspan="2">{product_laenge}</td>
      <td>&nbsp;</td>
      </tr>'
      }
      ?>

      wie man sieht in der ersten zeile gibt es noch das product type, das angezeigt wird.
      die datei um die es hier geht ist lediglich eine datei zur ausgabe der artikel. logischerweise gibt es noch andere dateien in der product_laenge vorkommt

      Kommentar


      • #4
        1. kein $ fehlt
        Na wenn Du meinst...

        Ich wiederhole:

        Hat Deine Datei auch die Endung .php?

        Kommentar


        • #5
          Original geschrieben von paulkuhn
          in der ersten zeile gibt es noch das product type, das angezeigt wird.
          Du murkst offensichtlich in einem Template rum, deswegen kannst du nicht einfach so Code zwischen <? und ?> einbauen!

          Kommentar


          • #6
            Original geschrieben von onemorenerd
            Du murkst offensichtlich in einem Template rum, deswegen kannst du nicht einfach so Code zwischen <? und ?> einbauen!
            Klar kann er das, aber es wird nicht funktionieren.

            Falls du zufällig Smarty verwendest, würde ich mal[url=http://smarty.php.net/manual/de/tips.componentized.templates.php]hier{/url] nachschauen.

            Gruß

            Le Cheffe

            Kommentar


            • #7
              Und diese Zeile

              if (strlen({product_laenge}))
              ist und bleibt falsch.
              Nur um es nochmal gesagt zu haben.

              Kommentar


              • #8
                zu pekka:
                1.
                Hat Deine Datei auch die Endung .php?
                ja sonst würde er wohl kaum mit der datenbank kommunizieren und die felder dynamisch füllen.
                2.
                1. kein $ fehlt
                ja auch das hat seine richtigkeit sonst würden doch auch die anderen felder nicht ausgegeben werden
                {product_description} funktioniert
                {vendor_link} funktioiert etc. könnte beliebig weitermachen

                zu cheffe:

                funktioniert doch oder warum bekomme ich dieses feld
                Länge: L
                angezeigt
                nur er soll es nicht nochmal ausgeben wie er das derzeit macht:
                Länge: L)) { echo '' } ?>

                benutze auch kein smarty

                Kommentar


                • #9
                  Wie jeder hier im Forum, der mich kennt, bezeugen kann, hab ich kein Problem damit, wenn jemand keine Ahnung hat. Ich hab jedoch ein Problem damit, wenn jemand keine Ahnung hat und trotzdem darauf besteht, im Recht zu sein.




                  Du verwendest ganz offensichtlich irgendeine Engine, die Angaben nach dem Muster {variablenname} durch Daten austauscht. Sonst würden Dinge wie das hier:

                  <td colspan="3">{product_type}</td>
                  , außerhalb eines PHP-Tags, nicht funktionieren.

                  Was nun passiert, ist, daß auch in deinem PHP-Code durch geschweifte Klammern ausgezeichnete Platzhalter stehen, die von der Engine ausgetauscht werden, und angezeigt werde; Der PHP-Code an sich wird jedoch nicht ausgeführt, sondern der Browser zeigt ihn verhackstückelt an, weil er ihn als fehlerhaftes HTML interpretiert. Das kannst Du lockerleicht überprüfen, indem Du in den Quelltext deiner Ausgabe schaust. Dort wirst Du dein komplettes PHP-Statement, inklusive öffnendem <?PHP, unverändert und ungeparst vorfinden.

                  Wenn der PHP-Code dort eines Tages mal tatsächlich ausgeführt wird, wird Dir auffallen, daß dort, wo ich gesagt habe, sehr wohl ein $ fehlt und deine geschweiften Klammern im if-Statement nichts zu suchen haben.

                  Damit Ende der Durchsage. Und lad bitte mal die gesamte in Frage stehende PHP-Datei hoch zum Angucken, wenn Du in der Sache weiterkommen willst.
                  Zuletzt geändert von pekka; 02.12.2005, 12:15.

                  Kommentar


                  • #10
                    das mit der zerschossenen php tabelle ist richtig.
                    also geht es nun darum eine abfrage einzubauen die abfrägt ob das feld gefüllt ist oder nicht.
                    ich führe nun alle codezeilen auf die mit dem feld product_laenge betroffen sind zur besseren verständlichkeit.
                    in jedem ist die product_laenge zu finden.

                    bin sehr dankbar für weitere hilfe.

                    $q .= "product_available_date,product_availability,product_special,product_discount_id,";
                    $q .= "cdate,mdate,product_tax_id,product_laenge) ";
                    $q .= "VALUES ('";


                    $q .= $d["product_discount_id"] . "','$timestamp','$timestamp','".$d["product_tax_id"] . "','";
                    $q .= $d["product_laenge"] . "')";

                    $q .= "product_tax_id='".$d["product_tax_id"]."',";
                    $q .= "product_laenge='".$d["product_laenge"]."',";
                    $q .= "mdate='$timestamp' ";

                    /** Additional Data Fields (Prompts) **/
                    $product_laenge = "<strong>" . $VM_LANG->_PHPSHOP_CART_LAENGE. ": </strong>";

                    /** Additional Data Fields (Values) **/
                    if (!strlen($db_product->f("product_laenge")))
                    $product_laenge = "";
                    else
                    $product_laenge .= $db_product->f("product_laenge");

                    var $_PHPSHOP_CART_LAENGE = 'Länge';

                    Kommentar


                    • #11
                      Entschuldige bitte, aber HÄ? Hast du das eigentliche Problem schon gelöst oder verdrängst du es nur?

                      Nochmal: Du benutzt eine (uns unbekannte) Template Engine, hast im Template einfach PHP-Code einfügen wollen und das ging natürlich in die Hose.

                      Ich empfehle dir, dich über Sinn und Verwendung von Templates und die von dir benutzte Engine zu informieren. Denn es wird dir wenig nützen, wenn du Daten aus der DB holen, sie aber nicht ausgeben kannst.

                      Kommentar


                      • #12
                        Hast du das eigentliche Problem schon gelöst oder verdrängst du es nur?
                        Nein, das ist schon die richtige Richtung - das ist schon mal die Gegend, in der die Ausgabe gesteuert wird.

                        Hmm. PHPShop kenne ich überhaupt nicht, deshalb kann ich auch nicht sagen, wo die Templates geparst werden.

                        Was Du machen müsstest: product_laenge, das bisher einen Wert x hat, dazu kriegen, daß es "<td>Wert X</td>" heißt. Das geht am Ehesten im letzten von Dir geposteten Schnipsel.

                        Sauber ist diese Methode natürlich nicht, weil HTML in eine Template-Variable reinkommt. Ich würde eher schauen, ob sich im Template-API von PHPShop nicht eine bessere Lösung findet (also: Wenn Variable X leer, zeichne dieses und jenes HTML-Element nicht).

                        Kommentar


                        • #13
                          servus, vielen dank für den sachkundigen rat.
                          die it hat sich mittlerweile damit befasst und eine lösung bereitgestellt.

                          das funktioniert nicht :
                          <?PHP
                          if (strlen({product_laenge}))
                          { echo '<tr>
                          <td colspan="2">{product_laenge}</td>
                          <td> </td>
                          </tr>'
                          }
                          ?>
                          wie pekka richtig erkannt hat.

                          es lässt sich jedoch wie folgt lösen,statt

                          /** Additional Data Fields (Prompts) **/
                          $product_laenge = "<strong>" . $VM_LANG->_PHPSHOP_CART_LAENGE. ": </strong>";

                          /** Additional Data Fields (Values) **/
                          if (!strlen($db_product->f("product_laenge")))
                          $product_laenge = "";
                          else
                          $product_laenge .= $db_product->f("product_laenge");




                          folgenden code


                          /** Additional Data Fields (Prompts) **/
                          $product_laenge = "<tr><td align=center><strong>" . $VM_LANG->_PHPSHOP_CART_LAENGE. ": </strong>";

                          /** Additional Data Fields (Values) **/
                          if (!strlen($db_product->f("product_laenge")))
                          $product_laenge = "";
                          else
                          $product_laenge .= $db_product->f("product_laenge") . "</tr></td> ";

                          Kommentar

                          Lädt...
                          X