Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL] Nie zmienia danych funkcja UPDATE
JakubSTR
post 30.01.2011, 18:18:31
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 26.01.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 18:31:15
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
JakubSTR
post 30.01.2011, 19:30:04
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 26.01.2011

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 19:40:57
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


dostajesz zero bo w pliku z formularzem edycji masz puste value -> value="" powinno być value="1"
Go to the top of the page
+Quote Post
JakubSTR
post 30.01.2011, 19:49:39
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 26.01.2011

Ostrzeżenie: (0%)
-----


I to działa, dzięki wielkie biggrin.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:41