Ankündigung

Einklappen
Keine Ankündigung bisher.

Zufallssystem macht Probleme

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

  • Zufallssystem macht Probleme

    Hallo!

    Ich bin gerade dabei, hobbymäßig, etwas zu programmieren, für mich und meine Kollegen und natürlich um ein bissel fitter mit PHP zu werden

    Jedenfalls wollte ich eine Seite entwerfen, die Funktion soll folgendermaßen aussehen:
    Wenn man auf die Seite klickt, soll überprüft werden, ob die folgende Berechnung schoneinmal statt gefunden hat, dass erkennt das Programm anhand der Datenbank, wenn der Wert 1 (schon durchgeführt) oder eben 0 (noch nicht durchgeführt) ist.
    Wenn nicht, sollen zwei zufällige Zahlen rechnet werden, von 1-6. Wenn eine der errechneten Zahlen die selbe Zahl ist wie die Userid des Seitenausführers, soll diese Zahl nocheinmal zufällig berechnet werden, bis es stimmt.
    Danach soll in der Datenbank geschaut werden, ob die Zahl schon 2 Mal vorhanden ist. Wenn ja, sollen sie wieder neu berechnet werden. So, dass jede Userid 2mal in der Tabelle vorhanden ist.
    Außerdem soll man nicht zweimal die gleiche Zahl errechnet bekommen.

    Mein Problem ist nun, dass in der Tabelle trotzdem öfter z.B die Zahl 5 vorkommt und manchmal sogar pro User 2mal!
    Ich versteh es einfach nicht! Ich habe schon viele Varianten ausprobiert, nichts funktionert. Vielleicht könnt ihr mir ja zur Lösung helfen! Danke schonmal!

    Hier der Code

    PHP-Code:
    #############################################################
        ## Personen, denen man an diesem Spieltag addet, errechnen ##
        #############################################################
        
    $abfrage "SELECT * FROM users WHERE username='$username'";
    $ergebnis mysql_query($abfrage);
          
    #eigene id in variable schreiben      
    while($row mysql_fetch_object($ergebnis)) 
        {  
        
    $eigeneid=$row->id."";
        }

        
    #Prüfen, ob die beiden zukünftig errechneten schon für diesen Spieltag berechnet wurden
    $add "SELECT * FROM ranking_spieltag WHERE name='$username' ORDER BY datum DESC LIMIT 1";
    $addtruefalse mysql_query($add);    

    while(
    $row mysql_fetch_object($addtruefalse)) 
        {  
        
    $trueorfalse=$row->addtruefalse."";
        }
        

    if (
    $trueorfalse==0)
        {
    $zufall1 mt_rand(1,6);
    $zufall2 mt_rand(1,6);


        
    #######################################################################
        ####Wenn Wert mehr als zweimal in Tabelle vorhanden -> neu berechnen###
        #######################################################################
    $s1 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall1' ORDER BY datum DESC LIMIT 6";
    $erg1 mysql_query($s1);
    while(
    $var1 mysql_fetch_object($erg1)) 
        {  
        
    $anzahlzufall1=$var1->anzahl."";
        }
     
    $s2 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall2' ORDER BY datum DESC LIMIT 6";
    $erg2 mysql_query($s1);
    while(
    $var2 mysql_fetch_object($erg2)) 
        {  
        
    $anzahlzufall2=$var2->anzahl."";
        }

        
    $s3 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall2' ORDER BY datum DESC LIMIT 6";
    $erg3 mysql_query($s3);
    while(
    $var3 mysql_fetch_object($erg3)) 
        {  
        
    $anzahlzufall3=$var3->anzahl."";
        }
     
    $s4 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall1' ORDER BY datum DESC LIMIT 6";
    $erg4 mysql_query($s4);
    while(
    $var4 mysql_fetch_object($erg4)) 
        {  
        
    $anzahlzufall4=$var4->anzahl."";
     }
     
        
    $anzahlgesamt1=$anzahlzufall1+$anzahlzufall4;
        
    $anzahlgesamt2=$anzahlzufall2+$anzahlzufall3;

     
    #ÜBERPRÜFUNG ob in Tabelle der Wert schon zweimal vorkommt
    while($anzahlgesamt1 >= OR $anzahlgesamt2 >= OR $zufall1==$eigeneid OR $zufall2==$eigeneid OR $zufall2==$zufall1)
    {
    $zufall1 mt_rand(1,6);
    $zufall2 mt_rand(1,6);

    $s1 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall1' ORDER BY datum DESC LIMIT 6";
    $erg1 mysql_query($s1);
    while(
    $var1 mysql_fetch_object($erg1)) 
        {  
        
    $anzahlzufall1=$var1->anzahl."";
        }
     
    $s2 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall2' ORDER BY datum DESC LIMIT 6";
    $erg2 mysql_query($s1);
    while(
    $var2 mysql_fetch_object($erg2)) 
        {  
        
    $anzahlzufall2=$var2->anzahl."";
        }

        
    $s3 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall2' ORDER BY datum DESC LIMIT 6";
    $erg3 mysql_query($s3);
    while(
    $var3 mysql_fetch_object($erg3)) 
        {  
        
    $anzahlzufall3=$var3->anzahl."";
        }
     
    $s4 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall1' ORDER BY datum DESC LIMIT 6";
    $erg4 mysql_query($s4);
    while(
    $var4 mysql_fetch_object($erg4)) 
        {  
        
    $anzahlzufall4=$var4->anzahl."";
     }
     
        
    $anzahlgesamt1=$anzahlzufall1+$anzahlzufall4;
        
    $anzahlgesamt2=$anzahlzufall2+$anzahlzufall3;


     } 
     
      echo 
    "<br><br>Zufall 1 setzten: $anzahlzufall1<br>";
      echo 
    "Zufall 1 bestaetigen: $anzahlzufall2<br>";
      echo 
    "Zufall 2 setzten: $anzahlzufall3<br>";
      echo 
    "Zufall 2 bestaetigen: $anzahlzufall4<br>";
     echo 
    "Zufall 1 Gesamt: $anzahlgesamt1<br>";
      echo 
    "Zufall 2 Gesamt: $anzahlgesamt2<br>";


    ####################################
    ###################################


            
    $sq "UPDATE ranking_spieltag SET addtruefalse='1' WHERE name='$username' ORDER by datum DESC LIMIT 1"
            
    $ergebni mysql_query($sq);
            
    $sql "UPDATE ranking_spieltag SET setzten='$zufall1' WHERE name='$username' ORDER by datum DESC LIMIT 1"
            
    $ergebnis mysql_query($sql);
            
    $sql2 "UPDATE ranking_spieltag SET bestaetigen='$zufall2' WHERE name='$username' ORDER by datum DESC LIMIT 1"
            
    $ergebnis2 mysql_query($sql2); 


  • #2
    Ja, ähm... WAS willst du berechnen?
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Im großen und ganzen will ich eine Seite basteln, bei der pro "Spieltag" 2 von 6 Spielern angezeigt werden, denen man dann Werte über ein Formular hinzufügen kann. Diese Spieler sollen jedoch pro Spieltag zufallsberechnet werden...
      Deshalb wollte ich mit dem obigen Script zwei zufallsgenerierte IDs in eine Tabelle einfügen, und das ganze pro Spieler. Diese werden dann bei einem neuen Spieltag, den ich manuell starte, indem ich den Wert, welchen ich oben $trueorfalse genannt habe, wieder auf 0 setzte, neu berechnet.
      Sorry, es ist wirklich etwas kompliziert.. auch zu erklären :/

      Kommentar


      • #4
        Ich verstehs trotzdem nicht.

        Btw:
        PHP-Code:
        $row->id."" 
        Was soll das "" dort?

        Deine Querys sind ziemlich verwirrend, aber was soll das Limit 6 wenn du nur einen Datensatz nutzt?
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Hinweis:

          Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
          Choosing an API
          Warum man mysql* generell nicht (mehr) nutzen sollte.
          Wie man von mysql* auf PDO umsteigt
          Wissenswertes zum Thema SQL-Injection

          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.

          Es ist nicht mehr zeitgemäß, Anwendungslogik und Ausgabelogik zu kombinieren. Dadurch leidet die Wartbarkeit beider Komponenten. In der Regel folgen in PHP geschriebene Applikationen daher dem EVA-Muster, welches einen leicht nachvollziehbaren Datenfluss ermöglicht, besser wartbare Applikationen erzeugt und leichter von anderen Entwicklern verstanden wird. In der PHP-Welt hat sich hierauf aufbauend das (häufig falsch interpretierte) MVC-Muster [1] etabliert (siehe auch DCI oder ADR). Ganz einfach gesagt handelt es sich bei dem EVA-Muster um eine Aufteilung der Aktionen "Auswertung der Eingabeparameter", "Verarbeitung der damit verknüpften Anwendungslogik" und "Erzeugung und Übermittlung der Ausgabe". Oder vereinfacht: Erst Daten sammeln, dann daraus die Darstellung erzeugen und ausgeben. Die Verwendung einer Templateengine (mit Layout-Support) ist dafür Empfehlenswert - jedoch aber keine Voraussetzung.
          Standards - Best Practices - AwesomePHP - Guideline für WebApps

          Kommentar


          • #6
            Ich möchte ja, dass von allen 6 Zeilen (Usern) die Zahlen von der Spalte "setzten" und "bestaetigen" gezählt werden, die mit $zufall1 und $zufall2 berechnet wurden.
            Zum Beispiel: $zufall1 = 5; und $zufall2 = 3;
            Nun sollen alle Spalten von "setzen" nach 5 durchsucht werden und mir die anzahl ausgeben, und das gleiche mit den Spalten von "bestaetigen".
            Dann nocheinmal das gleiche Spielchen mit dem Wert 3 von $zufall2.
            Dann weiß ich ja, ob schon jeweils 2x die 5 in "setzen" und "bestaetigen" vorhanden ist, und lasse, falls das der Fall ist, die Zahlen neu berechnen, damit andere Zahlen eingefügt werden können, die noch nicht 2 mal vorhanden sind.

            Habe eure Tipps schonmal angewendet. Danke dafür
            PHP-Code:
            #############################################################
                ## Personen, denen man an diesem Spieltag addet, errechnen ##
                #############################################################
                
            $abfrage "SELECT id FROM users WHERE username='$username'";
            $ergebnis mysql_query($abfrage);
                  
            #eigene id in variable schreiben      
            while($row mysql_fetch_object($ergebnis)) 
                {  
                
            $eigeneid=$row->id;
                }

                
            #Prüfen, ob die beiden zukünftig errechneten schon für diesen Spieltag berechnet wurden
            $add "SELECT addtruefalse FROM ranking_spieltag WHERE name='$username' ORDER BY datum DESC LIMIT 1";
            $addtruefalse mysql_query($add);    

            while(
            $row mysql_fetch_object($addtruefalse)) 
                {  
                
            $trueorfalse=$row->addtruefalse;
                }
                

            if (
            $trueorfalse==0)
                {
            $zufall1 mt_rand(1,6);
            $zufall2 mt_rand(1,6);


                
            #######################################################################
                ####Wenn Wert mehr als zweimal in Tabelle vorhanden -> neu berechnen###
                #######################################################################
            $s1 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall1' ORDER BY datum DESC LIMIT 6";
            $erg1 mysql_query($s1);
            while(
            $var1 mysql_fetch_object($erg1)) 
                {  
                
            $anzahlzufall1=$var1->anzahl;
                }
             
            $s2 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall2' ORDER BY datum DESC LIMIT 6";
            $erg2 mysql_query($s1);
            while(
            $var2 mysql_fetch_object($erg2)) 
                {  
                
            $anzahlzufall2=$var2->anzahl;
                }

                
            $s3 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall2' ORDER BY datum DESC LIMIT 6";
            $erg3 mysql_query($s3);
            while(
            $var3 mysql_fetch_object($erg3)) 
                {  
                
            $anzahlzufall3=$var3->anzahl;
                }
             
            $s4 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall1' ORDER BY datum DESC LIMIT 6";
            $erg4 mysql_query($s4);
            while(
            $var4 mysql_fetch_object($erg4)) 
                {  
                
            $anzahlzufall4=$var4->anzahl;
             }
             
                
            $anzahlgesamt1=$anzahlzufall1+$anzahlzufall4;
                
            $anzahlgesamt2=$anzahlzufall2+$anzahlzufall3;

             
            #ÜBERPRÜFUNG ob in Tabelle der Wert schon zweimal vorkommt
            while($anzahlgesamt1 >= OR $anzahlgesamt2 >= OR $zufall1==$eigeneid OR $zufall2==$eigeneid OR $zufall2==$zufall1)
            {
            $zufall1 mt_rand(1,6);
            $zufall2 mt_rand(1,6);

            $s1 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall1' ORDER BY datum DESC LIMIT 6";
            $erg1 mysql_query($s1);
            while(
            $var1 mysql_fetch_object($erg1)) 
                {  
                
            $anzahlzufall1=$var1->anzahl;
                }
             
            $s2 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall2' ORDER BY datum DESC LIMIT 6";
            $erg2 mysql_query($s1);
            while(
            $var2 mysql_fetch_object($erg2)) 
                {  
                
            $anzahlzufall2=$var2->anzahl;
                }

                
            $s3 "SELECT COUNT(setzten) AS anzahl FROM ranking_spieltag WHERE setzten = '$zufall2' ORDER BY datum DESC LIMIT 6";
            $erg3 mysql_query($s3);
            while(
            $var3 mysql_fetch_object($erg3)) 
                {  
                
            $anzahlzufall3=$var3->anzahl;
                }
             
            $s4 "SELECT COUNT(bestaetigen) AS anzahl FROM ranking_spieltag WHERE bestaetigen = '$zufall1' ORDER BY datum DESC LIMIT 6";
            $erg4 mysql_query($s4);
            while(
            $var4 mysql_fetch_object($erg4)) 
                {  
                
            $anzahlzufall4=$var4->anzahl;
             }
             
                
            $anzahlgesamt1=$anzahlzufall1+$anzahlzufall4;
                
            $anzahlgesamt2=$anzahlzufall2+$anzahlzufall3;


             } 
             
              echo 
            "<br><br>Zufall 1 setzten: $anzahlzufall1<br>";
              echo 
            "Zufall 1 bestaetigen: $anzahlzufall2<br>";
              echo 
            "Zufall 2 setzten: $anzahlzufall3<br>";
              echo 
            "Zufall 2 bestaetigen: $anzahlzufall4<br>";
             echo 
            "Zufall 1 Gesamt: $anzahlgesamt1<br>";
              echo 
            "Zufall 2 Gesamt: $anzahlgesamt2<br>";


            ####################################
            ###################################


                    
            $sq "UPDATE ranking_spieltag SET addtruefalse='1' WHERE name='$username' ORDER by datum DESC LIMIT 1"
                    
            $ergebni mysql_query($sq);
                    
            $sql "UPDATE ranking_spieltag SET setzten='$zufall1' WHERE name='$username' ORDER by datum DESC LIMIT 1"
                    
            $ergebnis mysql_query($sql);
                    
            $sql2 "UPDATE ranking_spieltag SET bestaetigen='$zufall2' WHERE name='$username' ORDER by datum DESC LIMIT 1"
                    
            $ergebnis2 mysql_query($sql2);

            Kommentar

            Lädt...
            X