Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zatrzymaj sql przed aktualizacją pustych lub pustych pól z mojego formularza aktualizacji

UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...

To pomija zadanie sprawdzania pustych wpisów w MySQL, a pole używa swojej poprzedniej wartości zamiast pustej wartości. Musisz przekazać wartość do execute() dwa razy, aby to zadziałało. Robi to w zasadzie to samo, co ty, ale bez konieczności przechowywania wartości w sesji PHP.

Przy takim podejściu Twój kod aktualizacji będzie wyglądał tak:

/*
  This block is no longer necessary
if($_POST['firstname']){ $firstname = $_POST['firstname']; }
else { $firstname = $_SESSION['uname']['firstname']; }

if($_POST['lastname']){ $lastname = $_POST['lastname']; }
else { $lastname = $_SESSION['uname']['lastname']; }

if($_POST['email']){ $email= $_POST['email']; }
else { $email = $_SESSION['uname']['email']; }
*/

$query = "
  UPDATE `users`
  SET
    `firstname` = IF(? <> '', ?, `firstname`),
    `lastname` = IF(? <> '', ?, `lastname`),
    `email` = IF(? <> '', ?, `email`)
  WHERE `id` = ?
";

$results = $condb->prepare($query);

$results->execute(array(
  $_POST['firstname'], $_POST['firstname'],
  $_POST['lastname'], $_POST['lastname'],
  $_POST['email'], $_POST['email'],
  $_SESSION['uname']['id']
));

Twój istniejący kod uniemożliwiłby użytkownikowi wpisanie pojedynczego 0 sam w sobie, czego to nie zrobi – możesz dodać czek również na to.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać unikalny klucz do istniejącej tabeli (z wierszami nieunikatowymi)

  2. Błąd składni MySQL przy prostej INSERT?

  3. problemy z przygotowaniem mysqli

  4. Czy MySQL nadpisuje kolumnę o tej samej wartości podczas aktualizacji?

  5. Obsługa danych z wielu pól wyboru