如何将变量从PHP传递给生成的JavaScript?

时间:2017-10-21 00:35:51

标签: php jquery mysql ajax

我从PHP脚本生成JavaScript,我需要能够将值直接复制到生成的JavaScript代码中。

我的代码如下:

PHP:

include "db-Info.php";
echo '<option value="">Please select item first...</option>';

$item = $_POST['itemId'];

$query = mysqli_query($con, "SELECT id, item, price, pointRequired FROM 
tblprice WHERE item ='$item'");
$rowCount = $query->num_rows;

if($rowCount > 0) {
    while($row = mysqli_fetch_array($query)){
        $price = $row['price']; 
        $pointRequired = $row['pointRequired'];

        echo "<option id='priceNew'>";
        echo "Price : $price" ?>&nbsp; <?php echo "Point: $pointRequired";
        echo "</option>";      
    }

    if($item){  
        $price = $_POST[price];//shows undefined 
        $query1 = mysqli_query($con, "SELECT id FROM tblprice WHERE item 
='$item'AND price ='$price'"); //it seems not picking up the same id with 
the item I selected above
        $rows = mysqli_fetch_array($query1);
        $id = (string) reset($rows);
        $barcodeNew = $id . $item;

        echo $barcodeNew;
    }
}

JavaScript的:

$(document).ready(function() {
$('#price-select').on('change', function(){
    var price = $(this).val($price); // This is where $price needs to copy
    if(price){
        $.ajax({
            type:'POST',
            url: 'functions/pos-getPrice.php',
            data: {price:price},  
            success:function(html){ 
                alert(price);
            }
        })
    }
 })
})//THIS CODE BLOCK IS PROBLEM 

问题是:

  1. $price = $_POST[price]会产生未定义的值
  2. 我尝试将$price复制到PHP脚本中,但它在我的脚本中逐字输出$price - 而不是$price中包含的值

1 个答案:

答案 0 :(得分:1)

问题1:

您需要将$_POST[price]更改为$_POST['price'],就像您刚刚在其上方一样。如果不将它包装在引号中,PHP将假设您正在尝试使用define()定义的常量。

问题2:

如果您正在使用vanilla PHP并且想要将一个变量注入脚本,那么您可以这样做:

var price = ($this).val(<?php echo json_encode($price); ?>);

这当然假设JavaScript是从您上面的相同PHP脚本生成的。

您可以阅读json_encode here的文档。

您的代码中也存在巨大的安全漏洞:

目前,您的脚本直接从用户请求中获取数据并将其放入SQL查询中。这可能导致SQL注入攻击。不好。

可以找到关于该主题的官方PHP文档here

<强>建议:

首先,我注意到你正在全球范围内做所有事情。我强烈建议您学习如何将代码包装在类和函数中;它会让事情变得更容易维护和测试。

搜索的好东西会让你走上正确的道路:

  • PHP面向对象编程(OOP)
  • PHP标准建议书(PSR)
  • PHP Composer

其次,以这种方式做事已经过时了,很容易遇到问题。我鼓励您研究更现代的框架,例如Laravel。您还可以查找单页应用程序(SPA)框架,例如VueAngularReact,这些框架与Laravel充当后端REST API非常有用。

祝你好运。

相关问题