带有双引号的 JAVASCRIPT var 到 PHP 并返回用于自动填充

Posted

技术标签:

【中文标题】带有双引号的 JAVASCRIPT var 到 PHP 并返回用于自动填充【英文标题】:JAVA SCRIPT var with Double Quotes to PHP and back for Auto fill 【发布时间】:2018-10-14 11:07:13 【问题描述】:

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

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

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

感谢您帮助指出我在传递引号时失败的地方。 谢谢

为了更清楚起见,如果客户名称为 "Intel" 或 "Int'el" ,则代码有效,但当客户名称为 "国际“el

这里是 JAVA SCRIPT 函数,用于从 PHP 发送和接收数据:

!--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>

这里是 PHP 代码,它获取 POST 数据,执行查询,并将数组返回给 JAVA SCRIPT 自动填充:

<?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);

【问题讨论】:

【参考方案1】:

我认为你的 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();

【讨论】:

嗨,马克,您是在本地服务器还是在 php.ini 中启用 pdo 扩展? 并替换 SELECT * FROM customers WHERE customer = ? LIMIT 1 使用参数化的预处理语句 SELECT * FROM customers WHERE customer = :customer LIMIT 1 并替换 $stmt->execute([$safe_name]); with $stmt->execute(array(":customer":$safe_name)); 是的,它已启用,我使用的是 Raspbian(Raspberry pi 的 Debian 版本)。还尝试了您的更改,同样的事情,可以说“英特尔”但对于“Int'el”或“Int”el”它没有:\ 今天我发现即使两个单引号一个接一个(看起来像双引号'')仍然有效,只有双引号在我的原始代码中失败。也许是 JAVA SCRIPT 的问题?无法处理双引号并将它们正确传递给 PHP ?

以上是关于带有双引号的 JAVASCRIPT var 到 PHP 并返回用于自动填充的主要内容,如果未能解决你的问题,请参考以下文章

在带有 innerHTML 的 Javascript 中使用引号

有没有办法像在 javascript 中一样在 C# 中交替使用单引号和双引号?

当字符串在双引号内有单引号时,如何在Javascript中将此字符串转换为JSON对象

CMD命令中的参数带有双引号,如何转义双引号?

在将 Rails 变量用于 Javascript 时转义引号?

CMD命令中的参数带有双引号,如何转义双引号?