Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zabawa z chechboxami
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Hej wszystkim.

Mam skrypt, w którym za pomocą zaznaczenia opcji 'checkbox' chcę wykonywać parę działań. Ale coś mi to wszystko nie chce działać.

Oto skrypt 'index.php':
  1. <?php
  2. require_once ('baza/db.php');
  3.  
  4. echo '<form action="action.php" method="POST">';
  5. echo '<p>Tabela testu <span style="font-weight:bold;">checkboxa</span>.</p>';
  6.  
  7. $sql = 'SELECT * FROM tab_test';
  8. $result = mysql_query($sql) or die(mysql_error());
  9. while ($row = mysql_fetch_array($result))
  10. {
  11. extract($row);
  12. echo '<div style="border: 1px solid #bbbbbb; margin-bottom: 3px;"><p>
  13. &nbsp '.$id.'.
  14. Status - <input type="checkbox" title="zmien status" name="update" /> |
  15. List - <input type="checkbox" title="wyslij list" name="e_mail" value="'.$e_mail.'" /> |
  16. '.$pole_1.' - '.$pole_2.' - ';
  17. if($stat==1)
  18. {
  19. echo 'status Opublikowany';
  20. }
  21. else
  22. {
  23. echo 'status Niepublikowany';
  24. }
  25. echo '</p></div>';
  26. }
  27. echo '<input type="checkbox" /> Zaznacz wszystkie osoby <br />';
  28. echo '<input type="submit" name="zmien" value="Zmien status">';
  29. echo '<input type="submit" name="napisz" value="Napisz list">';
  30. echo '</form>';


a to skrypt, gdzie przesyłane są dane:
  1. <?php
  2. require_once ('baza/db.php');
  3.  
  4. if(isset($_POST['wyslij']))
  5. {
  6. $tytul = mysql_real_escape_string(htmlspecialchars($_POST['tytul']));
  7. $tresc = mysql_real_escape_string(htmlspecialchars($_POST['tresc']));
  8.  
  9. if(empty($tytul) || empty($tresc))
  10. {
  11. echo 'Jedno z pól jest puste.';
  12. }
  13. else
  14. {
  15. ///Wysłanie listu. Pod ten adres zostanie wysłana wiadomosc
  16. $adresat = 'adresat@wp.pl'; //wybrane adresy osób z bazy
  17. $tytul = 'List z mojej strony';
  18. @$content = $_POST['tresc'];
  19. @$email = $_POST['e_mail'];
  20.  
  21. if (mail($adresat, $tytul, $content, $email))
  22. {
  23. $adresat = $_POST['osoby'];
  24. $sql_subs = "INSERT INTO tab_testa (tresc,osoby,data) VALUES ('$tresc','$osoby',CURDATE());";
  25. $result = mysql_query($sql_subs) or die(mysql_error());
  26. if($result)
  27. {
  28. echo 'Zapisano w bazie.';
  29. }
  30. else
  31. {
  32. echo 'Nie udało się zapisać do bazy.';
  33. }
  34.  
  35. echo '<p>Udało się</p><hr />';
  36. }
  37. }
  38. }
  39. else
  40. {
  41. echo '<p>Nie udało się wysłać listu.</p><hr />';
  42. }
  43.  
  44. ////////////////////////////////////////////////////////////////////
  45. if(isset($_POST['zmien']))
  46. {
  47. if(empty($_POST['update']))
  48. {
  49. echo 'Nie wybrano akcji.<br />';
  50. echo 'Wróć do <a href="index.php">Strony głównej</a>.';
  51. }
  52. else
  53. {
  54. $sql_update = "UPDATE tab_test SET stat='$stat'";
  55. $result = mysql_query($sql_update) or die(mysql_error());
  56.  
  57. if($result)
  58. {
  59. echo 'Udało się.<br />';
  60. echo 'Wróć do <a href="index.php">Strony głównej</a>.';
  61. }
  62. else
  63. {
  64. echo 'Nie udało się.<br />';
  65. echo 'Wróć do <a href="index.php">Strony głównej</a>.';
  66. }
  67. }
  68. }
  69. else if(isset($_POST['napisz']))
  70. {
  71. if(empty($_POST['e_mail']))
  72. {
  73. echo 'Nie wybrano adresu.<br />';
  74. echo 'Wróć do <a href="index.php">Strony głównej</a>.';
  75. }
  76. else
  77. {
  78. $_POST['e_mail'] = implode(', ', $_POST['e_mail']);
  79. echo '<form action="" method="POST">';
  80. echo '<div style="font-weight:bold;">Napisz list.</div>';
  81. echo 'Wybrane osoby - '.$_POST['e_mail'].' <br />';
  82. echo 'Wpisz tytul: <input type="text" name="tytul" /><br />';
  83. echo 'Napisz tresc: <br /><textarea rows="10" cols="20" name="tresc"></textarea><br />';
  84. echo '<input type="submit" name="napisz_list" value="Wyslij" /><br/>';
  85. echo '</form>';
  86. }
  87. }
  88.  
  89. ?>


