php - 使用 PHP 进行表单和 SQL 验证

标签 php html mysql validation mysqli

当用户点击保存时,检查数据是否成功插入记录到表中,并显示相应的信息。如果表单为空,则应显示错误消息并且数据库不应有任何记录。

//SAVE

if (isset($_POST['SAVE'])) {
    $Name = $_POST['name'];
    $City = $_POST['city'];
    $query = "Insert Into Info Values('$Name','$City')";
    $result = mysqli_query($con, $query) or die ("query is failed" . mysqli_error($con));
    $Name = '';
    $City = '';
    if(mysqli_affected_rows($con)>0) {
        echo "record is saved";
    }else {
        echo "record is not saved";
    }

我只能通过 php 进行验证。我不确定我是否做对了。到目前为止,我可以在我的表单上收到“记录已保存”消息,但如果表单为空,我将无法收到后者。它只是在我的数据库中创建一条空记录。

最佳答案

未经测试的代码:

if (!isset($_POST['SAVE'], $_POST['name'], $_POST['city'])) {  // avoid Notices
    echo "Missing required submission data";
} elseif (!strlen(trim($_POST['name']))) {  // validate however you wish
    echo "Name data is not valid";  // explain however you wish
} elseif (!strlen(trim($_POST['city']))) {  // validate however you wish
    echo "City data is not valid";  // explain however you wish
} elseif (!$con = new mysqli("localhost", "root", "", "db")) {  // declare and check for a falsey value
    echo "Connection Failure"; // $con->connect_error <-- never show actual error details to public
} elseif (!$stmt = $con->prepare("INSERT INTO Info VALUES (?,?)")) {
    echo "Error @ prepare"; // $con->error;  // don't show to public
} elseif (!$stmt->bind_param("ss", $_POST['name'], $_POST['city'])) {
    echo "Error @ bind";  // $stmt->error;  // don't show to public
} elseif (!$stmt->execute()) {
    echo "Error @ execute";  // $stmt->error;  // don't show to public
} else {
    echo "Insert Successful"; 
}

提交数据的验证条件确保值不为空且不完全由空白字符组成。如果您希望进一步细化验证要求,只需更新条件即可。

如果只想简单的保证$_POST['name']$_POST['city']不为空,可以替换前三个条件与

if (empty($_POST['SAVE']) || empty($_POST['name']) || empty($_POST['city'])) {
    echo "Submission data is missing/invalid";
}...

如果您不使用准备好的语句,那么像 Paul O'Malley 这样的名称值将破坏您的查询。更糟糕的是,如果有人想尝试运行一些注入(inject)攻击,您的查询就容易受到攻击。

检查 affected_rows() 是不必要的。如果查询执行没有错误消息,则 INSERT 查询成功。

以上建议都是我敦促您采纳的最佳做法。

关于php - 使用 PHP 进行表单和 SQL 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53037504/

相关文章:

php - 我似乎无法在 codeigniter 中上传 css 文件类型

html - 移动网站 : Detecting when images have been disabled

HTML/CSS - 不再悬停时保持悬停效果

javascript - 使用NodeJS + HTML建立MySQL数据库似乎不起作用

php - 使用 PDO 而不是 mysql_*

mysql - 多个 id 匹配和 Join 语句的 SQL 性能

php - 什么时候在 PHP 中使用 trait 是合适的?

php - 通过ajax获取单选按钮的值

php - mysql查询更新重复条目

html - 将应用程序 Logo 图像放在带有侧面菜单的 ionic 标题上