Jak pobrać dane z formularza

Odpowiedz Nowy wątek
2019-01-05 12:20
0

Witam! Tworzę stronę i mam następujący problem. Muszę masowo pobrać wartości checkboxów i wysłać je do bazy danych. Totalnie nie mam pomysłu jak to zrobić i w jakim języku. Proszę o pomoc/wskazówkę/rozwiązanie.

Próbowałem tak:
Nadałem checkboxom id w pętli w php.

for ($i = 1; $i<=$ile_rekordow; $i++)
                            {
                                $zapytanie = $polaczenie -> query("SELECT * FROM klasa2 WHERE nr_dziennik = $i");
                                $dane = $zapytanie -> fetch_assoc();

                                    echo '<table border = 1 rules = all><tr><td style = "width: 160px">'; echo $dane["imie_nazwisko"];    echo"</td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.'id = "1_'.$i.'"'; if ($dane["wrzesien"] == 1)     echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "2_'.$i.'"';    if ($dane["pazdziernik"] == 1)  echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "3_'.$i.'"';    if ($dane["listopad"] == 1)     echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "4_'.$i.'"';    if ($dane["grudzien"] == 1)     echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "5_'.$i.'"';    if ($dane["styczen"] == 1)      echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "6_'.$i.'"';    if ($dane["luty"] == 1)         echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "7_'.$i.'"';    if ($dane["marzec"] == 1)       echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "8_'.$i.'"';    if ($dane["kwiecien"] == 1)     echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "9_'.$i.'"';    if ($dane["maj"] == 1)          echo "checked ";echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox"'.' id = "10_'.$i.'"';   if ($dane["czerwiec"] == 1)     echo "checked ";echo"></td>";

                                echo "</tr>";
                                echo'</table>';
                            }

A następnie onclick() submita w formularzu wykonało by skrypt.

for (i = 1; i<=24; i++)
            {
                for (j = 1; j<=10; j++)
                {
                    document.getElementById(j+"_"+i).checked;

                }
            }

Nie dość, że nie działało albo odczytywanie wartości, albo nadawanie id, to jeszcze nie mam zielonego pojęcia jak miałbym przesłać dane z jsa do bazy.

edytowany 1x, ostatnio: Bartosz Żelek, 2019-01-05 12:28

Pozostało 580 znaków

2019-01-05 14:56

Tworzysz sobie podstawowy formularz w PHP i generujesz sobie potrzebne checkboxy. Zwróć uwagę na to jak te checkboxy powinny być tworzone, nadaj im właściwe atrybuty value w zależoności od tego co chcesz przesyłać: https://developer.mozilla.org[...]b/HTML/Element/input/checkbox
Potem to już obróbka otrzymanych danych w skrypcie PHP i zapis do bazy. Na obecnym etapie nie widać potrzeby użycia JS.

Pozostało 580 znaków

2019-01-06 10:59
0
jurek1980 napisał(a):

Tworzysz sobie podstawowy formularz w PHP i generujesz sobie potrzebne checkboxy. Zwróć uwagę na to jak te checkboxy powinny być tworzone, nadaj im właściwe atrybuty value w zależoności od tego co chcesz przesyłać: https://developer.mozilla.org[...]b/HTML/Element/input/checkbox
Potem to już obróbka otrzymanych danych w skrypcie PHP i zapis do bazy. Na obecnym etapie nie widać potrzeby użycia JS.

Dzięki z całego serducha, ale zrobiłem to trochę inaczej. Pokażę kod (bardzo nieelegancki), działa, ale myślisz, że można zrobić coś lepiej?

