Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zabezpieczenie przed pustym formularzem
Forum PHP.pl > Forum > Przedszkole
lukis19944
Witam
Mam dwa problemy związane z moim kodem do strony bazodanowej

Pierwszym jest to że nie mogę sobie poradzić z zabezpieczeniem przed pustym formularzem. Po wejściu na stronę wyświetla mi się tekst, który chce aby pojawił się gdy ktoś zapomni wypełnić wszystkie pola w formularzach: "Nie podałeś wszystkich danych dotyczących klienta bądź dane są niepoprawne"

Drugim problemem jest to, że gdy dodam rekord do bazy i po tym odświerze strone dane znów się dodają.

Mógłby ktoś rzucić okiem i powiedzieć jak to poprawić?
Jestem początkujący w tym temacie także prosze o wyrozumiałość smile.gif

Wklejam kod:

if(isset($_POST["ok1"]) || (isset($_POST["ok2"])) || (isset($_POST["ok3"] ))){


//odbieramy dane z formularza
$marka = $_POST['marka'];
$model = $_POST['model'];
$rok = $_POST['rok'];
$nr_vin = $_POST['nr_vin'];
$imie = $_POST['imie'];
$nazwisko=$_POST['nazwisko'];
$adres=$_POST['adres'];
$nr_tel=$_POST['nr_tel'];
$id_klienta=$_POST['id_klienta'];
$id_auta=$_POST['id_auta'];
$id_mechanika=$_POST['id_mechanika'];
$data_przyjecia=$_POST['data_przyjecia'];
$data_odbioru=$_POST['data_odbioru'];
$opis=$_POST['opis'];
$status=$_POST['status'];
$cena_czesci=$_POST['cena_czesci'];
$cena_robota=$_POST['cena_robota'];
}
if ((!empty($marka)) || (!empty($model)) || (!empty($rok)) || (!empty($nr_vin))){ //dodajemy rekord do bazy

$dodajauto="INSERT INTO `auto`(`idauta`, `marka`, `model`, `rok`, `nrvin`) VALUES (NULL,'$marka','$model','$rok','$nr_vin')";
mysql_query ("$dodajauto");
echo ("Dodano auto do bazy");

$wynik = mysql_query("SELECT max(idauta) idauta FROM auto WHERE 1")
or die('Błąd zapytania');


echo "<table cellpadding=\"2\" border=1>";
while($r = mysql_fetch_assoc($wynik)) {
echo "<tr>";
echo "<td>ID Auta</td>";
echo "<td>".$r['idauta']."</td>";
echo "</tr>";
}
echo "</table>";



}else {
echo "Nie podałeś wszystkich danych dotyczących danych bądź dane są niepoprawne";
}

if ((!empty($imie)) || (!empty($nazwisko)) || (!empty($adres)) || (!empty($nr_tel))){

$dodajklient="INSERT INTO `klient`(`idklienta`, `imie`, `nazwisko`, `adres`, `nrtel`) VALUES (NULL,'$imie','$nazwisko','$adres','$nr_tel')";
mysql_query ("$dodajklient");
echo ("Dodano klienta do bazy");

$wynik1 = mysql_query("SELECT max(idklienta) idklienta FROM klient WHERE 1")
or die('Błąd zapytania');

if(mysql_num_rows($wynik1) > 0) {
echo "<table cellpadding=\"2\" border=1>";
while($r1 = mysql_fetch_assoc($wynik1)) {
echo "<tr>";
echo "<td>ID Klienta</td>";
echo "<td>".$r1['idklienta']."</td>";
echo "</tr>";
}
echo "</table>";
}


//$stmt1=$dbstmt->prepare("INSERT INTO klient (imie,nazwisko,adres,nrtel) VALUES (?,?,?,?)") or die($dbstmt->error);
//$stmt1->bind_param('sssi',$imie,$nazwisko,$adres,$nr_tel);
//$stmt1->execute();
}else {
echo "Nie podałeś wszystkich danych dotyczących klienta bądź dane są niepoprawne";
}


