【问题标题】:PHP: Textarea input validation against a database tablePHP:针对数据库表的文本区域输入验证
【发布时间】:2018-05-09 20:50:10
【问题描述】:

我正在尝试根据数据库表验证 textarea 输入。如果存在任何条目,则该表单被拒绝。如果没有找到条目,则接受表单并将 textarea 输入输入到数据库表中,每个换行符转到一个新行。

但我遇到了麻烦,以下脚本似乎跳过了验证部分,直接将 textarea 输入添加到数据库中。

<?php
if (isset($_GET["submit"])) {
}

$host = "localhost";
$user = "root";
$password = "password";
$database = "test";
// Establish server connection and select database
$dbh = mysqli_connect($host, $user, $password, $database);
  if (mysqli_connect_errno()) {
  die('Unable to connect to database ' . mysqli_connect_error());
  }
  else {
      $text = trim($_POST['serial']);
      $textAr = explode("\n", $text);
      $textAr = array_filter($textAr, 'trim'); // remove any extra \r chars
      foreach ($textAr as $line) {
               $query = mysqli_query($dbh, "SELECT serials FROM `wp27_test6serial` WHERE `serials` = '$line'");
               $result = mysqli_query($dbh, $query);
           if (mysqli_num_rows($result) > 0) {
                     die('entry already exists');
            }
           else {
                     $query = mysqli_query($dbh, "INSERT INTO wp27_test6serial (rtxserials) VALUES ('$line')");
                     echo ('serials submitted');
                }
            }
   }

谁能告诉我脚本有什么问题以及为什么在将 textarea 字符串插入数据库之前它没有验证?

谢谢

【问题讨论】:

    标签: php mysql validation


    【解决方案1】:

    您查询了两次。

    $query = mysqli_query($dbh, "SELECT serials FROM `wp27_test6serial` WHERE `serials` = '$line'");
    

    应该是

    $query = "SELECT serials FROM `wp27_test6serial` WHERE `serials` = '$line'";
    

    而且您的代码容易受到 SQL 注入攻击。使用准备好的语句。

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2010-10-27
      • 1970-01-01
      • 2014-12-25
      • 2016-08-29
      • 2015-09-24
      相关资源
      最近更新 更多