Sprawdzanie czy formularz jest pusty

0

Witam, muszę napisać skrypt w którym mam dodawać i usuwać dane z bazy danych w jednym skrypcie. Czy jest możliwość aby sprawdzić (np. za pomocą isset lub empty) czy któryś z elementów formularza jest wypełniony?( nie sprawdzając po kolei każdego inputa z formularza). Próbowałem w taki sposób lecz nie działa

HTML

<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <form action="add.php" method="POST">
        <form action="add.php" method="POST" name="dodaj">
           Tytuł: <input type="text" name="tytul" /> <br />
           Reżyser: <input type="text" name="rezyser" /> <br />
           Czas: <input type="text" name="czas" /> <br />
           <input type="submit" value="Dodaj" /> <br />
        </form>
        
        <form action="add.php" method="POST" name="usun">
             ID: <input type="text" name="id" /> <br />
             <input type="submit" value="Usuń" />
        </form>
        </form>
    </body>
</html>

PHP

<?php

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "baza3";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error)
{
    die("Blad polaczenia: ".$conn->connect_error);
}
if(isset($_POST['dodaj']))
{
    $tytul = $_POST['tytul'];
    $rezyser = $_POST['rezyser'];
    $czas = $_POST['czas'];
    $sql = ("INSERT INTO filmy VALUES ('','$tytul','$rezyser','$czas')");
    $conn->query($sql);
}
else if (isset($_POST['dodaj']))
{
    
    $id = $_POST['id'];
    $sql2 = ("DELETE FROM filmy WHERE ID=$id");
    $conn->query($sq2l);
}
?>
1

Można np. tak:

$formFilled = true;

foreach (['tytul', 'rezyser', 'czas'] as $inputName) {
  $inputValue = trim($_POST[$inputName] ?? '');

  if (strlen($inputValue) === 0) {
    $formFilled = false;
  }
}

Btw, spróbuj wprowadzić jako tytuł coś w stylu '", oops ;-) - i gdy już się przekonasz, jak rozwala to Twój skrypt, zainteresuj się PDO.

0

Mógłbyś objaśnić mi poszczególne linijki? Dopiero zaczynam przygodę z PHP.

0

Dzięki wielkie ;)

0
Patryk27 napisał(a):

No problemo:

Mógłbyś jednak opisać twój przykład w moim przykładzie? Zaznajomiłem się z wszystkim lecz jednak nie do końca rozumiem działania tego kodu.

1

No to lecimy:

// Zakładamy, że formatka jest wypełniona - będziemy działać na zasadzie eliminacji.
$formFilled = true;
 
// Pętla foreach wykona się trzy razy i zmienna $inputName będzie po kolei przyjmować wartości: 'tytul', 'rezyser' oraz 'czas'.
// Możesz do środka pętli wrzucić np. `var_dump($inputName);` aby się przekonać
foreach (['tytul', 'rezyser', 'czas'] as $inputName) { // w
  // `$_POST[$inputName]` może zawierać wartość naszego inputa... o ile w ogóle istnieje!
  // Użytkownik mógł przecież sfałszować formularz, przeglądarka mogła nie wysłać wszystkiego itd.
  // Stąd mamy dodatkowo `?? ''`, które można przetłumaczyć tak: https://hastebin.com/siwuzayike.php
  // Dodatkowe wywołanie `trim()` obcina białe znaki (np. spacje) z początku i końca ciągu znaków tak, aby ktoś nie próbował nas oszukać wysyłać formularz wypełniony samymi spacjami.
  $inputValue = trim($_POST[$inputName] ?? '');
 
  // Jeśli wartość aktualnie sprawdzanego pola jest pusta, formularz nie został wypełniony prawidłowo, zatem ustawiamy nasza zmienną $formFilled na false.
  // Lepiej jest stosować do tego celu strlen(), ponieważ empty() uznałoby również np. "0" za "pusty ciąg znaków", co prawdopodobnie nie jest pożądane.
  if (strlen($inputValue) === 0) {
    $formFilled = false;
  }
}
0

Dzięki wielkie! Teraz wszystko jest jasne. O wiele lepiej uczy mi się na przykładach niż na czystej teorii.

0

Jednak pojawił się kolejny problem, mimo że wysyłam pusty formularz dane i tak sie wpisują z pustymi wierszami.

<?php

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "baza3";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error)
{
    die("Blad polaczenia: ".$conn->connect_error);
}
else
{
    foreach (['tytul', 'rezyser', 'czas'] as $inputName) {
  $inputValue = trim($_POST[$inputName] ?? '');
 
  if (strlen($inputValue) === 0) {
    $formFilled = false;
  }
    }
if ($formFiled = true) 
{
    $tytul = $_POST['tytul'];
    $rezyser = $_POST['rezyser'];
    $czas = $_POST['czas'];
    $sql = ("INSERT INTO filmy VALUES ('','$tytul','$rezyser','$czas')");
    $conn->query($sql);
}
    else
    {
        echo "podaj wszystkie dane";
    }
}




?>
0

Zamień:

if ($formFiled = true) 

na:

if ($formFiled == true) 
0

No tak... Głupi błąd :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1