gpt4 book ai didi

php - 即使在使用 mysqli_real_escape_string 之后,数据库也不允许特殊字符

转载 作者:行者123 更新时间:2023-11-29 00:02:24 25 4
gpt4 key购买 nike

我在 SO 上发现了很多这样的问题并遵循了解决方案,但在我的情况下没有用。

我想把+插入数据库,所以我用了

$tex5=mysqli_real_escape_string($connect_dude,$_POST['text5']);

但这不会插入 +。它会在数据库中提供空白空间。

请注意,我正在使用准备语句参数化查询。这是数据库不允许+的原因吗?如果是,我该如何解决?

感谢您的宝贵时间。

代码

Javascript

//call con_edi() on first button clicked.insert email on text field and click button would fire off change5()    

function con_edi(){
document.getElementById("alu").innerHTML="<input type='text' id='taxi' style='border:1px solid black;'><input type='submit' id='' onclick='change5(taxi.value)' value='change'>";
}

function change5(s){
var form=s;
if(!form.match(/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/)){
alert("Wrong Email");
}else{
//document.write(form); /*for testing the output*/
var ajax=new XMLHttpRequest();
ajax.open("post","contact.php",true);
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
ajax.onreadystatechange=function(){
if(ajax.readyState == 4 && ajax.status == 200){

location.reload();

}
}

ajax.send("text5="+form);
}
}

PHP

$tex5=mysqli_real_escape_string($connect_dude,$_POST['text5']);
$query6="UPDATE `$database`.`header` SET email=? WHERE user_id=?";

mysqli_stmt_prepare($stmt1, $query6);
mysqli_stmt_bind_param($stmt1, "si", $tex5, $logged_id);
mysqli_stmt_execute($stmt1);

最佳答案

您需要对要发送的值进行正确的 URL 编码。

现在,您正在发送 text5=lkf+alu@craftwebart.com – 在此 URL 上下文中,+ 是空格字符的“替换”字符.这就是为什么您的脚本将空格字符插入数据库的原因,而不是因为插入数据库本身有问题。 (尽管如前所述,将 mysqli_real_escape_string 与准备好的语句结合使用 是错误的。mysqli_real_escape_string 用于屏蔽插入到 SQL 中的特殊字符直接语法,这样它们就不会与实际的 SQL 语法混淆。但是,当使用带占位符的准备语句时,SQL 命令和数据将彼此分开地发送到数据库,因此在这种情况下不存在危险。)

所以,你需要使用

ajax.send("text5="+encodeURIComponent(form));

将您的数据发送到服务器。 encodeURIComponent负责为 URL 上下文正确编码数据。它会将 + 字符转换为 %2B,以便它可以在该上下文中安全地发送,PHP 会将其解码回 + 自动。

关于php - 即使在使用 mysqli_real_escape_string 之后,数据库也不允许特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29178824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com