if ((!empty($id_klienta)) || (!empty($id_auta)) || (!empty($id_mechanika)) || (!empty($data_przyjecia)) || (!empty($data_odbioru)) || (!empty($opis)) || (!empty($status)) || (!empty($cena_czesci)) || (!empty($cena_robota))){

$dodajnaprawa="INSERT INTO `naprawa`(`idnaprawy`, `idklienta`, `idauta`, `idmechanika`, `dataprzyjecia`, `dataodbioru`, `opisusterki`, `status`, `cenaczesci`, `cenarobota`) VALUES (NULL,'$id_klienta','$id_auta','$id_mechanika','$data_przyjecia','$data_odbioru','$opis','$status','$cena_czesci','$cena_robota')";
mysql_query ($dodajnaprawa);



echo "Dodano zlecenie do bazy";


}else{
echo "Nie podałeś wszystkich danych dotyczących naprawy bądź dane są niepoprawne";
}
olszam
Mogłeś chociaż dać znacznik php by jakoś na forum to było czytelne ale mniejsza o to. Popraw warunki if z || na && bo przepuszczasz dane jeśli chociaż jedna wartość będzie prawdziwa. Z odświeżaniem to musisz się zabezpieczyć bo niestety tak to jest jak klikasz odśwież.
lukis19944
Poprawiłem z || na && oprócz pierwszego if'a bo tam chyba powinno zostać || bo chce dodawać dane osobno do tabel a nie wszystkie razem czyli wystarczy, że jeden warunek zostanie spełniony

Ale ciągle wyskakuje mi informacja o "Nie podałeś wszystkich danych.."

Jak to rozwiązac by wyskakiwał komunikat "Nie podałeś wszystkich danych.." tylko wtedy gdy formularze nie zostaną wypełnione dla danego submita którym zatwierdziłem wysłanie danych do bazy. Mam nadzieję że zrozumiecie o co chodzi bo nie napisałem tego dosyć zrozumiale chyba smile.gif

Zaznaczyłem na czerwono o co mi chodzi.


dvdx95
Rozumiem te ten plik php ma odpowiadać za 3 różne submity?

jeżeli tak to raczej tak powinno to być.

  1. if(isset($_POST["ok1"]) || (isset($_POST["ok2"])) || (isset($_POST["ok3"] ))){
  2.  
  3.  
  4. //odbieramy dane z formularza
  5. $marka = $_POST['marka'];
  6. $model = $_POST['model'];
  7. $rok = $_POST['rok'];
  8. $nr_vin = $_POST['nr_vin'];
  9. $imie = $_POST['imie'];
  10. $nazwisko=$_POST['nazwisko'];
  11. $adres=$_POST['adres'];
  12. $nr_tel=$_POST['nr_tel'];
  13. $id_klienta=$_POST['id_klienta'];
  14. $id_auta=$_POST['id_auta'];
  15. $id_mechanika=$_POST['id_mechanika'];
  16. $data_przyjecia=$_POST['data_przyjecia'];
  17. $data_odbioru=$_POST['data_odbioru'];
  18. $opis=$_POST['opis'];
  19. $status=$_POST['status'];
  20. $cena_czesci=$_POST['cena_czesci'];
  21. $cena_robota=$_POST['cena_robota'];
  22. }
  23. if (isset($_POST["ok1"]) && (!empty($marka)) && (!empty($model)) && (!empty($rok)) && (!empty($nr_vin))){ //dodajemy rekord do bazy
  24.  
  25. $dodajauto="INSERT INTO `auto`(`idauta`, `marka`, `model`, `rok`, `nrvin`) VALUES (NULL,'$marka','$model','$rok','$nr_vin')";
  26. mysql_query ("$dodajauto");
  27. echo ("Dodano auto do bazy");
  28.  
  29. $wynik = mysql_query("SELECT max(idauta) idauta FROM auto WHERE 1")
  30. or die('Błąd zapytania');
  31.  
  32.  
  33. echo "<table cellpadding=\"2\" border=1>";
  34. while($r = mysql_fetch_assoc($wynik)) {
  35. echo "<tr>";
  36. echo "<td>ID Auta</td>";
  37. echo "<td>".$r['idauta']."</td>";
  38. echo "</tr>";
  39. }
  40. echo "</table>";
  41.  
  42.  
  43.  
  44. }else {
  45. echo "Nie podałeś wszystkich danych dotyczących danych bądź dane są niepoprawne";
  46. }
  47.  
  48. if ((isset($_POST["ok2"])) && (!empty($imie)) && (!empty($nazwisko)) && (!empty($adres)) && (!empty($nr_tel))){
  49.  
  50. $dodajklient="INSERT INTO `klient`(`idklienta`, `imie`, `nazwisko`, `adres`, `nrtel`) VALUES (NULL,'$imie','$nazwisko','$adres','$nr_tel')";
  51. mysql_query ("$dodajklient");
  52. echo ("Dodano klienta do bazy");
  53.  
  54. $wynik1 = mysql_query("SELECT max(idklienta) idklienta FROM klient WHERE 1")
  55. or die('Błąd zapytania');
  56.  
  57. if(mysql_num_rows($wynik1) > 0) {
  58. echo "<table cellpadding=\"2\" border=1>";
  59. while($r1 = mysql_fetch_assoc($wynik1)) {
  60. echo "<tr>";
  61. echo "<td>ID Klienta</td>";
  62. echo "<td>".$r1['idklienta']."</td>";
  63. echo "</tr>";
  64. }
  65. echo "</table>";
  66. }
  67.  
  68.  
  69. //$stmt1=$dbstmt->prepare("INSERT INTO klient (imie,nazwisko,adres,nrtel) VALUES (?,?,?,?)") or die($dbstmt->error);
  70. //$stmt1->bind_param('sssi',$imie,$nazwisko,$adres,$nr_tel);
  71. //$stmt1->execute();
  72. }else {
  73. echo "Nie podałeś wszystkich danych dotyczących klienta bądź dane są niepoprawne";
  74. }
  75.  
  76.  
  77. if ((isset($_POST["ok3"])) && (!empty($id_klienta)) && (!empty($id_auta)) && (!empty($id_mechanika)) && (!empty($data_przyjecia)) && (!empty($data_odbioru)) && (!empty($opis)) && (!empty($status)) && (!empty($cena_czesci)) && (!empty($cena_robota))){
  78.  
  79. $dodajnaprawa="INSERT INTO `naprawa`(`idnaprawy`, `idklienta`, `idauta`, `idmechanika`, `dataprzyjecia`, `dataodbioru`, `opisusterki`, `status`, `cenaczesci`, `cenarobota`) VALUES (NULL,'$id_klienta','$id_auta','$id_mechanika','$data_przyjecia','$data_odbioru','$opis','$status','$cena_czesci','$cena_robota')";
  80. mysql_query ($dodajnaprawa);
  81.  
  82.  
  83.  
  84. echo "Dodano zlecenie do bazy";
  85.  
  86.  
  87. }else{
  88. echo "Nie podałeś wszystkich danych dotyczących naprawy bądź dane są niepoprawne";
  89. }
  90.  
