Обновить столбец mysql с помощью select и из post

#php #mysql

#php #mysql

Вопрос:

Я хочу обновлять поле со значением по умолчанию от 0 до 1 всякий раз, когда столбец совпадает со значениями post. введите описание изображения здесь

Проблема в том, что у меня в моей базе данных есть два столбца, я хочу использовать значения post для сравнения, существуют ли они в базе данных, и если они существуют, то следует обновить столбец, который имеет значение по умолчанию от 0 до 1. Я попробовал некоторый код, но не работает.

 public function ticket()
{
    // user coupon credentials
    $validate_coupon   = "";
    $validate_coupon_err = "";

    // Processing form data when form is submitted
    if (isset($_POST['submit_coupon'])) {
        // Check if coupon field is empty
        if (empty(trim($_POST["usercoupon"]))) {
            $validate_coupon_err = 'Please enter your coupon number.';
        } else {
            $usercoupon = htmlspecialchars($_POST["usercoupon"]);
        }

        $is_used = 1;

        // Validate credentials
        if (empty($validate_coupon_err)) {
            // Prepare a select statement
            $sql = "SELECT * FROM coupon WHERE coupon_value = :vcoupon LIMIT 1";

            if ($stmt = $this->conn->prepare($sql)) {
                // Bind variables to the prepared statement as parameters
                $stmt->bindParam(':vcoupon', $param_vcoupon, PDO::PARAM_STR);

                // Set parameters
                $param_vcoupon = trim($_POST["usercoupon"]);

                // Attempt to execute the prepared statement
                if ($stmt->execute()) {
                    // Check if coupon exists, if yes then proceed 
                    if ($stmt->rowCount() == 1) {
                        $stmt = $this->conn->prepare('UPDATE coupon 
                            SET is_used = :used
                            WHERE coupon_value=:coupon');

                        $stmt->bindParam(':used',$is_used);
                        $stmt->bindParam(':coupon',$usercoupon);

                        if ($row = $stmt->fetch()) {
                            /* coupon value is correct, so start a new session and
                               save the value to the session */
                            session_start();

                            $_SESSION['usercoupon'] = $usercoupon;      
                            header("location: selectexams.php");
                        } 
                        else {
                            // Display an error message if coupon doesn't exist
                            $validate_coupon_err = 'No account found with that coupon.';
                        }

                    } 
                } else {
                    echo "Oops! Something went wrong. Please try again later.";

                }
            }

            // Close statement
            unset($stmt);
        }

        // Close connection
        unset($pdo);
    }
}
  

Я хочу, чтобы is_used значение столбца менялось с 0 на 1 всякий раз, когда значение post совпадает со значениями в coupon_value поле.

Комментарии:

1. Пожалуйста, установите $param_vcoupon переменную перед ее привязкой.

2. После того, как вы prepare('UPDATE coupon затем вызовете $stmt->fetch() — вы имели в виду execute() это вместо?

3. @NigelRen это была проблема, спасибо….

4. Сначала выполните SELECT, чтобы проверить, существует ли код купона, является излишним — инструкция UPDATE повлияет на любую запись, только если это так в любом случае. Вы должны проверить это (количество затронутых строк) после ОБНОВЛЕНИЯ и полностью удалить SELECT.