sql >> Database teknologi >  >> RDS >> Mysql

Stop sql fra at opdatere tomme eller tomme felter fra min opdateringsformular

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

Dette underordner jobbet med at kontrollere for tomme poster til MySQL, og feltet bruger sin tidligere værdi i stedet for en tom værdi. Du skal overføre værdien til execute() to gange for at dette virker. Det gør stort set det samme, som du gør, men uden at skulle gemme værdien i din PHP-session.

Ved at bruge denne tilgang vil din opdateringskode se sådan ud:

/*
  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']
));

Din eksisterende kode ville have forhindret brugeren i at indtaste en enkelt 0 på egen hånd, hvilket dette ikke gør - du vil måske også tilføje en check for det.



  1. Ulovlig blanding af sammenstillinger (utf8_unicode_ci,IMPLICIT) og (utf8_general_ci,IMPLICIT) for operation '='

  2. multibillede upload forkert antal ved fil-upload

  3. sortering efter høj-lav pris med mysql-data

  4. Returner rækker, der indeholder numeriske værdier i Oracle