Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: checkbox
Forum PHP.pl > Forum > PHP
przemysuaw
Mam problem z checkboxem.

Mam listę użytkowników i przy każdym jest checkbox.
Pod spodem jest formularz.

Chodzi mi o to, by wypełnić formularz i wysłać do zaznaczonych użytkowników. (Wysyłam do bazy danych, a nie maila).
Czyli poprzez zapytanie INSERT.
Przy okazji dobrze byłoby pod spodem dać jeszcze jeden checlbox po zaznaczeniu którego zaznaczają się wszystkie, a po odznaczeniu odznaczają.

Michael2318
Co do zaznaczenia wszystkich checkbox - google > javascript checkbox - zaznacz wszystkie
Co do wysyłania wiadomości do userów, przy których zaznaczono checkbox - przy wyświetlaniu userów, nadajesz każdemu taki checkbox:
  1. <input type="checkbox" name="send_pw[]" value="TUTAJ_ID_DANEGO_USERA">


Od strony php:
  1. foreach($_POST['send_pw'] AS $ideki)
  2. {
  3. if ( empty($_POST['send_pw']) )
  4. {
  5. continue;
  6. }
  7. $sql = "INSERT INTO `tabela` (`pw_user_id`) VALUES (".$ideki.")";
  8. if ( !($result = mysql_query($sql)) )
  9. {
  10. die('error in sql<br>'.mysql_error());
  11. }
  12. }
przemysuaw
Jeszcze tylko taki mały problem, bo chce wstawić do dwóch tabel:
- wiadomosc
- uzytkownik
połączone one są poprzez użytkownik_id
Michael2318
To wstaw najpierw do tabeli 'wiadomosc', a potem do tabeli uzytkownik, korzystajac z funkcji mysql_insert_id() co zwróci ci ostatnio stworzone ID w mysql (w tym wypadku id tej wiadomosci).
przemysuaw
wystąpił błąd: Undefined index: send_wiad
oraz
wystąpił błąd: Invalid argument supplied for foreach()
KOD:
  1. <input type="checkbox" name="send_wiad[]" value='.$row['firma_id'].'>
  2. foreach($_POST['send_wiad'] as $firma ) {
  3. if(empty($_POST['send_wiad']) ) {
  4. continue;
  5. }
  6. $q="INSERT INTO wiadomosc (temat, tresc_wiad) VALUES ('$t', '$tresc_wiad')";
  7. $r=mysqli_query($dbc,$q);
  8. if(mysqli_affected_rows($dbc)){
  9. $wiadomosc_id=mysqli_insert_id($dbc);
  10. $q="INSERT INTO wiadomosc_f (firma_id, wiadomosc_id) VALUES ('$firma', '$wiadomosc_id')";
  11. $r=mysqli_query($dbc,$q);
  12. if(mysqli_affected_rows($dbc)){
  13. $q="INSERT INTO wiadomosc_a (admin_id, wiadomosc_id) VALUES ('$admin_id', '$wiadomosc_id')";
  14. $r=mysqli_query($dbc,$q);
  15. if(mysqli_affected_rows($dbc)){
  16. echo'<p> Wiadomości zostały wysłane</p>';
  17. } else {
  18. echo'<p> Nie wstawiono do tabeli wiadomosc_a </p>';
  19. }
  20. } else {
  21. echo'<p> Nie wstawiono do tabeli wiadomosc_f </p>';
  22. }
  23. } else {
  24. echo'<p> Nie wstawiono do tabeli wiadomosc </p>';
  25. }
  26. }//Koniec pętli foreach wysyłającej wiadomość do zaznaczonych
Michael2318
spróbuj tak:
  1. if ( isset($_POST['send_pw']) )
  2. {
  3. foreach($_POST['send_pw'] AS $ideki)
  4. {
  5. if ( empty($_POST['send_pw']) )
  6. {
  7. continue;
  8. }
  9. $sql = "INSERT INTO `tabela` (`pw_user_id`) VALUES (".$ideki.")";
  10. if ( !($result = mysql_query($sql)) )
  11. {
  12. die('error in sql<br>'.mysql_error());
  13. }
  14. }
  15. }
