gpt4 book ai didi

php - 清理表单数据

转载 作者:行者123 更新时间:2023-11-29 04:25:37 26 4
gpt4 key购买 nike

在使用 HTML/CSS 构建网站后,我只是在学习 PHP 和脚本的基础知识。我正在尝试制作一个提交到数据库的简单表单,只是为了收集电子邮件地址和姓名。下面是我正在使用的基本代码。我对它做了一些调整,但没什么大不了的。我知道我需要清理这些数据,并且我已经阅读了很多关于如何执行此操作的帖子、文章等,但我只是不知道如何向其中添加 escape_string 或 PHP 函数。我以为我做到了,我已经尝试了几十种方法,但当我测试时,它们似乎没有任何区别。我知道这只是我的菜鸟无知,但我有点紧张,所以任何帮助都会很棒。

    <?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("my_db", $con);

$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";

mysql_close($con);
?>

@rwhite35 这就是最终结果的样子吗?

<?php
// sanitize a string in prep for passing a single argument to system() (or similar)
function sanitize_system_string($string, $min='', $max='')
{
$pattern = '/(;|\||`|>|<|&|^|"|'."\n|\r|'".'|{|}|[|]|\)|\()/i';
// no piping, passing possible environment variables ($),
// seperate commands, nested execution, file redirection,
// background processing, special commands (backspace, etc.), quotes
// newlines, or some other special characters
$string = preg_replace($pattern, '', $string);
//make sure this is only interpreted as ONE argument
$string = '"'.preg_replace('/\$/', '\\\$', $string).'"';
$len = strlen($string);
if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max)))
return FALSE;
return $string;
}

$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("form-try", $con);

$firstname = sanitize_system_string($_POST['firstname'],2,44);
$lastname = sanitize_system_string($_POST['lastname'],2,44);

$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";

mysql_close($con);
?>

最佳答案

您的代码容易出现 SQL Injection 。使用 PDO MYSQLI

使用 PDO 扩展的例子:

<?php

$stmt = $dbh->prepare("INSERT INTO Persons (FirstName, LastName, Age) VALUES (?,?,?)");
$stmt->bindParam(1, $_POST[firstname]);
$stmt->bindParam(2, $_POST[lastname]);
$stmt->bindParam(3, $_POST[age]);

$stmt->execute();

?>

这将允许您插入带有单引号的记录。

关于php - 清理表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354177/

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