lukis19944
No niestety, dalej po zatwierdzeniu jednego submita pokazuje mi komunikat o pozostałych o niewypełnionych formularzach..

Ma ktoś jakiś pomysł jeszcze?
viking
Jak wygląda przycisk którym wysyłasz formularze? var_dump($_POST);
Prosta logika. Jeżeli istnieje zmienna x w tablicy POST zrób x (sprawdzenie koniecznych pól), jeśli y to y itd.
lukis19944
Jeden z nich
<input type="submit" name="ok1" value="zatwierdź" />

var_dump($_POST);

array (size=18)
'marka' => string 'dasdafadf' (length=9)
'model' => string 'fdaf' (length=4)
'rok' => string '2' (length=1)
'nr_vin' => string 'e4gdfv68fxv4x' (length=13)
'ok1' => string 'zatwierdź' (length=10)
'imie' => string '' (length=0)
'nazwisko' => string '' (length=0)
'adres' => string '' (length=0)
'nr_tel' => string '' (length=0)
'id_klienta' => string '' (length=0)
'id_auta' => string '' (length=0)
'id_mechanika' => string '' (length=0)
'data_przyjecia' => string '' (length=0)
'data_odbioru' => string '' (length=0)
'opis' => string '' (length=0)
'cena_czesci' => string '' (length=0)
'cena_robota' => string '' (length=0)
'status' => string 'W trakcie' (length=9)






O to chodziło bo nie bardzo rozumiem?