przemysuaw
dodałem do formularza ukryte pole o nazwie checkboxa i już ten problem nie wyskakuje
  1. <input type="hidden" name="send_wiad[]" value="'.$row['firma_id'].'"/>
  2.  
  3. ale pojawił sie kolejny
  4.  
  5. trim() expects parameter 1 to be string, array given
  6.  
  7. zanim wysyłam dane formularza obcinam zbędne białe znaki
  8. $trimmed=array_map('trim',$_POST);
  9.  
  10. $temat_wiadomosci=$trimmed['temat']
  11. $tresc_wiadomosci=$trimmed['tresc_wiad']
  12.  
  13. i oczywiście później
  14. wystąpił błąd: Undefined variable: temat_wiadomosci
  15. wystąpił błąd: Undefined variable: tresc_wiadomosci




Mayka
To jest ostrzezenie, a nie błąd.
  1. wystąpił błąd: Undefined variable: temat_wiadomosci
  2. wystąpił błąd: Undefined variable: tresc_wiadomosci


To znaczy ze do php nie wysłałeś nic postem i te dwie zmienne nie mają wartości. Wiec coś jeszcze jest nie tak

A gdzie masz funkcje trim() ?
przemysuaw
zmienna:
$trimmed=array_map('trim',$_POST);
definiowana jest na samym początku przed wysłaniem formularza,

a po wysłaniu:

$trimmed['temat_wiadomosci'];
$trimmed['tresc_wiadomosci'];



Teraz wyskakuje
trim() expects parameter 1 to be string, array given

a przecież ani temat ani tresc wiadomosci nie sa tablicami, chyba
Mayka
Dobrze ale gdzie masz funkcje trim ?
zobacz var_dump ($trimmed['tresc_wiadomosci']) ; co tu jest ?
przemysuaw
Wynik var_dump ($trimmed['tresc_wiad']) ;
string 'gdbfsda' (length=7)

Może żeby było jaśniej.

Pobieram i wyświetlam dane z bazy danych w postaci listy i to działa:
- wyświetlają się dane oraz checkboxy z numerem id firmy.

  1. //Tabela
  2. echo'<table align="center" cellspacing="0" cellpadding="5" width=75%>
  3. <tr> <td align="left"></td>
  4. <td align="left"> <b>Info</b></td>
  5. <td align="left"> <b>Edytuj</b></td>
  6. <td align="left"> <b>Usuń</b></td>
  7. <td align="left"><b><a href="lista_firm.php?sort=nazwa">Nazwa Firmy</a></b></td>
  8. <td align="left"><a href="lista_firm.php?sort=email_f"> <b>Adres email</b></a></td>
  9. <td align="left"><a href="lista_firm.php?sort=wojewodztwo"> <b>Województwo</b></a></td>
  10. <td align="left"><a href="lista_firm.php?sort=data_rejestracji"><b>Data rejestracji</b></a></td>
  11. <td align="left"><b><a href="lista_firm.php?sort=konto">Konto</a></b></td></tr>';
  12. //Wybierz i pokaż wszystkie rekordy
  13. while ($row=mysqli_fetch_array($r, MYSQLI_ASSOC)) {
  14. echo'<tr> <td align="left"><input type="checkbox" name="send_wiad[]" value='.$row['firma_id'].'/>'.$row['firma_id'].'</td>
  15. <td align="left"><a href="info_firma.php?firma_id='.$row['firma_id'].'">Info</a></td>
  16. <td align="left"><a href="edytuj_firme.php?firma_id='.$row['firma_id'].'">Edytuj</a></td>
  17. <td align="left"><a href="usun_firme.php?firma_id='.$row['firma_id'].'">Usuń</a></td>
  18. <td align="left">'.$row['nazwa'].'</td>
  19. <td align="left">'.$row['email_f'].'</td>
  20. <td align="left">'.$row['wojewodztwo'].'</td>
  21. <td align="left">'.$row['data_rejestracji'].'</td>
  22. <td align="left">'.$row['konto'].'</td></tr>' ;
  23. } //Koniec pętli while
  24. echo'</table>';


Następnie zaznaczam checkboxy wpisuję temat i tresc wiadomosci i wysyłam.
Wiadomość dociera tylko do pierwszego z listy.
Wysyłanie:
  1.  
  2. //Wstawianie dla każdego zaznaczonego wiersza (firmy)
  3. foreach($_POST['send_wiad'] as $firma ) {
  4. if(isset($_POST['send_wiad']) ) {
  5. $q="INSERT INTO wiadomosc_f (firma_id, wiadomosc_id) VALUES (".$firma.", '$wiadomosc_id')";
  6. $r=mysqli_query($dbc,$q);
  7. if(mysqli_affected_rows($dbc)>=1){
  8. echo'<p> Wiadomości zostały wysłane</p>';
  9. } else {
  10. echo'<p> Nie wstawiono do tabeli wiadomosc_f </p>';
  11. }
  12. }else{
  13. echo'<p> Nie istnieje zmienna $_POST[\'send_wiad\'] </p>';
  14. }
  15. } //Koniec pętli foreach wysyłającej wiadomość do zaznaczonych


