[PHP/MySQL] - Rekord dodaje się do bazy nawet gdy Formularz pusty - dlaczego?


(baciany) #1

Witam. Próbowałem  na 2 sposoby i nie mogę dojść do porozumienia z Kodem.

Próbowałem tak:

(Prosty kod, bez żadnych informacji czy się udało czy nie)

<?php
    if(isset($_POST['nazwa'], $_POST['opis'])){
        
        include 'core/connect.php';


        $ilosc = dbConnect() -> exec('INSERT INTO `produkty` (`nazwa`, `opis`, `typ`) VALUES(
\''.$_POST['nazwa'].'\',
\''.$_POST['opis'].'\',
\''.$_SESSION['target'].'\')');
    }
?>

oraz tak:  (ten kod pochodzi z tej strony: http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO))

?php

		if($_SERVER['REQUEST_METHOD'] == 'POST')
		{	
			 include "core/connect.php";
 
			$ilosc = dbConnect() - exec('INSERT INTO `produkty` (`nazwa`, `opis`, `typ`)	VALUES(
				\''.$_POST['nazwa'].'\',
                \''.$_POST['opis'].'\',
				\''.$_SESSION['target'].'\')');
 
			if($ilosc 0)
			{
				echo 'Pomyślnie dodano: '.$ilosc.' rekordów';
			}
			else
			{
				echo 'Wystąpił błąd podczas dodawania rekordów!';
			}
		}
	
?

W oby przypadkach rekordy są dodawane nawet gdy pola w formularzu są puste. Dodaje po prostu puste wpisy.  


(orajo) #2

W pierwszym przykładzi ebład polega na tym, że sprawdzasz czy jest wysłane pole nazwa, ale nie sprawdzasz jakąś ma wartość.

Wystarczy coś takiego:

<?php
    if(isset($_POST['nazwa']) && !empty($_POST['nazwa'])){
        // kod zapisania do bazy

    }

Oczywiści warunki muszą być bardziej skomplikowane i odnosić się do wyników walidacji pól formularza (wymagalność, zawartość). Poczytaj sobie informacje o walidacji http://php.net/manual/en/book.filter.php.

Najprościej ułozyć sobie taki ciąg:

  1. sprawdzenie czy formularz został wysłany, np.: if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’) {
  2. sparwdzenie typów i wymagalności pól; tutaj najpier ustaw są jakąś zmienno np.:$isFormValid = false; i dopiero jeśli wszystko jest ok ustaw ją na true.
  3. zapisz dane do bazy jeśli if ($isFormValid === true)

 

W drugim przykładzie w ogóle nie sprawdzasz wysłanych danych, a tylko czy został wysłany formularz. W zasdzie ww. procedura sparwdzania tutaj również powinna być zastosowana.


(baciany) #3

Faktycznie działa. Oczywiście poczytam. Teraz próbuję ten drugi skrypt wzbogacić o sprawdzanie zawartości.