Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL mehrere Zeilen Abfragen, Ändern und Speichern

Einklappen

Neue Werbung 2019

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

  • MySQL mehrere Zeilen Abfragen, Ändern und Speichern

    Mahlzeit. Ich habe einen kleinen Clan aber ein großes Problem. Wir sind zwar keine "Suchtis", haben dennoch 2 feste Trainings in der Woche. Um die Teilnahme der Spieler festzuhalten, möchte ich nun ein PhP-Script erstellen, welches Die Benutzer auflistet und für jeden Benutzer 3 Checkboxen generiert/anzeigt, in denen ich Teilgenommen/Abgemeldet/Fehlen eintragen kann. Anschließend soll das Script dann in der für jeden Benutzer markierten Checkbox +1 auf das entsprechende Datenbankfeld schreiben. Später soll man dann eine Liste aufrufen können, in der die Benutzer mit ihren teilgenommenden oder fehlenden Trainings angezeigt werden. Hört sich einfach an. Bis zur Auflistung und den Checkboxen hat es auch geklappt, aber weiter bin ich ratlos.

    Mein Problem: Mit dem Script was ich mir zusammengesucht und modifiziert habe, zählt er automatisch alle User/Zeilen der Tabelle auf, packt sie in die Liste und gibt jedem Benutzer Checkboxen. Die Checkboxen heißen aber bei allen Benutzern gleich, weil ja auch die Datenbankfelder bei allen gleich sind. Mit meinem Script kann ich (vermutlich) nichts machen, da ja jeder Benutzer eigene Checkboxen hat und der eine mal teilnimmt, der andere nicht.
    Ich hab auch schon versucht 3 verschiedene Multiselect-Formulare mit den Benutzernamen zu füllen, klappt aber auch nicht. =(

    Hat jemand eine Idee?

    Das bisherige Script sieht so aus:

    PHP-Code:
    <?

    $db="xxxx";

    $dbhost="mysql9.1blu.de";

    $dbuser="xxxx";

    $dbpass="xxxx";

    mysql_connect($dbhost,$dbuser,$dbpass);

    mysql_select_db($db);


    $select = "SELECT * FROM jos1518_cbe";
    $result = mysql_query($select);

    if($result){
     echo "<table>";
     while($row = mysql_fetch_array($result)){
      echo "<tr><td>Id</td><td>:</td><td>".$row['id']."</td></tr>";
      echo "<tr><td>Username</td><td>:</td><td>".$row['lastname']."</td></tr>";
      echo "<tr><td>Squad</td><td>:</td><td>".$row['cbe_squads_int']."</td></tr>";
      echo "<tr><td><INPUT type=checkbox name=cbe_pr_a value=1>Anwesend</td><td><INPUT type=checkbox name=cbe_pr_b value=1>Entschuldigt</td><td><INPUT type=checkbox name=cbe_pr_c value=1>Fehlt</td></tr>";
      echo "<tr><td>----------------</td><td>----------------</td><td>----------------</td></tr>";
     }
     echo "</table>";
    }

    mysql_close();

    ?>

  • #2
    MySQL mehrere Zeilen Abfragen, Ändern und Speichern

    Hallo und willkommen!

    Zitat von maling
    Die Checkboxen heißen aber bei allen Benutzern gleich
    Klar...du gibst allen Checkboxen ja auch immer den gleichen Namen:
    PHP-Code:
    (...)
    <
    INPUT type=checkbox name=cbe_pr_a value=1>Anwesend
    <INPUT type=checkbox name=cbe_pr_b value=1>Entschuldigt
    <INPUT type=checkbox name=cbe_pr_c value=1>Fehlt
    (...) 
    Du musst den Checkboxen mitteilen für welchen User ein Eintrag in der Datenbank gemacht werden soll.

    Und verwende bitte die BB-Tags hier im Forum, um den Code zu zeigen...sonst ist das recht unangenehm zu lesen.

    Vielleicht hilft dir das Beispiel hier: http://www.php-faq.de/q-formular-checkbox.html

    Kommentar


    • #3
      Ich bin kein PhP-Pro, aber ich denke mal die Namen so sind korrekt. Es gibt ja 3 DB-Felder, in denen je nach dem welche Checkbox markiert ist +1 gerechnet werden soll. Das Problem liegt den ich in der Abfrage, da sich ja die Anzahl und Namen der Benutzer ändern, kann ich keine feste Liste machen, sondern muss die Liste in der DB abfragen. In der While-Schleife tut die Aufzählung ja, nur kopiert er die Checkboxen mit den Namen zu jedem neuen Benutzer dazu.
      Wenn ich jetzt checkboxen markiere, beim ersten Benutzer z.B. mit Teilgenommen, dann den zweiten mit fehlend und anschließend Absende, müsste die Variable der Checkbox ja mit dem Wert des 2. Benutzers gefüllt sein.

      Und ich brauch irgendwas, wie er halt die Werte für jeden Benutzer einzelnd übernimmt und auch in die DB speichert, gleichzeitig aber die komplette Benutzerliste vorher aber aus der DB läd. Da hört aber mein Knowledge auf =(

      Kommentar


      • #4
        mein Vorschlag wäre - gib den Checkboxen keinen einfachen Namen, sondern einen Array-Bezeichner als Namen - HTML ist das egal und er reicht den Namen weiter, aber PHP kann mit dem Array was anfangen und erleichtert dir so die Zuordnung. Wenn du dann noch die ID des Datensatzes als Key der Arrays mitgibst, siehts richtig gut aus, die Datensätze zuzuordnen

        PHP-Code:
        echo '<tr><td><INPUT type="checkbox" name="cbe_pr_a['.$row['id'].']" value="1">Anwesend</td><td><INPUT type="checkbox" name="cbe_pr_b['.$row['id'].']" value="1">Entschuldigt</td><td><INPUT type="checkbox" name="cbe_pr_c['.$row['id'].']" value="1">Fehlt</td></tr>'
        auf diese Weise schlägst du gleich 2 Fliegen mit einer Klappe .. denn
        1) du identifizierst eindeutig, welche Checkbox zu welchen Vereinsmitglied gehört (ob nun Clan oder normaler Sportverein) und
        2) da nicht angekreuzte Checkboxen gar nicht übermittelt werden, hast du auf diese Weise trotzdem die eindeutige Zuordnung, wer da war und wer nicht ..

        du musst nun deine Verarbeitung nur umstellen, indem du die 3 Arrays nacheinander behandelst und so deine Datenbankbefehle generierst und absendest

        etwa so
        PHP-Code:
        $sql="UPDATE tabelle_teilnehmer SET teilgenommen=teilgenommen+1 WHERE teilnehmer_id in (";
        $keys=implode(",",$_POST['cbe_pr_a']);
        $sql.=$keys.")";
        $do=$mysql_query($sql);
        if (
        $do===FALSE
           echo 
        mysql_errno().mysql_error(); 
        analog für die anderen beiden Kategorien.

        Allerdings könnte es für später noch interessant sein, zu welchen Terminen wer nicht / oder da war - dann müsstest du aber wohl deine Tabellen etwas umstellen

        Kommentar


        • #5
          PHP-Code:
          <?
          mysql_connect($dbhost,$dbuser,$dbpass);

          mysql_select_db($db);

                   $sql="UPDATE jos1518_cbe SET cbe_pr_a = cbe_pr_a+1 WHERE id in (";
                   $keys=implode(",",$_POST['cbe_pr_a']);
                   $sql.=$keys.")";
                   $do=$mysql_query['$sql'];
                   if ($do===FALSE){
                      echo mysql_errno().mysql_error();
                      echo "FEHLER! Änderungen nicht durchgeführt!<br>"; }

                   else {
                   echo "Änderungen erfolgreich durchgeführt<br>";}

          mysql_close();

          Passiert leider nichts ausser Warning: implode() [function.implode]: Invalid arguments passed in /hp/ax/ac/fd/www/bc2/test/step2.php on line 13. Muss ich noch irgendwas ändern?

          Kommentar


          • #6
            w3c lässt grüßen.
            Es heißt nicht
            Code:
            <INPUT type=checkbox name=cbe_pr_b value=1>Entschuldigt
            sondern
            Code:
            <input type="checkbox" name="cbe_pr_b" value="1">Entschuldigt

            Kommentar


            • #7
              Und sinnvollerweise auch:
              Code:
              <input id="foo" type="checkbox" name="cbe_pr_b" value="1"><label for="foo">Entschuldigt</label>

              Kommentar

              Lädt...
              X