Acha no i w tabeli wiadomosc_f zawsze wstawia w firma_id=0
Michael2318
  1. //Wstawianie dla każdego zaznaczonego wiersza (firmy)
  2. if ( isset($_POST['send_wiad']) )
  3. {
  4. foreach($_POST['send_wiad'] as $firma )
  5. {
  6. if( intval($_POST['send_pw']) > 0 )
  7. {
  8. $q="INSERT INTO wiadomosc_f (firma_id, wiadomosc_id) VALUES (".$firma.", '$wiadomosc_id')";
  9. $r=mysqli_query($dbc,$q);
  10. }
  11. else
  12. {
  13. continue;
  14. }
  15. } //Koniec pętli foreach wysyłającej w
  16. }

daj tak i sprawdź.
przemysuaw
Nie poszło
  1. //Wstawianie dla każdego zaznaczonego wiersza (firmy)
  2. print_r($_POST['send_wiad']);
  3. foreach($_POST['send_wiad'] as $firma ) {
  4. if(isset($_POST['send_wiad']) && intval($_POST['send_wiad']) > 0 ) {
  5. $q="INSERT INTO wiadomosc_f (firma_id, wiadomosc_id) VALUES (".$firma.", '$wiadomosc_id')";
  6. $r=mysqli_query($dbc,$q);
  7. if(mysqli_affected_rows($dbc)>=1){
  8. echo'<p> Wiadomości zostały wysłane</p>';
  9. } else {
  10. echo'<p> Nie wstawiono do tabeli wiadomosc_f </p>';
  11. }
  12. }else{
  13. echo'<p> Nie istnieje zmienna $_POST[\'send_wiad\'] </p>';
  14. }
  15. } //Koniec pętli foreach wysyłającej wiadomość do zaznaczonych


Ale wyświetlając poprzez: print_r($_POST['send_wiad']); dało taki wynik: Array ( [0] => '.$firma.' ), czyli nie pobiera danych z checkboxa
Formularz jest na samym końcu strony i wygląda tak
  1. <div align="center" >
  2.  
  3. <form action=lista_firm.php method="post">
  4. <p><b>Temat:</b><input type="text" name="temat" size="30" maxlength="15"
  5. value="<?php if(isset($_POST['temat'])) echo $_POST['temat'];?>"/></p>
  6. <p><b>Treść:</b><textarea name="tresc_wiad" cols="40" rows="10"><?php if(isset($_POST['tresc_wiad']))
  7. echo $_POST['tresc_wiad']; ?></textarea></p>
  8. <input type="submit" name="submit" value="Wyślij wiadomość"/>
  9. <input type="hidden" name="submitted" value="TRUE"/>
  10. <input type="hidden" name="firma_id" value="'.$firma_id.'"/>
  11. <input type="hidden" name="send_wiad[]" value="'.$firma.'"/>
  12. </form></div>
Michael2318
  1. <input type="hidden" name="send_wiad[]" value="'.$firma.'"/>

Po kiego to tam dodałeś...? Dziwisz się że nie pobiera?
przemysuaw
jeżeli nie dodaje tego wiersza do formularza to wyskakują dwa błędy

- wystąpił błąd: Undefined index: send_wiad
- wystąpił błąd: Invalid argument supplied for foreach()

Jak dodaje to, to wyskakuje mi:

echo'<p> Nie wstawiono do tabeli wiadomosc_f </p>';

Ewidentnie nie jest przesyłana wartość z checkboxa w momencie wysyłania formularza.
Jak próbuje wyświetlić co przechowują zmienne, które teoretycznie są z checkboxa:
  1. $send_wiad=$_POST['send_wiad'];
  2. print_r($send_wiad);
  3.  
  4. foreach($send_wiad as $firma ) {
  5. echo 'firma: '.$firma;


To dostaje:
Array ( [0] => '.$firma.' ) firma: '.$firma.'

Nie wstawiono do tabeli wiadomosc_f

Przy wyświetlaniu tabeli, checkbox podaje prawidłową wartość firma_id,
ale jak chce pobrać dane z zaznaczonych wierszy przy wysyłaniu formularza, to zmienne są puste.
Eeehhhh... pewnie gdzieś zapomniałem o oczywistych oczywistościach.
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.