带有双引号的 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对象