Проверка формы и SQL с использованием PHP - PullRequest
0 голосов
/ 29 октября 2018

Когда пользователь нажимает кнопку Сохранить, проверьте, успешно ли вставлены данные записи в таблицу, и отобразите соответствующее сообщение соответствующим образом. Если формы пустые, то должно отображаться сообщение об ошибке, а в базе данных не должно быть записей.

//SAVE

if (isset($_POST['SAVE'])) {
    $Name = $_POST['name'];
    $City = $_POST['city'];
    $query = "Insert Into Info Values('$Name','$City')";
    $result = mysqli_query($con, $query) or die ("query is failed" . mysqli_error($con));
    $Name = '';
    $City = '';
    if(mysqli_affected_rows($con)>0) {
        echo "record is saved";
    }else {
        echo "record is not saved";
    }

Я могу сделать проверку только через php. Я не уверен, правильно ли я это делаю. До сих пор я могу получить сообщение «запись сохранена» в моей форме, но я не могу получить последнее, если форма пуста. Это просто сделать пустую запись в моей базе данных.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Непроверенный код:

if (!isset($_POST['SAVE'], $_POST['name'], $_POST['city'])) {  // avoid Notices
    echo "Missing required submission data";
} elseif (!strlen(trim($_POST['name']))) {  // validate however you wish
    echo "Name data is not valid";  // explain however you wish
} elseif (!strlen(trim($_POST['city']))) {  // validate however you wish
    echo "City data is not valid";  // explain however you wish
} elseif (!$con = new mysqli("localhost", "root", "", "db")) {  // declare and check for a falsey value
    echo "Connection Failure"; // $con->connect_error <-- never show actual error details to public
} elseif (!$stmt = $con->prepare("INSERT INTO Info VALUES (?,?)")) {
    echo "Error @ prepare"; // $con->error;  // don't show to public
} elseif (!$stmt->bind_param("ss", $_POST['name'], $_POST['city'])) {
    echo "Error @ bind";  // $stmt->error;  // don't show to public
} elseif (!$stmt->execute()) {
    echo "Error @ execute";  // $stmt->error;  // don't show to public
} else {
    echo "Insert Successful"; 
}

Условия проверки данных отправки гарантируют, что значения не являются пустыми и не полностью состоят из пробельных символов.Если вы хотите еще больше уточнить требование проверки, просто обновите условия.

Если вы хотите просто убедиться, что $_POST['name'] и $_POST['city'] не пусты, вы можете заменить первые три условия на

if (empty($_POST['SAVE']) || empty($_POST['name']) || empty($_POST['city'])) {
    echo "Submission data is missing/invalid";
}...

Если вы не используете подготовленный оператор, то такие значения, как Paul O'Malley, будут нарушать ваш запрос.Хуже того, если кто-то хочет попробовать выполнить некоторые инъекционные атаки, ваш запрос уязвим.

Проверка affected_rows() не нужна.Если при выполнении запроса не появляется сообщение об ошибке, запрос INSERT был успешным.

Приведенные выше рекомендации - это лучшие рекомендации, которые я настоятельно рекомендую вам принять.

0 голосов
/ 29 октября 2018

Проверка isset($_POST['SAVE']) сообщает только, если установлено «SAVE». Он не сообщает вам, имеют ли поля значения.

Чтобы выполнить проверку в PHP, используйте что-то вроде следующего:

if (isset($_POST['SAVE'])) {
    $Name = $_POST['name'];
    $City = $_POST['city'];
    if ($Name && $City)
    {
       //...
       //code to insert data into the database goes here
       //...

       if(mysqli_affected_rows($con)>0) {
          echo "record is saved";
       }else {
          echo "record is not saved (error saving)";
       }
    } else {
       echo "record is not saved (input was empty)";
    }
}

Ключом является проверка if ($Name && $City).

В качестве альтернативы, если вы хотите полагаться на mysql для отклонения вставки пустых значений, то убедитесь, что поля таблицы mySql не обнуляются, а затем измените эту часть кода: (но это приведет к переносу проверки на MySql)

$Name = $_POST['name']?$_POST['name']:null;
$City = $_POST['city']?$_POST['city']:null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...