[PHP] Problem mit while schleife.

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Epidrome, 26. März 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 26. März 2007
    Problem mit while schleife.

    ==========Problem gelöst==========

    Hallo,
    ich habe folgenden Code der auch bei mir funktioniert.

    Code:
    $test = 0;
     $sql = "SELECT * FROM test WHERE vorname LIKE 'a%' AND aktiv='ja' ORDER BY 'vorname' ASC';
     $result = mysql_query($sql) or die("Zur Zeit keine Abfragen möglich");
     $myrow = mysql_fetch_assoc($result);
     if($myrow['vorname']!=""){
     while ($erg = mysql_fetch_assoc($result))
     {
     $myrow = mysql_fetch_assoc($result);
     $sql2 = "SELECT ip, error FROM anzeigen WHERE member='".$myrow['member']."'";
     $result2 = mysql_query($sql2) or die("Zur Zeit keine Abfragen möglich.");
     $myrow2 = mysql_fetch_assoc($result2);
     if ($myrow['member']=$myrow2['member']) 
     {
     echo $myrow['member'];
     $test=$test+1;
     }
    
    Jetzt wollte ich in while schleife so schreiben das er alle Ergebnisse anzeigt und wenn die Ergebnisse > 50 sind das er bei der 50te Ausgabe aufhört.
    Könnte mir einer helfen,ich bekomme es leider nicht hin.
    Bei
    Code:
    while (($result>0)and($test>50))
    gehts es durch bis 50 obwohl nur ein Ergebnis ausgegeben wird.
    Dank im Voraus, Bewertung gibt es natürlich.
     
  2. 26. März 2007
    AW: Problem mit while schleife.


    Öhhhm, versuch's doch mal mit dem hier:
    PHP:
    $test  0 ;
        
    $sql  "SELECT * FROM test WHERE vorname LIKE 'a%' AND aktiv='ja' ORDER BY 'vorname' ASC';
        
    $result  = mysql_query( $sql ) or die(" Zur Zeit keine Abfragen möglich ");
        
    $myrow  = mysql_fetch_assoc( $result );
        if(
    $myrow [ 'vorname']!=""){
        while (
    $erg  = mysql_fetch_assoc( $result ))
        {
        
    $myrow  = mysql_fetch_assoc( $result );
        
    $sql2  = " SELECT ip error FROM anzeigen WHERE member = '".$myrow[' member ']."'";
        
    $result2  = mysql_query( $sql2 ) or die(" Zur Zeit keine Abfragen möglich . ");
        
    $i  = 0;
            while(
    $myrow2  = mysql_fetch_assoc( $result2 )) {
        if (
    $myrow [ 'member']= $myrow2 [ 'member']) 
            {
            echo 
    $myrow [ 'member'];
            
    $test = $test +1;
            }
            if(
    $i <50) {
            
    $i ++;
            } else {
            break;
            }   
            }
    Das "while(myrow2 = mysql_fetch_assoc($result2))" bewirkt, dass solange alle Einträge aus der DB geholt werden, bis alle ausgegeben werden.
    Die if Abfrage prüft, ob $i (angefangen bei 0) kleiner ist als 50. Wenn ja, wird $i jeweils u 1 erhöht. Wenn nein wird die Schleife vorzeitig abgebrochen.
    Wobei mir gerade einfällt, dass das mega der sinnlose Schwachsinn ist. Stattdessen kannst du ans Ende des Querys einfach ein LIMIT 50 anhängen.

    Dein Code an sich ist aber auch etwas merkwürdig.
    Habs mal zur Verdeutlichung eingerückt:
    PHP:
    <? php   
        $test 
    0 ;
        
    $sql  "SELECT * FROM test WHERE vorname LIKE 'a%' AND aktiv='ja' ORDER BY 'vorname' ASC'" ;
        
    $result  mysql_query ( $sql ) or die( "Zur Zeit keine Abfragen möglich" );
        
    $myrow  mysql_fetch_assoc ( $result );
            if(!empty(
    $myrow [ 'vorname' ])) {
                while (
    $erg  mysql_fetch_assoc ( $result )) {
                    
    $myrow  mysql_fetch_assoc ( $result );
                    
    $sql2  "SELECT ip, error FROM anzeigen WHERE member='" . $myrow [ 'member' ]. "' LIMIT 50" ;
                    
    $result2  mysql_query ( $sql2 ) or die( "Zur Zeit keine Abfragen möglich." );
                    while(
    $myrow2  mysql_fetch_assoc ( $result2 )) {
                        if (
    $myrow [ 'member' ]= $myrow2 [ 'member' ]) {
                            echo 
    $myrow [ 'member' ];
                            
    $test = $test + 1 ;
                        }  
                    } 
    Du schachtelst da endlos irgendwelche Schleifen und if abfragen. Ich glaube, du solltest erstmal welche schließen, bevor du die nächste anfängst. für dein erstes $result hast du merkwürdigerweise auch 3 mal mysql_fetch_assoc da stehen, wobei das meines Wissens nach nicht einmal möglich ist.
    Ich denke, du hast vor, etwas aus der Tabelle "anzeigen" auszulesen, worin dann verankert ist, von welchem User der Eintrag stammt und willst dann zum jeweiligen User die Infos haben, stimmts?
    In dem Falle müsste es in etwa folgendermaßen aussehen:
    PHP:
    <? php   
        $test 
    0 ;
        
    $sql  "SELECT * FROM test WHERE vorname LIKE 'a%' AND aktiv='ja' ORDER BY 'vorname' ASC' LIMIT 50" ;
        
    $result  mysql_query ( $sql ) or die( "Zur Zeit keine Abfragen möglich" );
            if(!empty(
    $myrow [ 'vorname' ])) {
                while (
    $myrow  mysql_fetch_assoc ( $result )) {
                    
    $sql2  "SELECT ip, error FROM anzeigen WHERE member='" . $myrow [ 'member' ]. "'" ;
                    
    $result2  mysql_query ( $sql2 ) or die( "Zur Zeit keine Abfragen möglich." );
                    
    $myrow2  mysql_fetch_assoc ( $result2 )
                    if (
    $myrow [ 'member' ]= $myrow2 [ 'member' ]) {
                        echo 
    $myrow [ 'member' ];
                        
    $test ++;
                    }  
                } 
    Können noch Fehler drin sein.
    Wozu brauchst du da eigentlich $test ?
     
  3. 26. März 2007
    AW: Problem mit while schleife.

    warum so kompliziert?!

    MySQL Datenbankhandbuch: MySQL-Sprachreferenz mit vielen Beispielen: SELECT
     
  4. 26. März 2007
    AW: Problem mit while schleife.

    Also ich persönlich könnte dir auch bestimmt helfen, aber ich versteh noch nichtmals was du meinst. Du willst alle Tabellenzeilen ausgeben, aber sobald es mehr als 50 Zeilen sind möchtest du die Ausgabe abrechen, oder was für ein Ergebnis meinst du?
     
  5. 29. März 2007
    AW: Problem mit while schleife.

    @MakenX
    ja so in der Art, ich mache eine Abfrage bekomme die Antwort dann. Wenn jetzt die Antwort mehr als 50 sind (Ergebnis) dann soll nicht mehr angezeigt werden. Sind aber die Antworten (Ergebnisse) nur 25 oder weniger als 50 dann soll es sofort aufhören.
    Das Problem beim mir ist, das wenn die Ergebnisse mehr als 50 sind, wird nur 50 Ergebnisse angezeigt.
    Sind die aber weniger als 50 geht die schleife durch und zeigt die Restliche Ergebnisse als ... an bis er an die 50 ankommt und aufhört.
    Wurde mich mehr Beispiel freuen.

    @SeXy
    wow, danke werde bald deine Vorschläge testen.
    Für zwei Projekte für die Schule.
    P.S. Dein Posteingang ist voll.

    @teh_boiiingerrr
    LIMIT ist mir schon ein Begriff aber löst mein Problem leider nicht.


    @all Dank, Bekommt Bewertungen.
     
  6. 30. März 2007
    AW: Problem mit while schleife.

    Mh ich hab es immer noch nicht richtig verstanden, und da ich normalerweise vollkommen ohne SQL Kommandos programmiere bitte nicht sofort den kopf abreißen.

    Mit diesem Code würdest du feststellen wieviel Reihen dein Select query abfragt
    PHP:
      $iRows  mysql_num_rows ( $result );
    Und anschließend der Vergleich von deinem $test oder in eine Forschleife oder wie auch immer.

    Oder mit dem LIMIT Befehl.
    PHP:
      $result  mysql_query ( "SELECT * 
                           FROM test 
                           WHERE vorname LIKE 'a%' 
                           AND aktiv='ja' 
                           ORDER BY 'vorname'
                           LIMIT 50"
    ) OR die( 'Fehler.' );
      while (
    $aRow  mysql_fetch_assoc ( $result )) {
        
    print_r ( $aRow );    
      }
    So das sind die einzigen zwei Möglichkeiten die ich mit deinen Beispielen verbinden kann. Und der Limit Befehl ist so wie es bisher aussieht am sinnvollsten. Der Count() Befehl von MySQL wäre auch noch möglich aber dazu fehlen Informationen von dir. Aber ein Anliegen hab ich noch, das sind absolute Basics, vielleicht solltest du dir nochmal das quakenet php tutorial reinziehen.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.