Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Nie zmienia danych funkcja UPDATE
Forum PHP.pl > Forum > Przedszkole
JakubSTR
Witam mam formularz dodawania do bazy członków. Jest w nim kilka pól typu checkbox. Dodawanie działa bez zarzutu. Stworzyłem nawet formularz wyświetlania z możliwością edycji. I tu rodzi się problem, bo nie mogę zapisać zmiany w przypadku odznaczenia pola checkbox. Nie wyrzuca błędu.
Niżej przedstawiam uproszczoną wersję formularza i plików wykonawczych.

formularz dodawania:
  1. <form name="form_dodaj" id="form_dodaj" class="appnitro" method="post" action="add_czlonki.php" enctype="multipart/form-data">
  2. <table border="0" width="800px">
  3. <tr>
  4. <td>
  5. <input id="kierowca" name="kierowca" class="element checkbox" type="checkbox" value="1" /> Kierowca<br>
  6. </td>
  7. </tr>
  8. <tr>
  9. <td colspan="2" class="srodek">
  10. <input id="dodaj" class="button_text" type="submit" name="submit" value="Dodaj członka" />
  11. </td>
  12. </tr>
  13. </form>



plik add_czlonki.php
  1. <?
  2. require("connection.php");
  3. connection();
  4. $kierowca=$_POST['kierowca'];
  5. //dodawanie do bazy
  6. $query = "INSERT INTO `testowo` (czl_kierowca) VALUES ('$kierowca')";
  7. $result = @mysql_query($query);
  8. if ($result){ //jezeli nie wystąpiły żadne blędy
  9. $message .= 'Twoje dane zostały dodane do bazy';
  10. }else{
  11. $message .= 'Wystąpił błąd. Przepraszamy za utrudnienia<br />';
  12. }
  13. //dodawanie pliku koniec
  14. echo "Dane kontrolne: <br>";
  15. if(isset($message)){
  16. echo $message;
  17. echo "<br><br>";
  18. echo $result;
  19. echo "<br><br>";
  20. echo $query;
  21. echo "<br>";
  22. }
  23. ?>


Plik edycji:
  1. <?php
  2. require("connection.php");
  3. connection();
  4. $id=$_GET['id'];
  5. $wynik = mysql_query("SELECT * FROM testowo WHERE id=$id")
  6. or die("Błąd zapytania");
  7. $r = mysql_fetch_assoc($wynik);
  8. if(mysql_num_rows($wynik) > 0) {
  9. $kierowca=$r['czl_kierowca']; if ($kierowca == '1') {$kierowca='checked="checked"';}
  10. }
  11. ?>
  12. <div style="width: 800px; align: center:">
  13. <form name="form_dodaj" id="form_dodaj" class="appnitro" method="post" action="edytuj_zapisz.php?id=<? echo $id; ?>" enctype="multipart/form-data">
  14. <table border="0" width="800px">
  15. <tr>
  16. <td>
  17. <input id="kierowca" name="kierowca" <? echo $kierowca; ?> class="element checkbox" type="checkbox" value="" /> Kierowca<br>
  18. </td>
  19. </tr>
  20. <tr>
  21. <td colspan="2" class="srodek">
  22. <input id="dodaj" class="button_text" type="submit" name="submit" value="Zatwierdź edycję" />
  23. </td>
  24. </tr>
  25. </form>
  26. </div>
  27. </body>



Plik wykonawczy edytuj_zapisz.php
  1. <?
  2. require("connection.php");
  3. connection();
  4. $id=$_GET['id'];
  5. $kierowca=$_POST['kierowca'];
  6. //dodawanie do bazy
  7. $query = "UPDATE czlonkowie SET czl_kierowca='$kierowca' WHERE czl_id = '$id'";
  8. $result = @mysql_query($query);
  9. if ($result){ //jezeli nie wystąpiły żadne blędy
  10. $message .= 'Twoje dane zostały zmienione w bazie';
  11. }else{
  12. $message .= 'Wystąpił błąd. Przepraszamy za utrudnienia<br />';
  13. }
  14. //dodawanie pliku koniec
  15. echo "Dane kontrolne: <br>";
  16. if(isset($message)){
  17. echo $message;
  18. echo "<br><br>";
  19. echo $result;
  20. echo "<br><br>";
  21. echo $query;
  22. echo "<br>";
  23. }
  24. ?>


Prosiłbym o pomoc jak rozwiązać ten problem lub jak go obejść. Dodam, że tych checkbox'ów jest ok 30 i są potrzebne w tej bazie danych.
tehaha
Cytat
nie mogę zapisać zmiany w przypadku odznaczenia pola checkbox.
no bo checkbox przesyła swoją wartość tylko jak jest zaznaczony, rozumiem, że zapisujesz stan 0 lub 1, dla niezaznaczonego checkboxa, więc najprościej będzie dodać rzutowanie na int wtedy przy braku zmiennej pojawi się tam 0.

  1. $kierowca=(int)$_POST['kierowca'];


P.S. poczytaj o sql injection bo Twój skrypt jest dziurawy
JakubSTR
Nie do końca działa: teraz nie ważne w jakim stanie jest checkbox to daje wartość = 0.
W każdym przypadku występuje wynik: "UPDATE testowo SET czl_kierowca='0' WHERE id = '4'"

Pomińmy fakt, że plik edytuj_zapisz.php odwołuje się do innej tabeli - poprawiłem to u siebie, niestety nie mogę wyedytować postu.

tehaha
dostajesz zero bo w pliku z formularzem edycji masz puste value -> value="" powinno być value="1"
JakubSTR
I to działa, dzięki wielkie biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.