troping: if / else anweisung fehlerhaft

Hallo :)

ich möchte prüfen, ob in einer bestimmten spalte ein wert mit T vorkommt. als ausgabe soll wenn ein eintrag mit t vorhanden ist <a href='#T'>T</a> erscheinen und ansonsten nur T.

hier mein code... bekomme immer nur T, obwohl in der datenbank auch ein eintrag "Test" ist.

<?php $Ergebnis = mysql_query("SELECT * FROM tabelle where wert='T%'");  
  
  
     if (@mysql_num_rows($Ergebnis) == 0) {  
    echo "T";  
    }  
  
    else {  
  
       echo "<a href='#T'>T</a>";  }  
?>

Wo ist der Fehler? Komme einfach nicht drauf. Habe ich etwas übersehen?

troping

  1. Hi,

    Wo ist der Fehler?

    An der Stelle, wo du die mögliche Ausgabe eines solchen blödsinnigerweise mit dem @ unterdrückst.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. An der Stelle, wo du die mögliche Ausgabe eines solchen blödsinnigerweise mit dem @ unterdrückst.

      Also richtigerweise so? klappt leider auch nicht. die verbindung zur db ist gegeben.

      <?php $Ergebnis = mysql_query("SELECT * FROM tabelle where wert='T%'");  
        
        
           if (mysql_num_rows($Ergebnis) == 0) {  
          echo "T";  
          }  
        
          else {  
        
             echo "<a href='#T'>T</a>";  }  
      ?>
      
  2. Moin,

    Wo ist der Fehler? Komme einfach nicht drauf. Habe ich etwas übersehen?

    Wäre es möglich, dass die Abfrage an sich schief geht (z.b. weil die Verbindung zur Datenbank nicht funktioniert)?

    Was liefert
    echo $Ergebnis;

    bzw.

    echo mysql_error();

    ?

    Viele Grüße,
    Jörg

  3. Hallo,

    hier mein code... bekomme immer nur T, obwohl in der datenbank auch ein eintrag "Test" ist.

    Das Problem ist nicht if/else (mal abgesehen von dem @ wie ChrisB schon schrieb) sondern bereits die Datenbankabfrage:

    SELECT * FROM tabelle where wert='T%'

    Hast du den Query mal über phpMyAdmin o.ä. laufen lassen? Du wirst keinen Datensatz als Ergebnis bekommen da du nicht die Datensätze möchtest bei denen in der Spalte wert genau "T%" steht sondern nur in denen der Inhalt ähnlich zu "T%" ist ...

    Gruß,
    Tobias

    1. Hast du den Query mal über phpMyAdmin o.ä. laufen lassen? Du wirst keinen Datensatz als Ergebnis bekommen da du nicht die Datensätze möchtest bei denen in der Spalte wert genau "T%" steht sondern nur in denen der Inhalt ähnlich zu "T%" ist ...

      Vielen Dank! Hier noch der vollständige code!

      <?php $Ergebnis = mysql_query("SELECT * FROM tabelle where wert like 'T%'");  
        
        
           if (mysql_num_rows($Ergebnis) == 0) {  
          echo "T";  
          }  
        
          else {  
        
             echo "<a href='#T'>T</a>";  }  
      ?>
      
      1. where wert like 'T%'");

        Wie würde man diesen Wert erweitern, wenn man alle zahlen von 0 bis 9 einbeziehen möchte?

        1. Hallo tropning

          Wie würde man diesen Wert erweitern, wenn man alle zahlen von 0 bis 9 einbeziehen möchte?

          dich könnten reguläre Ausdrücke in mysql interessieren
          (und auch die Beschreibung der Muster)

          Habs gerade _selbst_ probiert und es hat geklappt. Wieder was dazugelernt. Vielen Dank für den Anstoß dazu.
          Falls es Probleme mit dem Ausdruck gibt, melde dich nochmal.

          Liebe Grüße

          mbr

          1. Falls es Probleme mit dem Ausdruck gibt, melde dich nochmal.

            Hey :)

            habe folgendes probiert, leider ohne erfolg. wie kann ich die zahlen denn bloß mit einfließen lassen?!

            <?php $Ergebnis = mysql_query("SELECT spalte FROM tabelle WHERE spalte LIKE '[0-9]*'");  
              
              
                 if (mysql_num_rows($Ergebnis) == 0) {  
                echo "#";  
                }  
              
                else {  
              
                   echo "<a href='#0_bis_9'>#</a>";  }  
            ?>
            

            troping

            1. Hi!

              habe folgendes probiert, leider ohne erfolg. wie kann ich die zahlen denn bloß mit einfließen lassen?!
              <?php $Ergebnis = mysql_query("SELECT spalte FROM tabelle WHERE spalte LIKE '[0-9]*'");

              Lies bitte die dir verlinkten Seiten genauer, beachte besonders die syntaktischen Unterschiede in den Beispielen. Ein einfaches LIKE, das nur zwei Jokerzeichen kennt, muss von einem Vergleich mit regulären Ausdrücken, das viel mehr und Zeichen mit anderen Bedeutungen kennt, unterschieden werden können, weswegen es dafür andere Schlüsselwörter gibt.

              Beachte auch, dass das reine Zählen von Datensätzen anders geht als mit mysql_num_rows().

              Lo!

  4. Hi!

    [code lang=php]<?php $Ergebnis = mysql_query("SELECT * FROM tabelle where wert='T%'");
         if (@mysql_num_rows($Ergebnis) == 0) {

    Abgesehen vom Fehler mit dem = statt LIKE ist es nicht gerade sehr clever, erstmal von allen Datensätzen alle Daten abzuholen (denn das macht mysql_query() im Hintergrund, sonst kann mysql_num_rows() kein Ergebnis liefern), sie dann aber einfach nur zu zählen und die Daten wegzuwerfen. Lass doch gleich das DBMS zählen und frag nur dieses eine Zählergebnis ab: SELECT COUNT(*) ... und einmal eine Fetchfunktion aufrufen.

    Lo!

    1. Lass doch gleich das DBMS zählen und frag nur dieses eine Zählergebnis ab: SELECT COUNT(*) ... und einmal eine Fetchfunktion aufrufen.

      So sieht es jetzt aus:

      <?php $Ergebnis = mysql_query("SELECT spalte FROM tabelle WHERE spalte LIKE 'T%'");  
      if (@mysql_num_rows($Ergebnis) == 0) {
      

      Und welche Begriffe verwende ich statt mysql_query und mysql_num_rows?

      Habe jetzt folgendes geschrieben:

      <?php $Ergebnis = ?????("SELECT COUNT (spalte FROM tabelle WHERE spalte LIKE 'T%')");  
      if (?????($Ergebnis) == 0) {
      

      troping

      1. Hi!

        Lass doch gleich das DBMS zählen und frag nur dieses eine Zählergebnis ab: SELECT COUNT(*) ... und einmal eine Fetchfunktion aufrufen.
        Und welche Begriffe verwende ich statt mysql_query und mysql_num_rows?

        Lies nochmal, was ich schrieb: SELECT COUNT(*) FROM ... und einmal fetchen.

        Ohne Alias für COUNT(*) kannst du mysql_fetch_row($Ergebnis) verwenden. Das liefert ein Array, in dessen Element mit dem Schlüssel 0 sich der gesuchte Wert befindet.

        Lo!

        1. Lies nochmal, was ich schrieb: SELECT COUNT(*) FROM ... und einmal fetchen.

          Ohne Alias für COUNT(*) kannst du mysql_fetch_row($Ergebnis) verwenden. Das liefert ein Array, in dessen Element mit dem Schlüssel 0 sich der gesuchte Wert befindet.

          Also jetzt habe ich dank deiner hilfe folgendes geschrieben. allerdings fehlt nun ja noch die genau spalte, die durchsucht werden soll, oder?

          <?php $Ergebnis = mysql_query("SELECT COUNT(T%) FROM tabelle");  
            
            
               if (mysql_fetch_row($Ergebnis) == 0) {  
              echo "T";  
              }  
            
              else {  
            
                 echo "<a href='#mit_T'>T</a>";  }  
          ?>
          
          1. Hallo,

            Ohne Alias für COUNT(*) kannst du mysql_fetch_row($Ergebnis) verwenden. Das liefert ein Array, in dessen Element mit dem Schlüssel 0 sich der gesuchte Wert befindet.
            [...]
                 if (mysql_fetch_row($Ergebnis) == 0) {

            Lies nochmal das was dedlfix geschrieben hat bzw. was in der Doku zur Funktion mysql_fetch_row() über deren Rückgabewert steht ...

            Gruß,
            Tobias

          2. Lies nochmal, was ich schrieb: SELECT COUNT(*) FROM ... und einmal fetchen.

            Ich habe das ja bereits gelesen und habe versucht es bestmöglich umzusetzen. Weiß aber nicht weiter, daher mein beitrag.

          3. Hi!

            <?php $Ergebnis = mysql_query("SELECT COUNT(T%) FROM tabelle");

            Die Funktion COUNT() wird üblicherweise mit einem * als Argument aufgerufen, wenn alle Datensätze gezählt werden sollen. Ansonsten kann man auch einen Feldnamen übergeben, wenn nur Datensätze ohne NULL-Werte in diesme Feld gezählt werden sollen. Du solltest dir COUNT(*) merken, das ist meistens das was man will. Die Suchbedingung hattest du schon richtig und die kommt immer in die WHERE-Klausel: ... WHERE feld LIKE 'muster'. Beim Suchen mit regulären Ausdrücken ist das genauso: ... WHERE feld RLIKE 'muster'. Statt RLIKE geht auch REGEXP.

            if (mysql_fetch_row($Ergebnis) == 0) {

            Die für das Auslesen der Ergebnismenge einer Query relevanten Funktionen mysql_fetch_array/assoc/row/object geben immer ein Array oder Objekt zurück und keine Einzelwerte. Man kann auch nicht das Ergebnis einer Funktion direkt als Array ansprechen

            mysql_fetch_row($Ergebnis)[0]

            geht nicht. Man benötigt immer eine Variable:

            $row = mysql_fetch_row($Ergebnis);

            Wenn du dir jetzt anschaust, was in $row enthalten ist

            var_dump($row);

            wirst du ein Element mit dem Schlüssel 0 sehen:

            echo $row[0]; // Rückgabe von COUNT(*)

            So kann man beispielsweise das Zählergebnis ansehen.

            Lo!

            1. Danke!!

              Ist mein Ergebnis so korrekt?

              <?php $Ergebnis = mysql_query("SELECT COUNT(*) FROM tabelle WHERE spalte LIKE 'A%'");  
                
                
                    $row1 = mysql_fetch_row($Ergebnis);  
                
                   if (row1 == 0) {  
                  echo "nein";  
                  }  
                
                  else {  
                
                     echo "ja";  }  
              ?>
              
              1. Hallo,

                $row1 = mysql_fetch_row($Ergebnis);

                if (row1 == 0) {

                Lies die Antworten die du bekommst doch bitte genau und beschäftige dich erst mit den Grundlagen von PHP bevor du wild irgendwas zusammentippst. Eine Konstante row1 existiert an der Stelle nicht, wie du auf das richtige Array-Element zugreifst schrieb dedlfix dir bereits.

                Gruß,
                Tobias