Ankündigung

Einklappen
Keine Ankündigung bisher.

[Problem] Checkbox setzt Wert "1" oder "0&

Einklappen

Neue Werbung 2019

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

  • [Problem] Checkbox setzt Wert "1" oder "0&

    Hallo PHP-Freunde,

    habe ein Formular, dass Spalten aus der Tabelle ausliest.
    Eine Spalte davon heißt cb_status. Hier gibt es nur zwei Werte, einmal Null und Eins. Ist die Spalte Null, soll die ganze Zeile nicht angezeigt werden, wenn diese Eins ist, dann doch.
    Dies wird durch Checkboxen umgesetzt. Ist die Checkbox aktiviert, ist die Spalte 1, ansonsten 0.

    Leider habe ich das Problem, dass die Zuordnung nicht stimmt, trotz allen Angaben.

    Hier mal der Code.
    Formular 1
    PHP-Code:
    <form name="01" method="post" action="02.php">
    <?
    echo '


    <table width="700" border="1" cellspacing="0" cellpadding="3">
    <tr>
    <td class="Stil4">AB*</td>
    <td class="Stil4">Parameter</td>
    <td class="Stil4">Parameterwert</td>
    </tr>';
    for($z=0;$z<count($bezeichner);$z++)
    {
    if($cb_status=="1")
    {
    echo"<input type="checkbox" name="status[]" value="'.$cb_zustand[$z].'" checked>";
    }
    else
    {
    echo "<input type="checkbox" name="status[]" value="'.$cb_zustand[$z].'" checked>";
    }
    echo'
    test=1;
    echo'
    <td width="300" class="Stil3">'.$bezeichner[$z].'</td>        
    <td width="400" class="Stil4"><input type="text" size="65" name="wert[]" value="'.$wert[$z].'" readonly="readonly"></td>
    </tr>';
    }
            
    echo '<input type="button" onclick="history.back()" value="Zurück">
    <input type="submit" name="gesendet" value="Weiter"></td>
    </tr></table>';
    Alle Arrays werden mit POST ins andere Formular geschickt und so in die Datenbank geschrieben:

    PHP-Code:
    if(isset($_POST['status']))
    {
    for(
    $z=0;$z<count($pos);$z++)
    {
    $query_para "UPDATE tabelle SET tabelle.cb_status = '1'
    WHERE tabelle.id = '"
    .$id[0]."'
    AND tabelle.position = '"
    .$pos[$z]."'
    AND tabelle.werteid= '"
    .$werteid[$z]."'
    AND tabelle.prdkat_id = '"
    .$prdkat[$z]."'";
    $result=mysql_query($query_para); 
    }
    }
    echo 
    mysql_error(); 
    Wo könnte der Hacken liegen?

    Gruß.

  • #2
    1. Du siehst schon am Syntax-Highlighting, dass da im ersten Script ein Syntaxfehler ist
    2. Rücke deinen Code vernünftig ein, so kann man den ja nicht lesen
    3. Das eigentliche Probelm dürften die Register_globals sein. Aber genauer sehe ich mir den Code erst an, wenn Punkt 2 erfüllt ist

    Kommentar


    • #3
      Leider kann ich meine Eingabe nicht editieren, also nochmal hier zusammengerückt.

      Formular 1
      PHP-Code:
      echo 

       
      <table width="700" border="1" cellspacing="0" cellpadding="3"> 
      <tr> 
      <td class="Stil4">AB*</td> 
      <td class="Stil4">Parameter</td> 
      <td class="Stil4">Parameterwert</td> 
      </tr>'

      for(
      $z=0;$z<count($bezeichner);$z++) 

          if(
      $cb_status=="1"
          { 
              echo
      "<input type="checkbox" name="status[]" value="'.$cb_zustand[$z].'" checked>"
          } 
              else 
              { 
                  echo 
      "<input type="checkbox" name="status[]" value="'.$cb_zustand[$z].'" checked>"
              } 
          echo

          test=1; 
          <td width="300" class="Stil3">'
      .$bezeichner[$z].'</td>         
          <td width="400" class="Stil4"><input type="text" size="65" name="wert[]" value="'
      .$wert[$z].'" readonly="readonly"></td> 
          </tr>'


               
      echo 
      '<input type="button" onclick="history.back()" value="Zurück"> 
      <input type="submit" name="gesendet" value="Weiter"></td> 
      </tr></table>'

      Alle Arrays werden mit POST ins andere Formular geschickt und so in die Datenbank geschrieben:

      PHP-Code:
      if(isset($_POST['status']))
      {
          for(
      $z=0;$z<count($pos);$z++)
          {
              
      $query_para =  "UPDATE tabelle SET tabelle.cb_status = '1'
                              WHERE tabelle.id = '"
      .$id[0]."'
                              AND tabelle.position = '"
      .$pos[$z]."'
                              AND tabelle.werteid= '"
      .$werteid[$z]."'
                              AND tabelle.prdkat_id = '"
      .$prdkat[$z]."'";
              
      $result=mysql_query($query_para); 
          }
      }
      echo 
      mysql_error(); 
      P.S. Das ist nur ein Ausschnitt aus einem riesenzeiler an Code. Dieser funktioniert ohne Probleme. Der gepostete der hinzugefügt wurde hat dann nicht mehr richtig funktiuoniert...

      Gruß.

      Kommentar


      • #4
        Ok Punkt 2 hast du korrigiert, Punkt 1 teilweise. Du kannst mir erzählen, was du willst, aber Zeilen wie:
        PHP-Code:
        <?php
        echo"<input type="checkbox" name="status[]" value="'.$cb_zustand[$z].'" checked>";
        können nicht funktionieren. Also mach daraus ein
        PHP-Code:
        <?php
        echo"<input type='checkbox' name='status[]' value='$cb_zustand[$z]' checked='checked'>";
        oder so ähnlich.
        Was allerdings diese Abfrage ($cb_status == '1') mit dem anschliessend genau gleichen Code bei true und false soll verstehe ich auch nicht.
        Und dann stellt sich bei mir einfach die Frage, woher all diese Variablen im zweiten Script kommen. $_POST['status'] ist ja noch klar, ist allerdings eine Array, und von daher wahrscheinlich immer gesetzt. Aber $pos, $id, $pos, $werteid, $prdkat? keine Ahnung
        Dafür werden alle im Formular gesetzten Variablen nachher nirgends mehr gebraucht.

        Kommentar


        • #5
          Auch beachten musst du das nicht gecheckete Checkboxen auch nicht übergeben werden.
          Sprich wenn nicht alle Checkboxen gecheckt sind stimmt die Zuordnung auch nicht mehr, daher musst du einen festen Index vergeben:

          PHP-Code:
          echo '...<input type="checkbox" name="status['.$z.']" ...'

          Kommentar


          • #6
            Zitat von Varon
            ... daher musst du einen festen Index vergeben
            Hat er ja

            Kommentar


            • #7
              Moin,

              also dein Vorschlag ist so nicht ganz stimmig.
              PHP-Code:
              echo"<input type='checkbox' name='status[]' value='$cb_zustand[$z]' checked='checked'>"
              PHP wirft folgende Errormessage aus: "Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in..."
              Die Zeile von mir funktioniert, das ist nicht meine erste und diese macht auch das was sie machen soll.
              Mit $cb_status==1 mache ich eine Abfrage. Denn $cb_status wird oben als die Tabellenspalte definiert mit dem Wert 1 oder 0 ist. Wenn die Spalte den Wert eins hat, dann ist das Feld checked.
              Die Arrays $pos, $id, $pos, $werteid, $prdkat sind bei mir vergeben und werden auch rübergeschickt. Habe nur einen Auszug aus dem Code gepostet, sonst wird das hier zu übersichtlich ... was ich aber auch bereits als P.S. geschrieben habe...

              Kommentar


              • #8
                Ist ja klar, da der Abstand zwischen echo und dem String fehlt. Das habe ich allerdings so von dir übernommen. Und da bei die funktioniert, was nicht funktioniern kann, hast du wohl übersinnliche Fähigkeiten und dürftest kaum Hilfe benötigen. Deshalb klinke ich mich aus dieser Diskussion aus.

                Kommentar


                • #9
                  Bitte was für ein Abstand?? Ist auch egal ... eine große Hilfe scheinst du hier nicht zu sein...

                  Kommentar


                  • #10
                    Zitat von lazydog
                    Zitat von Varon
                    ... daher musst du einen festen Index vergeben
                    Hat er ja
                    Mag sein das ich irgendetwas falsch deute oder mich einfach nur missverständlich ausgedrückt.
                    Aber als Feldname bei der Checkbox haben wir hier:
                    Code:
                    name='status[]'
                    Und das wird nacher im Post-Array kein fester Index sein, der Index richtet sich nach der Anzahl der gecheckten Checkboxen.

                    Bsp:
                    PHP-Code:
                    print_r($_POST['status']);
                        echo 
                    '<form method="post" action="'.$_SERVER['SCRIPT_NAME'].'">';
                        echo 
                    '<input type="checkbox" name="status[]" value="1">';
                        echo 
                    '<input type="checkbox" name="status[]" value="2">';
                        echo 
                    '<input type="checkbox" name="status[]" value="3">';
                        echo 
                    '<input type="submit" value="submit">';
                        echo 
                    '</form>'
                    Mögliche Ausgaben von print_r
                    Code:
                    Array ( [0] => 1 [1] => 2 [2] => 3 ) 
                    Array ( [0] => 2 [1] => 3 ) 
                    Array ( [0] => 3 ) 
                    Array ( [0] => 1 ) 
                    etc...

                    Kommentar


                    • #11
                      Das Problem ist aber, dass die Checkboxen automatisch generiert werden. Es gibt soviele Checkboxen, wie es Tabellenspalten gibt. In meinem Fall vorerst 120 Stück. Da kann ich schlecht das value festbelegen. Habe aber auch schon für das value ein Array genommen namens $position. Dieses geht von 1 bis 120 durchnummeriert (auto_increment) die Zeilen druch. Hat aber auch nicht geklappt... so langsam bin ich mit meinem Latein am Ende.

                      Kommentar


                      • #12
                        Du brauchst doch nur den Indexfestbelegen dann stimmt auch wieder die Zuordnung.

                        PHP-Code:
                        ... name="status['.$z.']" value="'.$cb_zustand[$z].'" ...
                        //---------------------^^^^^^ 

                        Kommentar


                        • #13
                          Übers value gehts auch:
                          PHP-Code:
                          <?
                          $aStatus = $_POST['status']

                          while ($aSet = mysql_fetch_...)
                            {
                            $iIndex = $aSet['ID']; // unique ID !
                            $sChecked = in_array ($iIndex , $aStatus) ? ' checked="checked" ' : '';
                            echo '<input type="checkbox" ' .$sChecked. ' name="status[]" value="' .$iIndex. '" />';
                            }

                          Kommentar

                          Lädt...
                          X