Ankündigung

Einklappen
Keine Ankündigung bisher.

While Schleife

Einklappen

Neue Werbung 2019

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

  • While Schleife

    Guten Abend,

    ich habe ein kleines Problem und finde keine Lösung:

    PHP-Code:
            // generiere eine random zahl, prüfe sie ob vorhanden und gib sie aus
            
    $randzahl rand($first_entry$last_entry);
            
    $query_chk "SELECT id, status FROM ".TBL_VIDEOS." WHERE id = ".$randzahl." AND status = 1";
            
    $sql_chk mysql_query($query_chk);
            
    // prüfe ob die id vorhanden ist -> wenn ja echo wenn nein newrandom
            
    while (true) {
                if (
    mysql_num_rows($sql_chk) == 1) {
                    echo 
    $randzahl;
                    break;
                } else {
                    
    $randzahl rand($first_entry$last_entry);
                }            
            } 
    Es soll eine Zufallszahl generieren, prüfen ob diese in der Datenbank als id vorhanden ist, und diese dann ausgeben. Wenn aber die Zahl nicht vorhanden ist als id, soll eine neue Zahl generiert werden, bis eine Zahl in der DB existiert!
    Momentan ist es so: Wenn else auftritt wird einfach eine neue Zahl generiert, quasi eine Endlosschleife.

    Wie kann ich das Script dazubringen es richtig zu machen?

    Freundliche Grüsse, Dominic

  • #2
    Zitat von D.Imhof Beitrag anzeigen
    Guten Abend,

    ich habe ein kleines Problem und finde keine Lösung:

    PHP-Code:
            // generiere eine random zahl, prüfe sie ob vorhanden und gib sie aus
            
    $randzahl rand($first_entry$last_entry);
            
    $query_chk "SELECT id, status FROM ".TBL_VIDEOS." WHERE id = ".$randzahl." AND status = 1";
            
    $sql_chk mysql_query($query_chk);
            
    // prüfe ob die id vorhanden ist -> wenn ja echo wenn nein newrandom
            
    while (true) {
                if (
    mysql_num_rows($sql_chk) == 1) {
                    echo 
    $randzahl;
                    break;
                } else {
                    
    $randzahl rand($first_entry$last_entry);
                }            
            } 
    Es soll eine Zufallszahl generieren, prüfen ob diese in der Datenbank als id vorhanden ist, und diese dann ausgeben. Wenn aber die Zahl nicht vorhanden ist als id, soll eine neue Zahl generiert werden, bis eine Zahl in der DB existiert!
    Momentan ist es so: Wenn else auftritt wird einfach eine neue Zahl generiert, quasi eine Endlosschleife.

    Wie kann ich das Script dazubringen es richtig zu machen?

    Freundliche Grüsse, Dominic
    das script macht auch keinen wirklichen sinn. was dein script im moment macht ist:
    eine zufallszahl erzeugen.
    eine mysql abfrage abschicken
    ein einer schleife immer wieder prüfen ob die gerade abgeschickte anfrage 1 result zurückgibt und falls nicht eine neue zufallszahl generieren und wieder prüfen, ob die GLEICHE anfrage 1 result zurückgibt.

    der fehler ist ganz einfach: du musst natürlich IN der schleife deine mysql-abfrage machen. du musst ja jedesmal wenn du $randzahl geändert hast wieder eine NEUE anfrage an die mysql-datenbank senden und prüfen. im moment schickst du EINMAL eine anfrage und prüfst immer wieder DIESE EINE anfrage - mit natürlich immer dem gleichen ergebnis.

    mfg

    Kommentar


    • #3
      Viele Dank für deine rasche Antwort. Meine neues Script sieht so aus und funktioniert:

      PHP-Code:
              // generiere eine random zahl, prüfe sie ob vorhanden und gib sie aus
              // prüfe ob die id vorhanden ist -> wenn ja echo wenn nein newrandom
              
      while (true) {
                  
      $randzahl rand($first_entry$last_entry);
                  
      $query_chk "SELECT id, status FROM ".TBL_VIDEOS." WHERE id = ".$randzahl." AND status = 1";
                  
      $sql_chk mysql_query($query_chk);
                  
                  if (
      mysql_num_rows($sql_chk) == 1) {
                      echo 
      $randzahl;
                      break;
                  }
              } 
      Vielen Dank

      Kommentar


      • #4
        Zitat von D.Imhof Beitrag anzeigen
        Viele Dank für deine rasche Antwort. Meine neues Script sieht so aus und funktioniert:

        PHP-Code:
                // generiere eine random zahl, prüfe sie ob vorhanden und gib sie aus
                // prüfe ob die id vorhanden ist -> wenn ja echo wenn nein newrandom
                
        while (true) {
                    
        $randzahl rand($first_entry$last_entry);
                    
        $query_chk "SELECT id, status FROM ".TBL_VIDEOS." WHERE id = ".$randzahl." AND status = 1";
                    
        $sql_chk mysql_query($query_chk);
                    
                    if (
        mysql_num_rows($sql_chk) == 1) {
                        echo 
        $randzahl;
                        break;
                    }
                } 
        Vielen Dank
        Gern.
        Als kleine Anmerkung: Du kannst das ganze auch ohne if-case und break; lösen indem du einfach
        PHP-Code:
        while(mysql_num_rows($sql_chk) != 1
        machst
        und nach der schleife
        PHP-Code:
        echo $randzahl
        mfg

        Kommentar


        • #5
          Vielen Dank, habe deinen Vorschlag "eingebaut"

          Kommentar


          • #6
            Wenn Dir das "zufällig genug" ist, kannst Du auch einfach die nächst-passende id abfragen
            PHP-Code:
            <?php
            $randzahl 
            rand($first_entry$last_entry);
            $query_chk "
              SELECT
                id
              FROM 
                "
            .TBL_VIDEOS."
              WHERE
                id >= "
            .$randzahl."
                AND status = 1
              ORDER BY
                id
              LIMIT 1"
            ;
            $result mysql_query($query_chk) or die(mysql_error());
            $id mysql_result($result0'id');
            Damit werden zwar ids mit "Lücken davor" bevorzugt. Dafür ist es aber deterministisch, d.h. es kommt nicht vor, dass Du zufällig in einer Endlosschleife festhängst.

            Kommentar

            Lädt...
            X