Taki mam problem. Chcę aktualizować status użytkownika i choć instrukcja if - else działa [tzn. pokazuje info, że udało się], to w bazie nie zmieniło się nic, czyli polecenie UPDATE nie zadziałało. Chodzi mi też o wysyłanie listu, gdy klikam na wybrane osoby [dla przykładu mam dwie osoby], to chyba funkcja explode() działa tak, że powinna rozpisać te stringi przesyłane przez formularz, np. jasio@o2.pl, malgosia@o2.pl. A mi to nie działa, gdzie tu popełniłem błąd?
strife
Najlepiej wyświetl sobie to zapytanie (sprintuj je) a potem wklej do konsoli mysql i zobacz jakie masz błędy.
Jak używasz mysql_real_escape_string to już nie potrzebujesz htmlspecialchars.

No i ostatnie, mówisz coś o funkcji explode(), ale nigdzie jej nie widzę w kodzie : >
andrzejlechniak
Co do updatu to mam tak:
Status - zrobiłem jak radziłeś i kod działa tylko nic nie wykazuje...
  1. <input type="checkbox" title="zmien status" name="update" />


ale w pliku action.php dałem $stat = 1; co też nie wiele zmienia, bo zawsze jak zmieniam, to i tak zmienia się na wartość 1 [i to jest zrozumiałe], ew. można to zrobić za pomocą if -else, ale czy nie da się tak to napisać, aby automatycznie kod zmieniał na wartość odwrotną, np. gdy ma wartość 0 to zmienia na 1 i odwrotnie?

Co do adresów to zmieniłem trochę kod na:
  1. else
  2. {
  3. $email = $_POST['e_mail'];
  4. $adresy = (explode(', ',$email));
  5.  
  6. echo '<form action="" method="POST">';
  7. echo '<div style="font-weight:bold;">Napisz list.</div>';
  8. echo 'Wybrane osoby - '.$adresy.' <br />';
  9. echo 'Wpisz tytul: <input type="text" name="tytul" /><br />';
  10. echo 'Napisz tresc: <br /><textarea rows="10" cols="20" name="tresc"></textarea><br />';
  11. echo '<input type="submit" name="napisz_list" value="Wyslij" /><br/>';
  12. echo '</form>';
  13. }


co nie wiele zmienia, bo wyświetla się jedynie wiadomość, że jest to tablica.

Proszę, pomóżcie
Daimos
  1. $sql_update = "UPDATE tab_test SET stat='$stat'";

nic dziwnego, bo w kodzie który podałeś, nie ma nigdzie zdefiniowanej zmiennej stat, a chyba nie korzystasz z register globals. Oprócz tego, pole checkbox o nazwie stat nie ma żadnej wartości (value=)

Poczytaj trochę o debugowaniu kodu, zaczynając od vardumpów co linijka wink.gif przechwytywanie błędów, po różnego rodzaju firephp itp. Bez tego będziesz wiecznie błądził w kodzie i tracił czas na szukanie błędów
andrzejlechniak
Poczytam, poczytam. Zainstalowanie też jest pomysłem niezłym [już to zrobiłem]. Ale wracając do mojego problemu, cały czas kombinuję. Rozumiem, że każdy checkbox powinien przyjmować wartość, a więc zmieniłem checkboxa na:

  1. Status - <input type="checkbox" title="zmien status" name="update[]" value="'.$id.'" /> |


Podobnie sprawa ma się jeśli chodzi o adresy e-mail:

  1. List - <input type="checkbox" title="wyslij list" name="e_mail[]" /> |


Tylko czy też ten checkbox ma przyjmować wartość, chyba tak?

---

Może też chodzi o to, aby jeżeli wiele jest elementów takich samych, to w tablicy można je wyświetlać jako wartość przyjmując 'id' osoby, tylko teraz wyświetlić te elementy za pomocą explode(), bo to co napisałem wcześniej;

  1. else if(isset($_POST['napisz']))
  2. {
  3. if(empty($_POST['e_mail']))
  4. {
  5. echo 'Nie wybrano adresu.<br />';
  6. echo 'Wróć do <a href="index.php">Strony głównej</a>.';
  7. }
  8. else
  9. {
  10. $email = $_POST['e_mail'];
  11. $email_1 = (explode(', ',$email));
  12.  
  13. echo '<form action="" method="POST">';
  14. echo '<div style="font-weight:bold;">Napisz list.</div>';
  15. echo 'Wybrane osoby - '.$email_1.' <br />';
  16. echo 'Wpisz tytul: <input type="text" name="tytul" /><br />';
  17. echo 'Napisz tresc: <br /><textarea rows="10" cols="20" name="tresc"></textarea><br />';
  18. echo '<input type="submit" name="napisz_list" value="Wyslij" /><br/>';
  19. echo '</form>';
  20. }
  21. }


to chyba nie do końca jest dobre i w ogóle nie działa.
Daimos
  1. name="e_mail[]"

[] w nazwie, oznacza tablicę. Skoro wysyłasz tablicę, to po co dajesz później explode? Explode się robi na stringu
Druga sprawa, że explode zwraca tablicę, a Ty próbujesz to później wyświetlić w tekście
Więc lekcja debugowania nr. 1 - podstawy podstaw biggrin.gif
  1. $email = $_POST['e_mail'];
  2. // dostawiasz:
  3. var_dump($email);die();
  4. // sprawdzasz co było, podejmujesz działania w związku z tym lub nie i dalej:
  5. $email_1 = (explode(', ',$email));
  6. var_dump($email_1); die();
  7. // analogicznie :)
andrzejlechniak
Dobra, dzięki za cenną lekcję. Dodałem wartość:

  1. List - <input type="checkbox" title="wyslij list" name="e_mail[]" value="'.$e_mail.'" /> |


Zmieniłem znów:

  1. else
  2. {
  3. $email = $_POST['e_mail'];
  4. $email_1 = Array($email);
  5. echo $email_1;
  6.  
  7. echo '<form action="" method="POST">';
  8. echo '<div style="font-weight:bold;">Napisz list.</div>';
  9. echo 'Wybrane osoby - '.$email_1.' <br />';
  10. ...


i... wyświetla mi się info, że jest to tablica - po prostu Array, a nie wyciąga adresów, a o to mi chodziło.
Daimos
bo to tablica, wyświetl w pętli, albo użyj implode
  1. echo implode(', ',$email_1);
andrzejlechniak
Zrobiłem jak poradziłeś, ale efekt jest taki sam, a właściwie nie widzę zmian.

Już sobie poradziłem, ale dzięki wszystkim za dobre chęci. Pozdrawiam snitch.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.