PHP выполняет sql внутри ложного условия оператора IF с $ _POST - PullRequest
0 голосов
/ 02 октября 2018

Пожалуйста, помогите с этой трудной для понимания ошибкой: php всегда выполняет обновление sql внутри IF с условием $ _POST.

Когда условие ложно: код i) не выполняет команду echo, но ii) еевсе еще выполняет команду sql

if ($_POST["scanned_set"] != "saved") {    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=abc", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";    

        // Update

        $sql = "UPDATE `id_scan` SET `scan_count` = 10 WHERE `id_scan`.`id` = 1";

        // use exec() because no results are returned
        $conn->exec($sql);        
    } catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }

    $conn = null; 
}

, и странно то, что, если я пробую условие iF с "IF (1 == 2)", тогда код работает хорошо.Другими словами, он не выполняет sql.

Полный код

<html>
<body> 

<?php

$servername = "localhost";
$username = "reviinve_vchain";
$password = "";

var_dump($_POST["scanned_set"]);

try {
    $conn = new PDO("mysql:host=$servername;dbname=reviinve_vchain", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 

    // Retrieve data from db
    $sql = "SELECT *  FROM `id_scan` WHERE `id` = 1";

        foreach ($conn->query($sql) as $row) {
        echo "print scan number after retrieving statement ".$row['scan_count'] . "\t";
        // print $row['color'] . "\t";

        $count_update = $row['scan_count'] + 1;     
        }        
}
    catch(PDOException $e){
        echo "Connection failed: " . $e->getMessage();
    }

    $conn = null;

if ($_POST["scanned_set"] != "saved") {
    try {
        $conn = new PDO("mysql:host=$servername;dbname=reviinve_vchain", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully"; 

        // Update count number to db

        echo 'new count number' . $count_update;     

        $sql = "UPDATE `id_scan` SET `scan_count` = $count_update WHERE `id_scan`.`id` = 1";

        // use exec() because no results are returned
        $conn->exec($sql);
    }
    catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }
    $conn = null; 
}

?> 
</body>
</html>

1 Ответ

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

Попробуйте сначала очистить переменную запроса:

$do_update = !(trim(strtolower($_REQUEST["scanned_set"])) == "saved")

if ($do_update) {    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=abc", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";    

        // Update

        $sql = "UPDATE `id_scan` SET `scan_count` = 10 WHERE `id_scan`.`id` = 1";

        // use exec() because no results are returned
        $conn->exec($sql);        
    } catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }

    $conn = null; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...