[PHP] While-Schleife in While-Schleife, Variable mitnehmen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von matzinho, 30. Oktober 2011 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 30. Oktober 2011
    While-Schleife in While-Schleife, Variable mitnehmen

    Hey Leute,

    ich habe eine While-Schleife verschachtelt in einer While-Schleife. In der innersten Schleife habe ich eine Variable, die ich gerne in der äußeren verwenden möchte.

    Beispiel:
    PHP:
    while()
            {        
            while()
                       {
                            
    $Variable1 ;
                       }        
                
    $Variable2 ;
            }
    Ich möchte also die $Variable1 an der Stelle von $Variable2 weiterverwenden!

    danke schonmal ;)
     

  2. Anzeige
    Heute: Deals & Sale mit stark reduzierten Angeboten finden.
  3. #2 30. Oktober 2011
    AW:
    PHP:
       While- Schleife in  While- Schleife Variable  mitnehmen [/ b ]

    Deklarier  die  Variable vor der Schleife

    [ php ]
    var 
    variable1 // php5 sollteste dann public oder private nehmen
    while()
            {        
            while()
                       {
                            
    $variable1 = xx ;
                       }        
                echo 
    $variable1 ;
            }  
     
  4. #3 30. Oktober 2011
    AW:
    PHP:
       While- Schleife in  While- Schleife Variable  mitnehmen [/ b ]

    das ist mein problem ich habe sie bereits vorher deklariert

    [ PHP ] $id  mysql_query ( "SELECT id FROM news" );
    $neue_id  mysql_num_rows ( $id );   // hier habe ich sie deklariert
    while()
            {        
            while()
                    {
                      
    $neue_id  $neue_id  1 ;   // hier habe ich sie verändert
                    
    }        
            echo 
    $neue_id ;   //hier gibt er sie so aus, wie vor der schleife deklariert
            
    }  

    PS: bin glaube im falschen Forum, gehört eig zur webentwicklung :oops:
     
  5. #4 30. Oktober 2011
    AW:
    PHP:
       While- Schleife in  While- Schleife Variable  mitnehmen [/ b ]

    [
    quote = "matzinho, post: 10615813" ] das ist mein problem ich habe sie bereits vorher deklariert
    [/ QUOTE ]

    Du kannst Sie ja anderst benennen außerdem felhlt bei der  While  Schleife  die  Abbruchbedingung
     
  6. #5 30. Oktober 2011
    AW:
    PHP:
       While- Schleife in  While- Schleife Variable  mitnehmen [/ b ]

    Abbruchbedinung existiert und funktioniert ist Hier bloß nicht aufgeführt weil sie ja eig nichts zur Sache tut .
     
  7. #6 30. Oktober 2011
    AW:
    PHP:
       While- Schleife in  While- Schleife Variable  mitnehmen [/ b ]

    Ok dann würd ich einfach mal gucken ob sich der Wert überhaupt in der inneren Schleife ändert ..  einfach mal  echo 'n und gucken was passiert. Kommt der da überhaupt richtig rein? Ohne kompletten Code kann man nur vermuten ^^
     
  8. #7 30. Oktober 2011
    AW: While-Schleife in While-Schleife, Variable mitnehmen

    Nur so ein (möglicherweise blöder) Gedanke hast du mal ein echo in die Innere Schleife gesetzt um zusehen ob sich die Variable tatsächlich verändert? Den ich sehe da kein Grund außer das er gar nicht erst in die innere Schleife springt. Ich gebe zu PHP Kenntnisse sind gering und ist schon eine Weile her. :oops:

    Edit da war einer schneller ^^
     
  9. #8 30. Oktober 2011
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: While-Schleife in While-Schleife, Variable mitnehmen

    hier der komplette code:
    PHP:
    <? php
    session_start
    ();

    $seite  $_GET [ "seite" ];   //Abfrage auf welcher Seite man ist

    //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
    if(!isset( $seite ))
       {
       
    $seite  1 ;
       }

    $verbindung  mysql_connect ( "localhost" "XXX"  "XXX" )
    or die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden" );
    mysql_select_db ( "XXX" ) or die ( "Datenbank konnte nicht ausgewählt werden" );
    mysql_set_charset ( "utf8" );  

    echo 
    "<h1>Beitrag editieren / löschen</h1>" ;
    echo 
    "<table text-align='center'>
          <colgroup>
          <col width='50'>
          <col width='80'>
          <col width='500'>
          <col width='35'>
          <col width='35'>
          </colgroup>
          <tr>
          <th text-align='center'>ID</th>
          <th text-align='center'>Datum</th>
          <th text-align='left' width='400px'>Titel</th>
          <th></th>
          <th></th>
          </tr>"
    ;
          
    //Einträge pro Seite: Hier 15 pro Seite
    $eintraege_pro_seite  5 ;

    //Ausrechen welche Spalte man zuerst ausgeben muss:

    $start  $seite  $eintraege_pro_seite  $eintraege_pro_seite ;

    $result  mysql_query ( "SELECT id FROM news" );
    $menge  mysql_num_rows ( $result );

    //Errechnen wieviele Seiten es geben wird
    $wieviel_seiten  $menge  $eintraege_pro_seite ;


    $abfrage  "SELECT * FROM news ORDER BY id DESC LIMIT  $start $eintraege_pro_seite " ;
    $ergebnis  mysql_query ( $abfrage );

    $id  mysql_query ( "SELECT id FROM news" );
    $neue_id  mysql_num_rows ( $id );

    //<--HIER BEGINNT DER WICHTIGE TEIL -->
    //<--HIER BEGINNT DER WICHTIGE TEIL -->
    //<--HIER BEGINNT DER WICHTIGE TEIL -->
    if ( $seite  ==  1 ) {                         //wenn man auf Seite 1 ist, soll er folgende Ausgabe machen (funktioniert, siehe Bild 1)
            
    while( $row  mysql_fetch_object ( $ergebnis ))
               {
               echo 
    "<tr>
                     <td>#
    $neue_id </td>
                     <td>
    $row -> datum </td>
                     <td>
    $row -> titel </td>
                     <td><a id='
    $row -> id ' href='ed_beitrag.php?id= $row -> id '><img src='img/edit.png' alt='E'></a></td>
                     <td><a id='
    $row -> id ' href='includes/delete_beitrag.php?id= $row -> id '><img src='img/delete.png' alt='D'></a></td>
                     </tr>"
    ;
                     
    $neue_id  $neue_id  1 ;
               }
    }
    else { 
        
    $akt_seite  2 ;
            
        for(
    $akt_seite  2 $akt_seite <= $wieviel_seiten $akt_seite ++){     //hier soll er, wenn er auf Seite 2 ist die Ausgabe machen (funktioniert. siehe Bild 2) 
                                                                           // auf seite 3,4,5 usw. nicht (hier erscheinen die selben IDs wie bei seite 2. siehe Bild 3)
                    
            
    $neue_id  $neue_id  $eintraege_pro_seite ;
          
                    
                        while(
    $row  mysql_fetch_object ( $ergebnis ))
                               {    
                                              echo 
    "<tr>
                                              <td>#
    $neue_id </td>
                                              <td>
    $row -> datum </td>
                                              <td>
    $row -> titel </td>
                                              <td><a id='
    $row -> id ' href='ed_beitrag.php?id= $row -> id '><img src='img/edit.png' alt='E'></a></td>
                                              <td><a id='
    $row -> id ' href='includes/delete_beitrag.php?id= $row -> id '><img src='img/delete.png' alt='D'></a></td>
                                              </tr>"
    ;
                                              
    $neue_id  $neue_id  1 ;
                                              
                                             
                               }
                               
                           
                               
        }       



    echo 
    "</table>" ;



    //Ausgabe der Seitenlinks:
    echo  "<div align=\"center\">" ;
    echo 
    "<p><b>Seite:</b> " ;


    //Ausgabe der Links zu den Seiten
    for( $a = 0 $a  $wieviel_seiten $a ++)
       {
       
    $b  $a  1 ;

       
    //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
       
    if( $seite  ==  $b )
          {
          echo 
    "  <b> $b </b> " ;
          }

       
    //Auf dieser Seite ist der User nicht, also einen Link ausgeben
       
    else
          {
          echo 
    "  <a href=\"?seite= $b \"> $b </a> " ;
          }


       }
    echo 
    "</p></div>" ;


    ?>
    Da die IDs in mysql nur einmalig vergeben werden und sobald man eine löscht eine Lücke entsteht, habe ich berechnen lassen, wie viele aktive IDs es momentan gibt, um sie lückenlos auszugeben.
    Auf Seite 1 gibt er es bereits korrekt aus (16,15,14,13,12). Jedoch hatte ich das Problem, dass er auf den anderen Seiten wieder von vorne anfängt, d.h. wieder (16,15,14,13,12) anstatt fortführend mit (11,10,9,8,7).
    Also subtrahiere ich mittels "$neue_id = $neue_id - $eintraege_pro_seite;" die anzahl der auf der Seite ausgegebenen einträge. --> auf seite 2 werden sie nun wieder korrekterweise forführend runtergezählt (11,10,9,8,7).
    Auf Seite 3 macht er den Schritt "$neue_id = $neue_id - $eintraege_pro_seite;" wieder, bloß subtrahiert er wieder von 16 die 5 ab und gibt wieder (11,10,9,8,7) aus anstatt (6,5,4,3,2).
    (ich vermute) es liegt daran, dass er in der innersten schleife der ausgabe bei folgedem schritt: "$neue_id = $neue_id - 1;" es zwar korrekt berechnet, aber die äußere schleife den wert von "$neue_id" der inneren schleife nicht beachtet.

    Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt :D

    bilder zur veranschaulichug:

    Bild 1 von Seite 1:
    [​IMG]

    Bild 2 von Seite 2:
    [​IMG]

    Bild 3 von Seite 3:
    [​IMG]

    danke!
     
  10. #9 30. Oktober 2011
    AW: While-Schleife in While-Schleife, Variable mitnehmen

    nutz doch AUTO_INCREMENT und schlag dich nicht selbst mit dem vergeben von id's rum.
     
  11. #10 30. Oktober 2011
    AW: While-Schleife in While-Schleife, Variable mitnehmen

    die ID in der SQL habe ich ja mit AUTO_INCREMENT

    wenn ich jedoch nen datensatz in meiner Datenbank habe:

    PHP:
    +--------------------------------------------------+
    ID  DATUM     TITEL             TEXT           |
    +--------------------------------------------------+
    1   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    2   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    3   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    4   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    5   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    und lösche jetzt zB die Zeile mit der ID 3 raus, dann rücken die andern IDs nicht um 1 hoch, sondern die ID bleibt für immer ungenutzt und die tabelle würde so aussehen:

    PHP:
    +--------------------------------------------------+
    ID  DATUM     TITEL             TEXT           |
    +--------------------------------------------------+
    1   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    2   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    4   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    5   30.10.11  Neue Website      Lorem ipsum    |
    +--------------------------------------------------+
    jetzt möchte ich aber, dass meine einträge durchnummeriert sind. Also zähle ich alle "benutzten" IDs und gebe sie abwärtszählend aus. Dadurch habe ich zu jedem Beitrage den ich ausgebe eine nummer, ohne lücken, welche entstehen würden, wenn ich direkt die ID aus der DB ausgebe.
    Vllt verwirrt es etwas weil ich diese "neue Nummerierung" in der variable "$neue_id" speicher.
     
  12. #11 30. Oktober 2011
    AW: While-Schleife in While-Schleife, Variable mitnehmen

    Ich habe das zwar nicht innerhalb von mysql_query() probiert, sondern direkt als MySQL-Query, aber ich denke das sollte trotdem funzen:
    PHP:
    SET  @ count  0 ;
    SELECT  *, @ count  := @ count  + AS  real_number FROM tabelle
    (@murdoc & andere sql-könner: mag evtl noch anders bzw. schöner gehen, aber ich hab kein Plan von Variable in SQL :))

    Damit erhälst du als real_number die echte Nummer des Beitrags...
    Damit hast du das ganze in PHP umgangen, sondern kriegst das direkt aus deinem Query raus..

    MfG
     
  13. #12 31. Oktober 2011
    AW: While-Schleife in While-Schleife, Variable mitnehmen

    PHP:
    SET  @ count  0 ;
    SELECT  *, @ count  := @ count  + AS  real_number FROM tabelle
    verstehe nicht ganz, wie ich das anwenden soll :rolleyes:

    habs jetzt so gelöst, dass ich folgendes vor der inneren schleife mache:

    PHP:
    if ( $seite  ==  $akt_seite ++) { $neue_id  $neue_id  0 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  5 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  10 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  15 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  20 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  25 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  30 ;}
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  35 ;}
    aber das ist ja nicht wirklich elegant, zumal dann nach einigen seiten schluss wäre..

    EDIT:

    habe ne saubere lösung gefunden, einfach noch ne schleife davor und in der die if abfrage wie in dem code oben ist, drinne ist..

    PHP:
    while( $akt_seite  &&  $akt_seite  <=  $wieviel_seiten
    {
    if (
    $seite  ==  $akt_seite ++) { $neue_id  $neue_id  $multi  5 ;}
    $multi ++;
    }
    danke an alle, BW's sind raus ;)
    ~closed~
     

  14. Videos zum Thema
Die Seite wird geladen...
Similar Threads - PHP While Schleife
  1. Antworten:
    0
    Aufrufe:
    3.394
  2. Antworten:
    14
    Aufrufe:
    998
  3. Antworten:
    6
    Aufrufe:
    536
  4. Antworten:
    11
    Aufrufe:
    770
  5. Antworten:
    5
    Aufrufe:
    459
  • Annonce

  • Annonce