PHP表格处理,php表格处理错误

有趣的html获取用户输入

形成

处理中

使用php处理表格

我使用Mysqli连接方法的形式连接

使用$_POST[value]从用户获取价值警告do not access super Global array Directly

我如何使用SQL注入方法检查此方法,并且在查看此链接后需要困惑的帮助如何防止PHP中的SQL注入?

表格处理

$db_username ="sanoj";

$db_password ="123456";

try {

#connection$conn = new PDO('mysql:host=localhost;dbname=localtest', $db_username, $db_password);

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$data = $conn->prepare('INSERT INTO test (first, last) VALUES (:first, :last)');

$first = mysql_real_escape_string($_POST['first']);

$last = mysql_real_escape_string($_POST['last']);

$data->execute(array(':first' => $first, ':last' => $last));

#exception handiling} catch (PDOException $e) {

echo $e->getMessage();

}

?>

错误

当我运行上述代码时,出现此错误Deprecated: mysql_real_escape_string(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\Users\logon\Documents

etBeansProjects\teste local\for.php on line 11

这是唯一的提示,因为您正在使用mysql_real_escape_string(),而wici是deprecated,是否可以将任何东西插入数据库

@ Arif_suhail_123数据已插入,但出现如上所述的错误

只需使用此php.net/manual/en/mysqli.real-escape-string.php

检查答案。 希望它能解释一些事情

试试这个你不会得到任何错误或警告

$db_username ="sanoj";

$db_password ="123456";

try {

#connection$conn = new PDO('mysql:host=localhost;dbname=localtest', $db_username, $db_password);

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$data = $conn->prepare('INSERT INTO test (first, last) VALUES (:first, :last)');

$first = filter_input(INPUT_POST, 'first');

$last = filter_input(INPUT_POST, 'last');

$data->execute(array(':first' => $first, ':last' => $last));

#exception handiling} catch (PDOException $e) {

echo $e->getMessage();

}

?>

注意:还有一件事。您不必在这里使用mysqli_real_escape_string,因为PDO会处理它。因此您只需设置您的值即可。并在您的query中使用它们

尝试这个

$db_username ="sanoj";

$db_password ="123456";

**Move your value outside of query**

try {

#connection$conn = new PDO('mysql:host=localhost;dbname=localtest', $db_username, $db_password);

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$first = mysqli_real_escape_string($conn,$_POST['first']);//Like this

$data = $conn->prepare('INSERT INTO test (first, last) VALUES (:first, :last)');

$data->execute(array(':first' => $first, ':last' => $last));

#exception handiling} catch (PDOException $e) {

echo $e->getMessage();

}

?>

您收到的错误通知您知道mysql_real_escape_string已贬值。

检查此链接php.net/manual/en/mysqli.real-escape-string.php

stackoverflow.com/questions/14012642/这是一种不好的做法,只是临时解决方法,可以摆脱通知。

数据未插入表中坏主意

它的无用没有发生仍然是负面结果

即使我添加了最后输入也没有任何反应

由于您使用的是PDO准备好的语句来执行SQL查询,因此无需手动转义SQL Injection的输入。

您可以在提交参数时传递它们:

$first = $_POST['first'];

$last = $_POST['last'];

$data->execute(array(':first' => $first, ':last' => $last));

扩展程序将负责其余的工作。

注意:这仅是警告,当您尝试在新版本的PHP中使用mysql_*扩展功能时,都会得到警告。

注意2:这仅能保护您免受SQL Injection攻击,因此请记住,恶意用户还可以通过多种其他方式使用XSS和无数其他攻击来利用您的代码。

**更新**

如果谨慎处理该变量,则不必担心警告。要摆脱它,您可以使用:

$first = filter_input(INPUT_SERVER, 'first', FILTER_SANITIZE_STRING)

$last = filter_input(INPUT_SERVER, 'last', FILTER_SANITIZE_STRING)

NetBeans 7.4 for PHP上警告"不要直接访问Superglobal $ _POST阵列"

什么是最好的方法来保护免受这种或我可以使用什么方法

正如我在回答中所说,由于您正在使用准备好的语句,因此您已经受到MySQL注入的保护,而mysqli真正的转义字符串可以保护您免受这种类型的攻击。

无论如何,但是我如何添加mysql_real_escape_string ???

您不必,那就是重点。 因为您正在使用PDO,所以只需按照我的答案使用代码即可。

收到警告时不要直接访问超级全局$ _POST

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值