mysql, php + Datensatzzeiger in Schleife ändern

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

  • mysql, php + Datensatzzeiger in Schleife ändern

    Hallo ich bin hier neu und hoffe ihr könnt mir helfen. die SuFu brachte leider keine Lösung zu tage.

    Nunja ich habe folgendes Problem:

    hier mal mein Code:

    PHP-Code:
         $query "SELECT * FROM schichtplan WHERE Tag >= CURDATE() ORDER BY Tag ASC, KW DESC";
                    
    $result mysql_query($query);
                    
    $kwtest 47;
             
    $datensatz 0;
             
    $schleifendurchlauf 0;
             while (
    $ausgabe mysql_fetch_array($result))

                {
                        
                        
                    if(
    $kwtest == $ausgabe[6])
                        {
                            
                            
    setlocale(LC_TIME,"de_DE"); 
                            list(
    $year,$month,$day) = explode('-',$ausgabe[1]); 
                            
    $date mktime(0,0,0,$month,$day,$year); 
                            echo 
    "<tr>
                            <td width='5'></td>    
                            <td><font face='verdana' size='1px'>
    $ausgabe[6]</font></td>
                            <td><font face='verdana' size='1px'>
    $day.$month.$year "; echo strftime('%A',$date); 
                            echo 
    "</font></td>
                            <td><font face='verdana' size='1px'>
    $ausgabe[2]</font></td>
                            <td><font face='verdana' size='1px'>
    $ausgabe[3]</font></td>
                            <td><font face='verdana' size='1px'>
    $ausgabe[4]</font></td>
                            <td><font face='verdana' size='1px'>
    $ausgabe[5]</font></td>
                            </tr>"
    ;
                            
    $datensatz $datensatz+1;
                        }
                    else
                    {
                        echo 
    "<tr><td height='10'></td></tr>";
                        
    $kwtest=$kwtest 1;
                        
                    }            
                } 
    Nun zu meinem Problem, die Abfrage funktioniert soweit.
    Jedoch wie in dem Script zu sehen springt er automatisch wenn die $kw == $ausgabe[6] FALSE ergibt, in die else abfrage und lässt den einen Datensatz komplett aus.

    ein Beispiel:

    Datenbank schichtplan
    DSZ = Datensatzzeiger
    DZ = Datensatz
    KW = Kalenderwoche

    DSZ 0 | DZ 1 | KW 47
    DSZ 1 | DZ 2 | KW 47
    DSZ 2 | DZ 3 | KW 47
    DSZ 3 | DZ 4 | KW 47
    ----------------------------------
    bis hierhin funktioniert alles
    jedoch ab KW 48 gibt meine IF Abfrage ja FALSE aus und lässt DSZ 4 bzw DZ 5 komplett aus und macht dann, da ich $kw um 1 erhöht habe ja bei DZS 5 und DZ6 weiter.
    DSZ 4 | DZ 5 | KW 48
    DSZ 5 | DZ 6 | KW 48
    DSZ 6 | DZ 7 | KW 48
    DSZ 7 | DZ 8 | KW 48

    Nun wollte ich ein script schreiben welches den DZS um diesen einen Datensatz verringert, jedoch beiss ich da immerwieder auf granit, entweder die Schleife wird 3455099x durchlaufen (was echt sehr lang dauert) oder ich bekomme einen Fehler.

    ich habe auch schon versucht mit mysql_data_seek zu arbeiten, aber genau das is mein problem:

    PHP-Code:

    else
                    {
                        
    $datensatz $datensatz-1;
                                            echo 
    "<tr><td height='10'></td></tr>";
                        
    $kwtest=$kwtest 1;
                                            
    mysql_data_seek($result,$datensatz)
                        
                    } 
    Weiss jemand von euch vielleicht ein Script wie ich das realiseren kann?

    Ich hoffe das ihr mir helfen könnt.

    mfg

    mysilent

  • #2
    Woher soll man bitte erkennen, was in ausgabe[6] drin steht?

    darüber hinaus verstehe ich dein Problem nicht wirklich. Liegt vielleicht auch an den fehlenden den Ansätzen (die du zumindest nicht gepostet hast...)

    Kommentar


    • #3
      in $ausgabe[6] steht immer die jeweilige KW aus der Datenbank

      wie gesagt mein Problem ist, das er wenn die KW in der if Abfrage nicht mehr übereinstimmt, diesen einen Datensatz auslässt und automatisch die leere Zeile einfügt. Nun hatte ich vor diesen einen Datensatz zurückzuspringen und die fehlende Zeile auch noch anzuzeigen.

      Bei der Abfrage fehlt immer bei der 48,49... usw KW der Montag.

      ich hoffe ich hab das jetzt mal verständlich gepostet

      mfg

      mysilent

      Kommentar


      • #4
        wie gesagt mein Problem ist, das er wenn die KW in der if Abfrage nicht mehr übereinstimmt, diesen einen Datensatz auslässt und automatisch die leere Zeile einfügt. Nun hatte ich vor diesen einen Datensatz zurückzuspringen und die fehlende Zeile auch noch anzuzeigen.
        Was soll das denn?

        Warum zeigst du den Datensatz zunächst nicht an, um ihn im nächsten Schritt dann doch anzuzeigen?

        Mir scheint, als wäre dein Problem die logische Konzeption und nicht das Programmieren...

        Kommentar


        • #5
          naja,

          das problem ist, ich wollte nach einer kompletten KW einen Absatz machen ebend

          if (47 == 47)

          {
          ausgabe;
          }
          else
          {
          leerzeile
          }

          und genau dabei lässt er eine Zeile aus (was ich ja nicht beabsichtige)

          mfg

          mysilent

          Kommentar


          • #6
            das problem ist, ich wollte nach einer kompletten KW einen Absatz machen ebend
            Dann mach das doch!!!

            if (47 != 47)
            {
            leerzeile
            }

            Rest du. Soviel sollte man wirklich hinbekommen, wenn man kommerziell arbeitet.

            Kommentar


            • #7
              ich weiss ich stell mich etwas dumm an

              aber bin noch net so weit in php, deswegen bin ich ja hier

              so?

              while ($ausgabe = mysql_fetch_array($result))

              {

              setlocale(LC_TIME,"de_DE");
              list($year,$month,$day) = explode('-',$ausgabe[1]);
              $date = mktime(0,0,0,$month,$day,$year);
              echo "<tr>
              <td width='5'></td>
              <td><font face='verdana' size='1px'>$ausgabe[6]</font></td>
              <td><font face='verdana' size='1px'>$day.$month.$year "; echo strftime('%A',$date);
              echo "</font></td>
              <td><font face='verdana' size='1px'>$ausgabe[2]</font></td>
              <td><font face='verdana' size='1px'>$ausgabe[3]</font></td>
              <td><font face='verdana' size='1px'>$ausgabe[4]</font></td>
              <td><font face='verdana' size='1px'>$ausgabe[5]</font></td>
              </tr>";

              if($Kwtest != $ausgabe[6])
              {
              <tr><td></td></tr>
              }


              weil genau da macht er ja dann bei kw 47!=48 einen absatz
              aber leider bei 47!=49 usw auch

              Kommentar


              • #8
                Ich glaube nicht, dass es was mit PHP zu tun hat. Du scheiterst einfach am logischen Denken.

                WANN willst du einen Absatz? Definiere mir ALLE Fälle. Gerne auch allgemein.

                Kommentar


                • #9
                  Kann ich dienen konfusen Problembeschreibungen entnehmen, dass du einfach nach jedem Wochenwechsel eine Leerzeile einfügen willst?
                  PHP-Code:
                  <?php
                  $query 
                  "SELECT 
                      <attribut_1>,
                      <attribut_2>.
                      ....
                      <attribut_5>,
                      kalenderwoche
                  FROM 
                      schichtplan 
                  WHERE 
                      Tag >= CURDATE() 
                  ORDER BY 
                      Tag ASC, KW DESC"
                  ;
                  $result mysql_query($query);
                  $kwtest date('W'); // aktuelle Woche
                  while ($ausgabe mysql_fetch_array($result)){
                        if(
                  $kwtest != $ausgabe[6]) {
                              echo 
                  "<tr><td colspan='6'>&nbsp;</td></tr>"// Leerzeile
                              
                  $kwtest $ausgabe[6];
                        }
                        
                  setlocale(LC_TIME,"de_DE"); 
                        
                  ist($year,$month,$day) = explode('-',$ausgabe[1]); 
                          
                  // Rest der Ausgabe....   
                  }
                  ?>
                  Gruss
                  H2O

                  Kommentar

                  Lädt...
                  X