[PHP] Checkbox a baza danych


(Krzychu224) #1

Mam formularz do rejestracji. Mam tam jednego checkboksa. Potrzebuję, żeby przy dodawaniu użytkownika do bazy jeśli checkbox jest zaznaczony w odpowiednim miejscu ustawiała się jedynka.

Próbowałem to zrobić tak, że jeśli checkbox zaznaczony to ustawiam zmienną na 1 wysyłam do bazy:

elseif (empty($_POST['prow'])) {

				$p=0;

			} elseif (isset($_POST['prow']) && $_POST['prow'] == 1) {

				$p=1;

			}


...



                mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_prow_status`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', [b]'{$p}',[/b] '".time()."')");

jednak ciągle wstawia zero. Potem próbowałem wysyłać takie zapytanie do bazy:

mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_prow_status`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', [b]'{$_POST['prow']}',[/b] '".time()."')");

Nadal to samo.

Jak to zrobić poprawnie?


(Rst00) #2

Musisz przypsisać do checkbox’a jakąś wartość np. ową 1.

np.

Wtedy Twój sposób zadziała.


(Krzychu224) #3

Który sposób z tych dwóch masz na myśli?

Dodałem value=“1” i zamieniłem warunki na

if (empty($_POST['prow'])) {

			$p=0;

			} elseif (isset($_POST['prow']) && $_POST['prow'] == 1) {

				$p=1;

			}

i w bazie użytkownicy mają nadal 0 tam gdzie chce dać 1


(Rst00) #4

Daj po prostu:

if ($_POST['prow'] == 1)

$p=1;

else

$p=0;

Powinno działać. //EDIT: Sprawdziłem na przykładzie, działa:

<?php

	if($_POST['pole'] == 1)

		$p = 1;

	else

		$p = 0;


	echo $p;

?>

(Krzychu224) #5

Twój przykład też mi działa, ale gdy próbuję to dorzucić to kodu strony to nie osiągam efektu. Dla sprawdzenia dałem echo $p; po komunikacie o udanej rejestracji i nie wyświetla mi p.

O co może chodzić?

Wrzucam kod strony, może będzie pomocny:

<?php

include 'config.php';

db_connect();


// sprawdzamy czy user nie jest przypadkiem zalogowany

if(!$_SESSION['logged']) {

    // je¶li zostanie naci¶nięty przycisk "Zarejestruj"


    require_once('recaptchalib.php'); // dołączenie modułu reCAPTCHA

    $privatekey = 'xx'; // prywatny klucz reCAPTCHA

    $publickey = 'xx'; // publiczny klucz reCAPTCHA



    if(isset($_POST['name'])) {

        // filtrujemy dane...

        $_POST['name'] = clear($_POST['name']);

        $_POST['password'] = clear($_POST['password']);

        $_POST['password2'] = clear($_POST['password2']);

        $_POST['email'] = clear($_POST['email']);




                $resp = recaptcha_check_answer ($privatekey,

                $_SERVER["REMOTE_ADDR"],

                $_POST["recaptcha_challenge_field"],

                $_POST["recaptcha_response_field"]);



        // sprawdzamy czy wszystkie pola zostały wypełnione

        if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {

            echo '
Musisz wypełnić wszystkie pola.';


		if ($_POST['prow'] == 1)

		$p=1;

		else

		$p=0;  


        // sprawdzamy czy podane dwa hasła s± takie same

        } elseif($_POST['password'] != $_POST['password2']) {

            echo '
Podane hasła różnią się od siebie.';

        // sprawdzamy poprawno¶ć emaila

        } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {

            echo '
Podany email jest nieprawidłowy.';

        } 

        	elseif (!$resp->is_valid) {

            echo '
Proszę wpisać poprawnie wyrazy z obrazka.';


        	}




        else {

            // sprawdzamy czy s± jacy¶ uzytkownicy z takim loginem lub adresem email

            $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'");

            $row = mysql_fetch_row($result);

            if($row[0] > 0) {

                echo '
Już istnieje użytkownik z takim loginem lub adresem e-mail.';

            } else {

                // je¶li nie istnieje to kodujemy haslo...

                $_POST['password'] = codepass($_POST['password']);

                // i wykonujemy zapytanie na dodanie usera

mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_prow_status`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '{$p}', '".time()."')");                

echo '
Zostałeś poprawnie zarejestrowany! Możesz się teraz zalogować. ' ;

echo $p;

            }

        }

    }


    // tworzenie formularza HTML

    echo <<< KONIEC




Login: 


Hasło: 


Powtórz hasło: 


Adres e-mail: 


Zaznacz jeśli jesteś prowadzącym: 


KONIEC;


    echo recaptcha_get_html($publickey); // wyświetlanie reCAPTCHA

    echo <<< KONIEC




KONIEC;


 } else {

    echo '
Jeste¶ już zalogowany, więc nie możesz stworzyć nowego konta.

[Powrót]';

}


db_close();

?>

[/code]

(Rst00) #6

Bo w złym miejscu masz ten kod:

if ($_POST['prow'] == 1)

      $p=1;

      else

      $p=0;

Jest on w bloku:

if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {

            echo '
Musisz wypełnić wszystkie pola.';


      if ($_POST['prow'] == 1)

      $p=1;

      else

      $p=0;  


        // sprawdzamy czy podane dwa hasła s± takie same

        }

(Krzychu224) #7

Dzięki! Żeby takiego banału nie zobaczyć #-o


(Drobok) #8

Wydajniej jest zrobić ukryte pole:

Wtedy wystarczy:

$p=$_POST['pole'];