如何实现带有双引号到PHP的Java脚本var和用于自动填充的Back?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (63)

有一个HTML / PHP表单,它使用JAVA SCRIPT函数将输入内容发送(POST)到PHP代码,该代码执行查询并返回到JAVA SCRIPT函数,数据自动填充表单中的其他输入。

当我发送的输入内容是纯文本时,即使在其工作的内容中有单引号,这一切都很有效。

但是,只要输入内容中包含双引号,它就无法返回自动填充结果。

感谢您的帮助,指出我在哪里通过引号失败。谢谢

  • 只是为了使其更清晰,代码工作,如果客户名称为“ 英特尔 ”或“ Int'el ”,但是当客户的名字是“失败诠释”厄尔尼诺

以下是从PHP发送和接收数据的JAVA SCRIPT函数:

!--Script Auto fill ltd by customer -->
<script type="text/javascript">
function updatefrm() {
    setTimeout(function(){
            var customer = $('#customer').val();
            if ($.trim(customer) !='') {
            $.post('customerfill.php', {customer: customer}, function(data) {
                $('#customerupdate').val(data['customer']);
                $('#ltdupdate').val(data['ltd']);

                });
               }
    }, 10);
   } 
 </script>

以下是获取POST数据,执行查询以及发回JAVA SCRIPT自动填充数组的PHP代码:

<?php
if (!empty($_POST['customer'])) {

$DB_Server = "localhost"; // MySQL Server
$DB_Username = "XXXX"; // MySQL Username
$DB_Password = "XXXX"; // MySQL Password
$DB_DBName = "XXXXXXXX"; // MySQL Database Name

$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Failed to connect to MySQL:<br />" . mysql_error() . "<br />" . mysql_errno());
// Select database
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Failed to select database:<br />" . mysql_error(). "<br />" . mysql_errno());
      mysql_query('SET NAMES utf8');
      mysql_query('SET CHARACTER SET utf8');


$safe_name = mysql_real_escape_string(trim($_POST['customer']));

$query = mysql_query(" SELECT * FROM customers WHERE customer = '". $safe_name ."' LIMIT 1 ");

if (mysql_num_rows($query) > 0) {
    $row = mysql_fetch_assoc($query);
    json($row);
} else {
    json(null);
}
}

function json ($array) {
header("Content-Type: application/json");
echo json_encode($array);
}
提问于
用户回答回答于

我认为你的js代码很好,我认为你的PHP代码和该行中的错误

$query = mysql_query(" SELECT * FROM customers WHERE customer = '". $safe_name ."' LIMIT 1 ");

所以你应该使用PDO Prepared Statements来保证安全,而不是双引号问题

$dsn = "mysql:host=localhost;dbname=your_database;charset=utf8mb4";
try {
  $pdo = new PDO($dsn, "database_username", "database_password");
} catch (Exception $e) {
    echo "no connection";
    exit();
}

$stmt = $pdo->prepare("SELECT * FROM customers WHERE customer = :customer LIMIT 1");
$stmt->execute(array(":customer"=>$safe_name));
$row = $stmt->fetch();

扫码关注云+社区

领取腾讯云代金券