Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] If Funktion in einer While Schleife

Einklappen

Neue Werbung 2019

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

  • [Erledigt] If Funktion in einer While Schleife

    Hallo zusammen,

    irgendwie steh ich auf dem Schlauch, könnt ihr mir sagen warum folgender Code bei mir nicht so funktioniert wie ich mir das vorstelle?

    Folgendes stelle ich mir vor, aus der DB werden Daten (Fotos) eines Mitgliedes abgefragt, dann möchte ich lediglich mit der IF Funktion bewirken das wenn das Mitglied noch kein Foto hochgeladen hat das die Else eintritt also Nopicture. Damit auch die Funktion < 0

    Hier der Code, allerdings gibt er mir nur Daten aus bei Mitgliedern die ein Foto bereits hochgeladen haben, bei Mitgliedern die kein Foto hochgeladen haben erfolgt keine Ausgabe.

    While Schleife wird benötigt da es sich teils auch um mehrere Fotos pro Mitglied handelt. ich Hoffe es ist einigermaßen verständlich.

    Hier mal der Codeabschnitt:

    PHP-Code:
     <? $rs_settings = mysql_query("select * from picture where user_id='$_SESSION[user_id]'"); 
         while ($row_set = mysql_fetch_array($rs_settings)) {
         $leerodernicht1 = mysql_num_rows($rs_settings); 
         if($leerodernicht1 > 0){ 
         
         echo "<div class=\"item\"><img width=\"100%\" src=\"";
         echo $row_set['dateiname'];
         echo "\"></div>";

    else

         echo "<div class=\"item\"><img width=\"100%\" src=\"images/nobild.png\"></div>";
    }  



    ?>

  • #2
    Probier mal folgendes:
    PHP-Code:
    <? $rs_settings = mysql_query("select * from picture where user_id='$_SESSION[user_id]'");  
         while ($row_set = mysql_fetch_object($rs_settings)) { 
         if($row_set->die_spalte_in_der_die_links_zu_den_bildern_eingetragen_sind = NULL){  
          
         echo "<div class=\"item\"><img width=\"100%\" src=\""; 
         echo $row_set['dateiname']; 
         echo "\"></div>"; 
    }  
    else 
    {  
         echo "<div class=\"item\"><img width=\"100%\" src=\"images/nobild.png\"></div>"; 
    }   

    }  

    ?>
    Wenn diese Spalte nicht NULL werden kann, ersetze NULL durch "".

    Ich hoffe das funktioniert

    LG,
    Auran

    Kommentar


    • #3
      Tipp zu deiner DB Verbindung(mysql): http://php.net/manual/de/function.mysql-connect.php
      Man beachte den roten Kasten

      Programmier am besten gleich mit mysli oder PDO.

      Kommentar


      • #4
        Du prüfst zu spät, ob Ergebnisse vorhanden sind.

        PHP-Code:
         $leerodernicht1 mysql_num_rows($rs_settings); 
         if(
        $leerodernicht1 0){ 
             while (
        $row_set mysql_fetch_array($rs_settings)) {
             
             echo 
        "<div class=\"item\"><img width=\"100%\" src=\"";
             echo 
        $row_set['dateiname'];
             echo 
        "\"></div>";
             } 
        }
        else

             echo 
        "<div class=\"item\"><img width=\"100%\" src=\"http://www.php.de/images/nobild.png\"></div>";

        +

        Die mysql_* Erweiterung ist veraltet und wird wohl in der nächsten PHP-Version entfernt. Zudem ist deine Query anfällig für SQL-Injections.
        Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
        Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm

        +

        'SELECT * ...' ist nicht gut, am besten du gewöhnst die früh an alle Spalten explizit zu nennen die du selektieren willst.

        Oder in rkr's Worten:
        Die Verwendung von "*" in SQL-Abfragen wird im Allgemeinen als schlechter Stil angesehen. "*" kann entweder alle Felder aus einer Tabelle, oder (wenn mehrere Tabellen mit einbezogen werden) aus allen Tabellen ziehen.

        Zwei Gründe sprechen dagegen: Wenn du dein Tabellenschema anpasst, wird die Abfrage weiterhin funktionieren. Die Abfrage wird in deinem Code aber Variablen (bzw. Array-Keys) erzeugen, die von deinem Programm so nicht erwartet werden. Das kann (je nachdem, wie deine Applikation aufgebaut ist) zu schwer nachvollziehbaren Problemen führen. Würdest du die Spaltennamen direkt in deiner SQL-Abfrage angeben, würde die SQL-Abfrage direkt lautstark fehlschlagen. Dann kannst du möglicherweise einen Alias für umbenannte Tabellenspalten angeben, ohne dass du deinen Applikationscode anpassen musst.

        Außerdem kann man durch eine explizite Angabe die Reihenfolge und die Anzahl der Tabellenspalten begrenzen. Die Reihenfolge kann je nach Applikation eine Rollen spielen und je weniger Felder man einbezieht, desto schneller wird das Ergebnis zum abfragenden Client übertragen.
        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

        Kommentar


        • #5
          Zitat von Auran Beitrag anzeigen
          Probier mal folgendes:
          PHP-Code:
          <? $rs_settings = mysql_query("select * from picture where user_id='$_SESSION[user_id]'");  
               while ($row_set = mysql_fetch_object($rs_settings)) { 
               if($row_set->die_spalte_in_der_die_links_zu_den_bildern_eingetragen_sind = NULL){  
                
               echo "<div class=\"item\"><img width=\"100%\" src=\""; 
               echo $row_set['dateiname']; 
               echo "\"></div>"; 
          }  
          else 
          {  
               echo "<div class=\"item\"><img width=\"100%\" src=\"images/nobild.png\"></div>"; 
          }   

          }  

          ?>
          Wenn diese Spalte nicht NULL werden kann, ersetze NULL durch "".

          Ich hoffe das funktioniert

          LG,
          Auran
          Danke dir schon einmal sehr

          habe es soeben probiert allerdings sieht es jetzt so aus.

          Bei user 1 (hat 5 Bilder) wird jetzt 5x der nopicture.jpg ausgegeben

          bei user 2 (hat 0 Bilder) wird wie davor NICHTS ausgegeben

          Kommentar


          • #6
            @auran: das wird nicht funktionieren...

            PHP-Code:
            if($row_set->die_spalte_in_der_die_links_zu_den_bildern_eingetragen_sind NULL){ 
            da muss u.a. ein "==" (wenn überhaupt sein) und nicht ein "=" stehen und wenn(!) dann prüfst du direkt im SQL Statement mit "IS NULL" z.B.

            Weiterhin:

            - mysql_* ist veraltet. PDO oder mysqli nutzen.

            @max075: als gedanklicher Ansatz & ausgeschrieben für's Verständnis:

            PHP-Code:
            // PDO Verbindung aufbauen...
            $pic "http://www.php.de/images/nobild.png";

            $qrySel $db->prepare("select * from picture where user_id=?");
            $qrySel->execute(array($_SESSION['user_id']));

            if(
            $qrySel->rowCount() == 1){
              While(
            $row $qrySel->fetch(PDO::FETCH_ASSOC)){
               
            $pic $row["dateiname"];
              }
            }

            echo 
            "<div class=\"item\"><img width=\"100%\" src=\"".$pic."\"></div>"
            EDIT: gerade nochmal deinen Text durchgelesen: du könntest in dem Fall auch den Beispiel Code gut in ne Function packen + eigentlich auch schon direkt in deinem SQL Statement auf bild oder nicht bild prüfen und ausgeben lassen. Wäre der elegantere Weg.
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              Achso. Da habe ich dich falsch verstanden. Dann orientiere dich bitte an den anderen.
              Ich dachte es geht nur um Bild oder NichtBild...

              @wolf29 Da hast du natürlich Recht. Das kommt davon, wenn man sich das geschriebene nicht nochmal anschaut ^^

              Kommentar


              • #8
                Zitat von VPh Beitrag anzeigen
                Du prüfst zu spät, ob Ergebnisse vorhanden sind.

                PHP-Code:
                 $leerodernicht1 mysql_num_rows($rs_settings); 
                 if(
                $leerodernicht1 0){ 
                     while (
                $row_set mysql_fetch_array($rs_settings)) {
                     
                     echo 
                "<div class=\"item\"><img width=\"100%\" src=\"";
                     echo 
                $row_set['dateiname'];
                     echo 
                "\"></div>";
                     } 
                }
                else

                     echo 
                "<div class=\"item\"><img width=\"100%\" src=\"http://www.php.de/images/nobild.png\"></div>";

                +

                Die mysql_* Erweiterung ist veraltet und wird wohl in der nächsten PHP-Version entfernt. Zudem ist deine Query anfällig für SQL-Injections.
                Durch einen Wechsel auf mysqli_* oder PDO greifst du aufdie modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections wirken.
                Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm

                +

                'SELECT * ...' ist nicht gut, am besten du gewöhnst die früh an alle Spalten explizit zu nennen die du selektieren willst.
                Bombastisch es funktioniert, hab so ein Fall noch nicht gehabt, dachte mir schon so etwas ähnliches meistens ist das Ziel näher als man denkt.

                Herzlichen Dank!

                Kommentar

                Lädt...
                X