@KurwaTM

Отправляется две формы на mysql. Что делать?

У меня отправляется две формы на mysql. Не знаю в чём ошибка. Я пробовал использовать
musqli_multi_query но что-то пошло не так :). А вот сам код:
<?php
include_once 'database.php';
$sucess = "";

if(isset($_POST['save'])) {
    $name = $_POST['name'];
    $product = $_POST['product'];
    $price = $_POST['price'];
    $email = $_POST['email'];
    $uid = $_POST['uid'];

    $sql = "UPDATE shtuck SET sht = sht - 1
      WHERE id='$uid'";

    $sqlu = "INSERT INTO tovar (name,product,price,email)
    VALUES ('$name','$product','$price','$email')";

    if ($mysqli = mysqli_query($conn, $sql)) {
        if ($mysqli = mysqli_query($conn, $sqlu)){
            $sucess = "Good!";
        }
    } else {
        echo "Error: " . $mysqli . "
    " . mysqli_error($conn);
    }
    mysqli_close($conn);
}
?>
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@KurwaTM Автор вопроса
Спасибо всем я ришил проблему тупо но я $sql и $sqlu поменял местами
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
В данном случае следует использовать транзакции
if(isset($_POST['save'])) {
    $name = $_POST['name'];
    $product = $_POST['product'];
    $price = $_POST['price'];
    $email = $_POST['email'];
    $uid = $_POST['uid'];

	mysqli_begin_transaction($mysqli);
	
	try {
		/* Добавление значений */
		$stmt = mysqli_prepare($mysqli, "INSERT INTO tovar (name,product,price,email) VALUES (?, ?, ?, ?)");
		mysqli_stmt_bind_param($stmt, 'ssss', $name, $product, $price, $email);
		mysqli_stmt_execute($stmt);
		
		$stmt = mysqli_prepare($mysqli, "UPDATE shtuck SET sht = sht - 1 WHERE id=?");
		mysqli_stmt_bind_param($stmt, 's', $uid);
		mysqli_stmt_execute($stmt);

		/* Если код достигает этой точки без ошибок, фиксируем данные в базе данных. */
		mysqli_commit($mysqli);
	} catch (mysqli_sql_exception $exception) {
		mysqli_rollback($mysqli);

		throw $exception;
	}
	
    mysqli_close($mysqli);
}


Тестировать данный PHP код можно здесь
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы