-3

次のコードに問題があります。

if(isset($_POST['submit'])){

$name = $_POST['productname'];
$sql= "SELECT quantity FROM products WHERE productid='$name'";
$amount= $sql + 0;
$quantitysold = $_POST['quantitysold']; 
$amountsold = $quantitysold + 0;
var_dump($amountsold);
var_dump($amount);

if($amountsold > $amount){
    echo 'Not enough product';}

else if($name && $quantitysold){
    $query = $db->query("UPDATE products SET quantity=quantity-$quantitysold
    WHERE productid='$name'");
    $query = $db->query("DELETE FROM products WHERE quantity<'1'");} 

else{
    echo 'Incomplete Data';}

}

問題は、リダイレクト先の整数ではなく、sql が文字列として読み取られることです。これは、$amount と $quantitysold を比較できないことを意味します。

最近PHPを勉強し始めたので初歩的なミスかもしれません。

4

2 に答える 2

2

PHP 関数からのフィルター入力を使用する

   if(isset($_POST['submit'])){

$name = filter_input(INPUT_POST, "productname",FILTER_SANITIZE_NUMBER_INT);
$sql= "SELECT quantity FROM products WHERE productid=$name";
$amount= $sql + 0;
$quantitysold = $_POST['quantitysold']; 
$amountsold = $quantitysold + 0;
var_dump($amountsold);
var_dump($amount);

if($amountsold > $amount){
    echo 'Not enough product';}

else if($name && $quantitysold){
    $query = $db->query("UPDATE products SET quantity=quantity-$quantitysold
    WHERE productid=$name");
    $query = $db->query("DELETE FROM products WHERE quantity<'1'");} 

else{
    echo 'Incomplete Data';}

}
于 2013-06-17T11:18:30.160 に答える
0

コードの最初の部分は、SQL クエリ文字列を SQL エンジンに渡しません。以下は、PDO ( Php Data Objects )を使用している場合の方法です。

if(isset($_POST['submit'])){

    $db = new PDO("mysql:host=localhost;dbname=yourdatabasename","yourusername","yourpassword");
    $name = $_POST['productname'];
    $sql= "SELECT quantity FROM products WHERE productid=?";
    $statement = $db->prepare($sql);
    $statement->execute(array($name));
    $row = $statement->fetch(PDO::FETCH_NUM);
    $amount= $row[0];

// the rest of your code
于 2013-06-16T17:13:53.810 に答える