Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Checkbox-Fomular schreibt nur ersten Datensatz in Tabelle

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Checkbox-Fomular schreibt nur ersten Datensatz in Tabelle

    Hallo,
    ich bin gerade dabei ein PHP-Script zu schreiben über das ich Datensätze aus der PHP-Datei in eine mysql-Tabelle schreiben will.

    Dabei habe ich das Problem dass beim Eintragen in die Datenbank nur der erste Datensatz in die DB eingetragen wird die ausgewählt wurde.

    Es sollten aber alle ausgewählten DBs aus den Checkboxen in die Tabelle eingetragen werden.

    ----CHECKBOX-FORMULAR----
    <tr>
    <td>
    <?php echo $A1;?> <input type="checkbox" name="team" value="$A1" />
    </td>
    <td>
    <?php echo $B1;?> <input type="checkbox" name="team" value="$B1" />
    </td>
    <td>
    <?php echo $C1;?> <input type="checkbox" name="team" value="$C1" />
    </td>
    <td>
    <?php echo $D1;?> <input type="checkbox" name="team" value="$D1" />
    ----/CHECKBOX FORMULAR\----

    ----SCRIPT-DATEI----
    <?php

    include ('include/connect.php');

    if(isset($_POST['team'])) {
    $team = $_POST['team'];


    $sql = "INSERT INTO team_select VALUES (NULL, '$team')";
    $query = mysql_query($sql);
    }
    ?>
    ----/SCRIPT-DATEI\----

    Kann mir wer sagen wo da der Fehler liegt?
    Oder muss ich da irgendwo eine Schleife einbauen damit er alle Datensätze schreibt?

    Vielen Dank für eure Hilfe,
    Ratte

  • #2
    Checkbox-Fomular schreibt nur ersten Datensatz in Tabelle

    Hi,

    bitte verwende CODE-Tags, um den Code im Forum ordentlich darzustellen, liest sich nicht schön.
    Zitat von Ratte723
    Kann mir wer sagen wo da der Fehler liegt?
    Klar...du verwendest den Index team für alle 4 Checkboxen, daher kann immer nur ein Eintrag verwendet werden. Verwende dafür ein Array und werte in einer Schleife die Einträge aus, um in einem SQL-Statement in die Datenbank zu schreiben.

    Und wenn du dich gerade erst mit PHP und MySQL beschäftigst, verwende bitte mysqli oder PDO, die mysql-Erweiterung ist seit PHP-Version 5.5.0 veraltet und wird in Zukunft entfernt.
    Delirius

    PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

    Kommentar


    • #3
      Wenn du allen Checkboxen den gleichen Namen gibst...

      Und
      Code:
      value="$A1"
      möchtest du doch auch nicht wirklich, oder?
      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

      Kommentar


      • #4
        PHP-Code:
        <input type="checkbox" name="team[]" value="..." /> 
        Damit erstellst du ein Array bei mehreren checked. Per foreach schleife löst du dann den rest.

        php.net foreach

        Kommentar


        • #5
          Danke erstmal für die rasche antwort.
          Das hilft mir in erster linie schon mal weiter,
          wo muss ich da das array genay setzen? in der tabelle oder in der script datei?
          bzw. welche schleife sollte ich da am besten verwenden? while?
          damit ich weiß wo ich mich noch durchlesen muss.

          Sorry wenn ich das nicht so ganz schnall, das mit den CODE-Tags weiß ich nicht wie das geht, und das mit den arrays da blick ich noch nicht so ganz durch.

          @uha:
          nein, ich will dass jede ausgewählte checkbox einen eigenen eintrat in der DB erzeugt.

          Kommentar


          • #6
            Das Array wird automatisch erstellt im Input Feld. Das kannst du anhand der print_r($_POST) oder var_dump($_POST) funktion überprüfen.

            PHP-Code:
            foreach($_POST['team'] as $val) {
                 echo 
            $val.'<br />'//ein test, damit du siehst, das er die schleife automatisch durchgeht
                 
                 
            $sql "INSERT INTO team_select VALUES (NULL, $val)";
                 
            $query mysql_query($sql);

            Kommentar


            • #7
              Checkbox-Fomular schreibt nur ersten Datensatz in Tabelle

              Bitte nicht den Code von Condor93 verwenden, das kann gefährlich enden --> SQL-Injection

              Und wie gesagt, steig´ bitte gleich auf mysqli oder PDO um.
              Zitat von Ratte723
              damit ich weiß wo ich mich noch durchlesen muss.
              So schwer das immer für Neulinge zu verkraften ist, aber beschäftige dich mit den Grundlagen, damit ist dir am Besten geholfen und du wirst sehr schnell verstehen, was du wo zu tun hast.
              Delirius

              PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

              Kommentar


              • #8
                perfekt, genau das hab ich gesucht.
                also in script sein.
                du bist auf jeden fall mein hero of the day.
                vielen vielen dank,
                ratte

                Kommentar


                • #9
                  Zitat von Delirius Beitrag anzeigen
                  Bitte nicht den Code von Condor93 verwenden, das kann gefährlich enden --> SQL-Injection
                  Das ist ja wohl normal da muss er sich selber herausfinden.

                  Kommentar


                  • #10
                    Checkbox-Fomular schreibt nur ersten Datensatz in Tabelle

                    Zitat von Condor93
                    Das ist ja wohl normal
                    Tja, das ist aber das Problem.
                    Zitat von Ratte723
                    perfekt, genau das hab ich gesucht. also in script sein.
                    Jetzt wird er den von dir geposteten Code 1 zu 1 übernehmen. Auch der Hinweis auf mysqli / PDO wird dann dezent ignoriert. Das sollte man versuchen zu verhindern.
                    Delirius

                    PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

                    Kommentar


                    • #11
                      wo genau sind die unterschieden zwischen mysqli und PDO?
                      wenn ich von mysql umsteige müsste ich bei mysqli doch nur die "tags"(ist warscheinlich der falsche begriff, egal, ihr wisst was ich meine) von mysql bzw. sql, auf mysqli bzw. sqli ändern oder?

                      ich hab mir da mal so ein PDO-Ding angeschaut, das scheint sich doch etwas zu unterscheiden.

                      Kommentar


                      • #12
                        Code:
                        <?php
                        
                        include ('include/connect.php');
                        
                        if(isset($_POST['team'])) {
                        $team = $_POST['team'];
                        
                        
                        $sql = "INSERT INTO team_select VALUES (NULL, '$team')";
                        $query = mysql_query($sql);
                        }
                        ?>
                        Wahnsinn, ist doch schon einige Jahre das ich sowas gesehen hab

                        Zu deiner Frage:
                        http://code.tutsplus.com/tutorials/p...use--net-24059
                        Während mysqli sich nur auf mySQL bezieht, bietet PDO mehrere Treiber für verschiedene Datenbanken.

                        Und nein, ein einfaches "mysql_query zu mysqli_query" reicht nicht. Wenn du dir PDO (bzw. mysqli) genauer ansiehst, wirst du sehen warum.

                        Kommentar


                        • #13
                          ok, lassen wir das mal, es funktioniert wie es soll und es heißt ja "never touch a running system" also beschäftige ich mich damit wenn das projekt "fertig" ist. aber jetzt muss ich zu einer weiteren frage kommen:
                          ich lasse mir die daten jetzt auf einer anderen php-seite auslesen.
                          dabei ist mir aufgefallen dass die einträge mit $X auch so angezeigt werden. statdessen soll aber eigentlich das dargestellt werden was unter $X per php definiert ist. geht das nicht oder muss ich da was spezielles beachten?

                          Kommentar


                          • #14
                            PDO:
                            Choosing an API
                            Warum man mysql* generell nicht (mehr) nutzen sollte.
                            Wie man von mysql* auf PDO umsteigt
                            Wissenswertes zum Thema SQL-Injection

                            Hinweis:

                            Der schließende Tag eines PHP-Blocks am Ende einer Datei ist optional. In einigen Fällen ist das Weglassen hilfreich:
                            • Es können ungewollte Whitespaces am Ende einer Datei auftreten, durch die ein späteres setzen von headern be-/verhindert werden kann.
                            • Außerdem verhindert dies, dass beim Output Buffering Whitespaces am Ende eines durch die eingebundenen Dateien erzeugten Parts.
                            • Im PSR Standard (PSR-2) ist ?> sogar ausdrücklich verboten, wenn in einer Datei ausschliesslich PHP verwendet wird (2.2 Files).

                            Kommentar


                            • #15
                              Checkbox-Fomular schreibt nur ersten Datensatz in Tabelle

                              Zitat von Ratte723
                              ok, lassen wir das mal, es funktioniert wie es soll und es heißt ja "never touch a running system" also beschäftige ich mich damit wenn das projekt "fertig" ist.
                              Ganz falscher Ansatz. Und mit Verlaub...solche Aussagen liest man ständig. So lange der Code irgendwie funktioniert, braucht man auch nichts ändern. Bis tatsächlich was passiert und dann ist das Gejammer groß.

                              Tu´ dir selbst den Gefallen und nimm´ die Ratschläge an. Ändere deinen Code und achte auf SQL-Injection. Und lerne die Grundlagen, deine letzte Frage lässt erkennen, dass dir einiges an Wissen fehlt.
                              Delirius

                              PHP - Grundlagen / PDO - Tutorial / PDO - Dokumentation

                              Kommentar

                              Lädt...
                              X