checkbox-Werte in db schreiben

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

  • checkbox-Werte in db schreiben

    Also, ich habe folgende Tabelle:

    FondsNr lfd_nr status
    799121 155 1
    799121 156 1
    799121 157 0
    ... ... .

    1 gibt an, daß die checkbox angehackt ist
    0 bedeutet, die checkbox war nicht angehackt.
    Mit dem nachfolgenden Script kann ich problemlos alle Datensätze auslesen und entsprechend des "Statuswertes" 1 oder 0 die checkboxen "anchecken" oder eben nicht (http://www.rok.formativ.net/form1.php?kurz=799121).
    Mein Problem ist jetzt: Wie bekomme ich nun geänderte checkboxen inkl. FondsNr und lfd_nr mit replace wieder in die Datenbank zurück ??? (Ich hänge hier irgendwie fest.)

    P.S: Die FondsNr sollte bei meinem form übrigens nicht mit ausgegeben werden - nicht daß ihr denkt, ich hätte das vergessen. Die FondsNr wird per Url an die Select-Abfrage übergeben. Bitte keine Lösung mit auto increment, da auch andere FondsNr mit einem anderen Nummernkreis bezüglich der lfd_nr in diese Tabelle geschrieben werden. Ich brauche also für jede checkbox einen eigenen Datensatz.
    Der replace-Befehl soll in die "streichen.php".


    <html>
    <head>
    <?php
    include("connect.inc.php");
    echo '<title>Fondsdatenbank '.$release.'</title>';
    ?>
    </head>
    <?php
    // Verbindung aufbauen, auswählen einer Datenbank
    $link = mysql_connect($mysqlhost, $mysqluser, $mysqlpasswd)
    or die("Keine Verbindung möglich!");
    mysql_select_db($mysqldbname)
    or die("Auswahl der Datenbank fehlgeschlagen");
    // ausführen einer SQL Anfrage
    $result1 = mysql_query("SELECT Fonds AS 'Fonds',Konto AS 'Konto',Kürzel AS 'Kürzel',FondsNr AS 'FondsNr',lfd_nr AS 'lfd_nr',status AS 'status' FROM dritt_fonds AS A LEFT OUTER JOIN streichliste AS B ON A.Konto=B.FondsNr WHERE Konto=799121 ORDER BY lfd_nr ASC");
    echo '<form action="streichen.php" method="post">';
    echo '<table border=1>';
    // Ausgabe des Tabellenkopfes
    echo '<tr><td ALIGN=center colspan="2"><FONT SIZE=2 FACE=ARIAL><B>'.$kurz.'</B></FONT></td></tr>';
    // Ausgabe der Tabellenzeilen
    while ($line=mysql_fetch_array($result1)) {
    if ($line['status']==1){ echo '<tr><td>'.$line['lfd_nr'].'</td><td><INPUT type="checkbox" name="box['.$i.']" value="1" checked></td></tr>'; }
    else { echo '<tr><td>'.$line['lfd_nr'].'</td><td><INPUT type="checkbox" name="box['.$i.']" value="1"></td></tr>'; }
    }
    echo '</table>';
    ?>
    <input type=submit value="streichen"></form>
    </html>

    Weiß hier irgendjemand weiter ?

  • #2
    So is kürzer:

    PHP-Code:
    <?php
    $i
    =0;
    while (
    $line=mysql_fetch_array($result1)) {
    ?>
        <tr>
            <td><?=$line["lfd_nr"]?></td>
            <td><input type="checkbox" name="box[<?=$i?>]" value="1"<?=$line["status"]==1?" checked=\"checked\"":""?> /></td>
        </tr>
    <?php
        $i
    ++;
    }
    ?>
    und schöner ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      ich bin zwar noch etwas grün, was php mit mysql angeht, aber vielleicht kann ich dir eine denkanregung geben.

      in deiner tabelle gibt es bestimmt einen primärschlüssel. wenn dieser im formular mit ausgegeben wird in der art id=$primärschlüssel, dann wäre in jeder zeile eine eindeutige zuweisung möglich.

      in dem durch das formular aufgerufene script könnte dann eine abfrage nach dem prinzip

      UPDATE tabelle SET checkbox=wert WHERE id=Primärschlüssel

      erfolgen .
      Wenn diese noch in eine Schleife eingepackt wird, könnte das funktionieren.

      wie geschrieben, ich bin kein profi, keine ahnung ob das funzt aber vielleicht hat es dir ja geholfen

      viel glück jj

      Kommentar


      • #4
        Etwas ausgereifter ... als Lösungsansatz ...

        index.php
        PHP-Code:
        <html>
            <head>
        <?php
        include("connect.inc.php");
        echo 
        '<title>Fondsdatenbank '.$release.'</title>';
        ?>
            </head>
            <body>
                <form action="streichen.php" method="post">
                <table border=1>
        <?php
        // Verbindung aufbauen, auswählen einer Datenbank
        $link mysql_connect($mysqlhost$mysqluser$mysqlpasswd) or die("Keine Verbindung möglich!");
        mysql_select_db($mysqldbname) or die("Auswahl der Datenbank fehlgeschlagen");

        // ausführen einer SQL Anfrage
        if ( $result1 mysql_query("SELECT Fonds, Konto, `Kürzel`, FondsNr, lfd_nr, status FROM dritt_fonds A LEFT OUTER JOIN streichliste B ON A.Konto=B.FondsNr WHERE Konto=799121 ORDER BY lfd_nr ASC") ) {

        // Ausgabe des Tabellenkopfes
        ?>
                        <tr>
                            <td align="center" colspan="2"><font size="2" face="arial"><b><?=$kurz?></b></font></td>
                        </tr>
        <?php
        // Ausgabe der Tabellenzeilen
        $i=0;
        while (
        $line=mysql_fetch_array($result1)) {
        ?>
                        <tr>
                            <td><?=$line["lfd_nr"]?></td>
                            <td>
                                <input name="Fonds[<?=$i?>]" type="hidden" value="<?=$line["FondsNr"]?>" />
                                <input name="LfdNr[<?=$i?>]" type="hidden" value="<?=$line["lfd_nr"]?>" />
                                <input type="checkbox" name="box[<?=$i?>]" value="1"<?=$line["status"]==1?" checked=\"checked\"":""?> />
                            </td>
                        </tr>
        <?php
                $i
        ++;
            }
        }
        ?>
                    </table>
                    <input type=submit value="streichen">
                </form>
            </body>
        </html>
        streichen.php
        PHP-Code:

        ...

        $records="";
        foreach ( 
        $_POST["Fonds"] AS $key=>$value ) {
            
        $records.=($records==""?"":",")."(".$value.",".$_POST["LfdNr"][$key].",".( isset($_POST["box"][$key]) ? "1" "0" ).")";
        }

        mysql_query("REPLACE INTO [tabelle] (FondsNr, lfd_nr, status) VALUES $records");

        ... 
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          @goth: Das ist wohl die hohe Schule der Programmierkunst. Den Ausdruck "?=.............?" kannte ich bislang noch nicht. Kannst du hierzu noch ein paar Erläuterungen machen ?

          @jochenj: Genau das ist prinzipiell der Weg.
          Ich weiß halt eben nur nicht wie ich mein form modifizieren muß, um die Variablen an "streichen.php" übergeben zu können. Ich glaub' das geht auch irgendwie mit 'm array. Weiß aber nix konkretes ?

          Kommentar


          • #6
            http://www.php.net/manual/en/languag...syntax.phpmode

            <?="WURST"?> ist 'ne Kurzform von <?php echo "WURST"; ?>
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              Da war goth ja mal wieder superschnell. Thanks. Ich versuch mal, ob ich damit klar komme. Sieht aber sehr gut aus !

              Kommentar


              • #8
                Hallo goth,

                bin jetzt vorerst mal bei meiner Syntax geblieben. Aber irgendwie funzt der "isset-Befehl" nicht. Da stimmt wohl irgendwas an der Syntax nicht. Ne Idee ???

                <INPUT type="hidden" name="Fonds['.$i.']" value='.$line['FondsNr'].'>
                <INPUT type="hidden" name="LfdNr['.$i.']" value='.$line['lfd_nr'].'>
                <INPUT type="checkbox" name="box['.$i.']" value="1" (isset '.$line['status'].'==1 ? " checked" : "")></td></tr>';

                Kommentar


                • #9
                  Original geschrieben von Honny
                  Hallo goth,

                  bin jetzt vorerst mal bei meiner Syntax geblieben. Aber irgendwie funzt der "isset-Befehl" nicht. Da stimmt wohl irgendwas an der Syntax nicht. Ne Idee ???

                  <INPUT type="hidden" name="Fonds['.$i.']" value='.$line['FondsNr'].'>
                  <INPUT type="hidden" name="LfdNr['.$i.']" value='.$line['lfd_nr'].'>
                  <INPUT type="checkbox" name="box['.$i.']" value="1" (isset '.$line['status'].'==1 ? " checked" : "")></td></tr>';
                  isset() prüft ob eine Variable gesetzt ist ... die brauchst Du in diesem Falle nur im streichen.php ...

                  <INPUT type="checkbox" name="box['.$i.']" value="1"'.( $line['status']==1 ? " checked" : "" ).'>

                  sollte hier funzen ...
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    Vielen Merci !

                    Kommentar


                    • #11
                      OK, ich will jetzt noch folgende Funktionalität hinzufügen:

                      Zusätzlich zu den "lfd_nr", die ich mir per querry aus der DB hole, sollen weitere checkboxen generiert werden bei denen die "lfd_nr" jeweils um eins hochgezählt wird (z. B. weitere 10 checkboxen). Diese weiteren checkboxen sollen ebenfalls "anhackbar" sein u. jeweils als neuer Datensatz angelegt werden, sobald der "Streichen-Button" gedrückt wurde. Die letzte "lfd_nr" aus der DB wird quasi 10 mal um eins hochgezählt.
                      Weiß jemand, wie man das hinkriegt ??? (http://www.rok.formativ.net/form1.php)

                      Mit dem nachfolgenden Code kann die zusätzliche checkbox "158" leider keinen DB-Eintrag erzeugen.

                      form1.php:


                      echo '<form action="streichen.php" method="post">';
                      echo '<table border=1>';
                      // Ausgabe des Tabellenkopfes
                      echo '<tr><td ALIGN=center colspan="2"><FONT SIZE=2 FACE=ARIAL><B>'.$kurz.'</B></FONT></td></tr>';
                      // Ausgabe der Tabellenzeilen

                      while ($line=mysql_fetch_array($result1)) {
                      echo '<tr><td>'.$line['lfd_nr'].'</td>
                      <td>
                      <INPUT type="hidden" name="Fonds['.$i.']" value='.$line['FondsNr'].'>
                      <INPUT type="hidden" name="LfdNr['.$i.']" value='.$line['lfd_nr'].'>
                      <INPUT type="checkbox" name="box['.$i.']" value="1" '.($line['status']==1 ? " checked" : "").'></td></tr>';
                      }
                      echo '<tr><td>158</td>
                      <td>
                      <INPUT type="hidden" name="Fonds['.$i.']" value='.$line['FondsNr'].'>
                      <INPUT type="hidden" name="LfdNr['.$i.']" value="158">
                      <INPUT type="checkbox" name="box['.$i.']" value="1" '.($line['status']==1 ? " checked" : "").'></td></tr>';
                      echo '</table>';
                      ?>
                      <input type=submit value="streichen"></form>



                      streichen.php:


                      <?php
                      // Verbindung aufbauen, auswählen einer Datenbank
                      $link = mysql_connect($mysqlhost, $mysqluser, $mysqlpasswd)
                      or die("Keine Verbindung möglich!");
                      mysql_select_db($mysqldbname)
                      or die("Auswahl der Datenbank fehlgeschlagen");

                      $records="";
                      foreach ( $_POST["Fonds"] AS $key=>$value ) {
                      $records.=($records==""?"":",")."(".$value.",".$_POST["LfdNr"][$key].",".( isset($_POST["box"][$key]) ? "1" : "0" ).")";
                      }

                      mysql_query("REPLACE INTO streichliste (FondsNr, lfd_nr, status) VALUES $records");

                      ?>

                      Kommentar


                      • #12
                        goth,

                        wie sieht 's aus ? Kannst du mir weiterhelfen ?

                        Kommentar


                        • #13
                          goth,

                          hab' doch Erbarmen !

                          Kommentar

                          Lädt...
                          X