viking
Zrób po prostu:
  1. if(isset($_POST["ok1"]) {
  2. //sprawdzasz potrzebne dane np od PHP7
  3. $marka = $_POST['marka'] ?? '';
  4. } else if(isset($_POST["ok2"]) {
  5. //
  6. }
lukis19944
tak miałem zrobić?
Ale to nie pomogło. dalej 3 komunikaty po wciśnięciu jednego przycisku..

  1. if (isset($_POST["ok1"])){
  2.  
  3.  
  4.  
  5. //odbieramy dane z formularza
  6. $marka = $_POST['marka'] ;
  7. $model = $_POST['model'] ;
  8. $rok = $_POST['rok'] ;
  9. $nr_vin = $_POST['nr_vin'] ;
  10.  
  11. }else if (isset($_POST["ok2"])){
  12.  
  13. $imie = $_POST['imie'] ;
  14. $nazwisko=$_POST['nazwisko'] ;
  15. $adres=$_POST['adres'] ;
  16. $nr_tel=$_POST['nr_tel'] ;
  17.  
  18. }else if (isset($_POST["ok3"])){
  19. $id_klienta=$_POST['id_klienta'];
  20. $id_auta=$_POST['id_auta'];
  21. $id_mechanika=$_POST['id_mechanika'] ;
  22. $data_przyjecia=$_POST['data_przyjecia'] ;
  23. $data_odbioru=$_POST['data_odbioru'] ;
  24. $opis=$_POST['opis'] ;
  25. $status=$_POST['status'] ;
  26. $cena_czesci=$_POST['cena_czesci'] ;
  27. $cena_robota=$_POST['cena_robota'] ;
  28. }
viking
W takim razie sprawdź co się dzieje z komunikatami. Powinny być tylko w tych ifach wyżej.
dvdx95
  1. <?php
  2. if(isset($_POST["ok1"])){
  3. $marka = $_POST['marka'] ;
  4. $model = $_POST['model'] ;
  5. $rok = $_POST['rok'] ;
  6. $nr_vin = $_POST['nr_vin'] ;
  7. if ((!empty($marka)) && (!empty($model)) && (!empty($rok)) && (!empty($nr_vin))){
  8. //dalsza czesc kodu
  9. }
  10. else{
  11. echo "Nie podałeś wszystkich danych dotyczących danych bądź dane są niepoprawne";
  12. }
  13. }
  14. if(isset($_POST["ok2"])){
  15. $imie = $_POST['imie'] ;
  16. $nazwisko=$_POST['nazwisko'] ;
  17. $adres=$_POST['adres'] ;
  18. $nr_tel=$_POST['nr_tel'] ;
  19. if ((!empty($imie)) && (!empty($nazwisko)) && (!empty($adres)) && (!empty($nr_tel))){
  20. //dalsza czesc kodu
  21. }
  22. else{
  23. echo "Nie podałeś wszystkich danych dotyczących klienta bądź dane są niepoprawne";
  24. }
  25. }
  26. if(isset($_POST["ok3"])){
  27. $id_klienta=$_POST['id_klienta'];
  28. $id_auta=$_POST['id_auta'];
  29. $id_mechanika=$_POST['id_mechanika'] ;
  30. $data_przyjecia=$_POST['data_przyjecia'] ;
  31. $data_odbioru=$_POST['data_odbioru'] ;
  32. $opis=$_POST['opis'] ;
  33. $status=$_POST['status'] ;
  34. $cena_czesci=$_POST['cena_czesci'] ;
  35. $cena_robota=$_POST['cena_robota'] ;
  36. if ((!empty($id_klienta)) && (!empty($id_auta)) && (!empty($id_mechanika)) && (!empty($data_przyjecia)) && (!empty($data_odbioru)) && (!empty($opis)) && (!empty($status)) && (!empty($cena_czesci)) && (!empty($cena_robota))){
  37. //dalsza czesc kodu
  38. }
  39. else{
  40. echo "Nie podałeś wszystkich danych dotyczących klienta bądź dane są niepoprawne";
  41. }
  42. }
  43. ?>
viking
Pokaż jakieś przykładowe dane po wysłaniu formularza var_dump($_POST);
lukis19944
Wkleiłem kilka postów wyżej.

To jest wysłanie za pomocą pierwszego submita
array (size=18)
'marka' => string 'dasdafadf' (length=9)
'model' => string 'fdaf' (length=4)
'rok' => string '2' (length=1)
'nr_vin' => string 'e4gdfv68fxv4x' (length=13)
'ok1' => string 'zatwierdź' (length=10)
'imie' => string '' (length=0)
'nazwisko' => string '' (length=0)
'adres' => string '' (length=0)
'nr_tel' => string '' (length=0)
'id_klienta' => string '' (length=0)
'id_auta' => string '' (length=0)
'id_mechanika' => string '' (length=0)
'data_przyjecia' => string '' (length=0)
'data_odbioru' => string '' (length=0)
'opis' => string '' (length=0)
'cena_czesci' => string '' (length=0)
'cena_robota' => string '' (length=0)
'status' => string 'W trakcie' (length=9)
viking
No to nie ma opcji żeby działały ify od ok2 i 3.
lukis19944
To w czym może być problem że tak się dzieje?
viking
Szklana kula akurat przestała działać. Zapewne kod który obecnie tam masz by ją włączył.
lukis19944
dvdx95 wielkie dzięki za pomoc, kod działa tak jak trzeba smile.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.