<form method = "post">
                <?php

                    if ($_SESSION['administrator']==1)
                    {
                        if ($zapytanie = $polaczenie -> query("SELECT * FROM klasa2"))
                        {
                            $ile_rekordow = $zapytanie -> num_rows;
                            for ($i = 1; $i<=$ile_rekordow; $i++)
                            {
                                $zapytanie = $polaczenie -> query("SELECT * FROM klasa2 WHERE nr_dziennik = $i");
                                $dane = $zapytanie -> fetch_assoc();

                                    echo '<table border = 1 rules = all><tr><td style = "width: 160px">';echo $dane["imie_nazwisko"];                       echo"</td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "1_'.$i.'"';if ($dane["wrzesien"] == 1)       echo 'checked'; echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "2_'.$i.'"';if ($dane["pazdziernik"] == 1)    echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "3_'.$i.'"';if ($dane["listopad"] == 1)       echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "4_'.$i.'"';if ($dane["grudzien"] == 1)       echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "5_'.$i.'"';if ($dane["styczen"] == 1)        echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "6_'.$i.'"';if ($dane["luty"] == 1)           echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "7_'.$i.'"';if ($dane["marzec"] == 1)         echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "8_'.$i.'"';if ($dane["kwiecien"] == 1)       echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "9_'.$i.'"';if ($dane["maj"] == 1)            echo 'checked';echo"></td>";
                                    echo'<td class = "larger"><input type = "checkbox" name = "10_'.$i.'"';if ($dane["czerwiec"] == 1)      echo 'checked';echo"></td>";

                                echo "</tr>";
                                echo "</table>";

                            }

                        }
                        else
                        {
                            echo "Coś poszło nie tak :/";
                        }
                        echo '<input type = "submit" name = "submit" value = "Zapisz">';
                    }

                ?>
</form>
                <?php
                if (isset($_POST['submit']))
                {

                    $teraz = [10];
                        for ($i = 1; $i<=$ile_rekordow; $i++)
                        {
                                for ($j = 1; $j<=10; $j++)
                                {

                                    if (isset($_POST[$j."_".$i])) 
                                    {
                                        $teraz[$j-1] =  "1";
                                    }
                                    else 
                                    {
                                        $teraz[$j-1] = "0";
                                    }

                                }                                   

                            $wyslanie_danych = "UPDATE klasa2 SET wrzesien = {$teraz[0]}, pazdziernik = {$teraz[1]}, listopad = {$teraz[2]}, grudzien = {$teraz[3]}, styczen = {$teraz[4]}, luty = {$teraz[5]}, marzec = {$teraz[6]}, kwiecien = {$teraz[7]}, maj = {$teraz[8]}, czerwiec = {$teraz[9]} WHERE nr_dziennik = $i"; //przede wszystkim to mnie kłuje w oczy
                            $polaczenie -> query($wyslanie_danych);
                            echo '<meta http-equiv="refresh" content="0">';
                        }
                }
                ?>

Pozostało 580 znaków

2019-01-06 14:21
0

Lepiej jak lepiej. To rzecz sporna.
Ja dałbym miesiące jako tablica i tworząc te checkboxy iterował tablicę miesięcy. Wtedy generację tej części HTMLa masz w 3 liniach pętli. Wszystkie zmienne nazywałbym po angielsku i unikał nazw typu "teraz" na rzecz jakiegoś czytelniejszego opisu np. "submited". Ten update też możesz sobie zrobić na jakichś tablicach. Mając tablicę miesięcy możesz jej przypisać wartości przesyłanych przez POST.
Popatrz sobie na coś takiego (pisane na kolanie, dostosuj sobie do potrzeb).

<?php
echo '<form method="POST">';
$dane["imie_nazwisko"] ='kazik iksinski';
$dane["wrzesien"] ='1';
$dane["pazdziernik"] ='5';
$months = ['wrzesien','pazdziernik'];
echo '<table border = 1 rules = all><tr><td style = "width: 160px">';
echo $dane["imie_nazwisko"];
echo"</td>";
foreach ($months as $month){
    //Jak tworzysz checkbox to zrob tak, zeby miec od razu tablice w wyniku
    echo'<td class = "larger"><input type = "checkbox" name = "'.$dane["imie_nazwisko"].'['.$month.']'.[$dane[$month]].'"';
    if ($dane[$month] == 1){
        echo "checked";
    }       
    echo"></td>";
}                                
echo "</tr>";
echo "</table>";
echo '<input type="submit" name="submit">';
echo '</form>';

if(isset($_POST['submit'])){
    var_dump($_POST);
    //na koniec zrob sobie update z uzyciem przygotowanej tablicy
}
edytowany 1x, ostatnio: jurek1980, 2019-01-06 14:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0