我正在使用准备好的查询和将变量绑定到占位符。这是在插入数据时完成的。这是很好的工作,我通常没有问题。
然而,在我们的登记表上,有人将圣约翰的价值放入表单字段中。数据已经成功地写好了,从我的phpMyAdmin控制台看来也不错。但是,从该记录获取数据的任何尝试都不起作用。执行似乎没有失败,因为我在执行过程中进行了尝试/捕获,捕获将通过电子邮件发送给我。如果我移除撇号,那么我就可以正常地检索记录。
我到处搜索,我看到的只是人们说要使用预先准备好的陈述。我在用它们。他们还说addslashes()是一件坏事(我不这么说)。我也尝试过使用':hospital' => $db_pdo->quote($_POST['hospital']),但是结果是插入的字段有额外的撇号,我不想这样做。也许有某种不报价的方法?
另外,如果知道我将整行取为assoc_array,然后将其转换为json_encoding,这样我就可以将其发回解释为JavaScript,其中数组的每个部分都将被写入表单上的适当字段。
所以,我决定自己问一个问题。
示例代码:插入:':fname‘=> $_POST'fname',ENT_QUOTES,
检索:$db_pdo->pdo($statement_SQL);
$db_pdo->bind(':preregkey', $_POST['id']);
$retval_execute = $db_pdo->execute();
if($retval_execute){$retval_execute='true';}
else{$retval_execute = 'false';}
<br>";
$result = $db_pdo->statement->fetch(PDO::FETCH_ASSOC);
$output = json_encode($result);
echo "<script type='text/javascript'>";
echo " var formdata = '" . $output . "';";
echo "console.log('value: ', " . $_POST['id'] . ")" ;
echo "</script>";我使用$.post获取数据,我认为我在实际返回的字符方面有问题。我得到非法字符或意外标识符。因此,“数据”中的所有东西似乎都会被倾弃和丢失。
// Gather the information for one pre-reg record, put the data into the form, switch to the basic tab.
function displayrecord_prereg(id) {
// We were passed the id for the record, go get it!
$.post('admin-board_p.php', { o: 'displayrecord_prereg', id: id}, function(data) {
// Results have to go somewhere...
console.log('data: ', data);
$('#utilitydiv').html(data);
// Make the JSON_ENCODE array actually usable in Javascript.
var formdata2 = JSON.parse(formdata);
// Distribute the array of fields into their correct form field.
// Must do it within this part of the function.
$("#studentphoto").prop("value", formdata2['studentphoto']);
$("#grade").val(formdata2['grade']); 发布于 2014-07-02 02:53:15
马修·约翰逊( Matthew )最接近答案,因为他提醒我消毒DB数据的一个非常重要的步骤。不信任任何数据源,特别是如果数据是由验证的用户或仅由用户周期输入的。
经过大量的谷歌搜索和事实核查,我自己已经解决了这个问题。
我不知道为什么我可以从PHP中传递一个JSON_ENCODE数组并将其输出到div,并且它可以工作,但是如果数据中有单引号,它就不能工作。JSON_ENCODE数组在JavaScript中可以正常工作,除非某些数据中有单引号。
我使用$.post请求数据。这是简单和有效的,但我没有指定数据类型。$.post只是简化后Ajax的快捷方式,所以我决定阅读$.ajax。这允许我指定返回数据类型。此外,我发现没有必要将PHP的输出放到div中。无论如何,输出都会转到一个名为“data”的变量,将该“数据”放入div是可选的。如果您从PHP脚本中输出的唯一东西是一个JSON_ENCODE数组,那么JavaScript可以直接使用'data‘结果。我所犯错误的实际原因是我试图将无效字符的数据输入到div中。
我在互联网上到处寻找这个问题,希望有人能找到这个问题,并阅读以下代码:
JavaScript:
function displayrecordvalues(id) {
$.ajax({
url: 'handler.php',
data: { o: 'displayrecord', id: id } ,
type: "POST",
dataType: 'json'
})
.success(
function(formdata2){
$("#studentphoto").prop("value", formdata2['studentphoto']);
$("#grade").val(formdata2['grade']);
$("#birthday").prop("value", formdata2['birthday']);
$("#gender").prop("checked", true);
$("#fname").prop("value", formdata2['fname']);
$("#mname").prop("value", formdata2['mname']);
$("#lname").prop("value", formdata2['lname']);
... etc...
}
)
.fail(
function(data){
alert('error');
console.log( "Data:", data);
}
);
}PHP:.。将您的SQL数据行放入一个名为$result的变量中,删除任何不需要的字符,然后只回显一行,这将是本例中的最后一行。
// Intended for 1-row recordset
// Sanitize the data! (remember the '&' !)
$badchars = array("--", ";", );
foreach($result as &$v){
$v = strip_tags($v);
$v = htmlspecialchars($v);
$v = str_replace($badchars, "", $v);
}
echo json_encode($result);完成了!魔术。
https://stackoverflow.com/questions/24499016
复制相似问题