Php 输入的字段名仍插入到数据库中。(菲律宾)

Php 输入的字段名仍插入到数据库中。(菲律宾),php,validation,Php,Validation,我有以下验证代码: <?php $con=mysql_connect("localhost","root",""); mysql_select_db("nnx",$con); $tbl=mysql_query("SELECT * FROM tablename"); while($row=mysql_fetch_array($tbl)) { $name=$_POST['name']; $lname=$_POST['lname']; $add=$_POST['ad

我有以下验证代码:

<?php

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);

$tbl=mysql_query("SELECT * FROM tablename");
while($row=mysql_fetch_array($tbl))
{

    $name=$_POST['name'];
    $lname=$_POST['lname'];
    $add=$_POST['add'];
    $age=$_POST['age'];
    $contact=$_POST['contact'];
    $email=$_POST['email'];
    $user=$_POST['user'];
    $pass=$_POST['pass'];

   if(($name!="")&&($lname!="")&&($add!="")&&($age!="")&&($contact!="")&& ($email!="")&&($user!="")&&($pass!=""))
   {
      if ($_POST['user']==$row['username'])
      {
            header("location: /register.php?codeErr2=1");

      }

      else
      {
      $value=mysql_query("INSERT INTO tablename(name, lastname, address, age, contact,email, username, password) VALUES ('".$_POST['name']."','".$_POST['lname']."','".$_POST['add']."','".$_POST['age']."','".$_POST['contact']."','".$_POST['email']."','".$_POST['user']."','".$_POST['pass']."')");
  }
   }
   else 
   {
 header("location: /register.php?codeErr=1");
   }
}

您应该检查用户名并在重定向后死亡:

$tbl=mysql_query("SELECT * FROM tablename WHERE `username` = '".mysql_real_escape_string($_POST['user'])."'");
$row = mysql_fetch_assoc($tbl);
if ($_POST['user'] == $row['username']){
    header("location: /register.php?codeErr2=1");
    die;
}
您的代码易受SQL注入攻击:

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);

$tbl=mysql_query("SELECT * FROM tablename WHERE `username` = '".mysql_real_escape_string($_POST['user'])."'");
$row = mysql_fetch_assoc($tbl);
if ($_POST['user'] == $row['username']){
    header("location: /register.php?codeErr2=1");
    die;
}

$name= $_POST['name'];
$lname= $_POST['lname'];
$add = $_POST['add'];
$age = $_POST['age'];
$contact = $_POST['contact'];
$email = $_POST['email'];
$user = $_POST['user'];
$pass = $_POST['pass'];

if(($name!="") && ($lname!="") && ($add!="") && ($age!="") && ($contact!="") && ($email!="") && ($user!="") && ($pass!="")){
    $value=mysql_query("INSERT INTO tablename(name, lastname, address, age, contact, email, username, password)
    VALUES 
    ('".mysql_real_escape_string($name)."','".mysql_real_escape_string($lname)."','".mysql_real_escape_string($add)."','".mysql_real_escape_string($age)."',
    '".mysql_real_escape_string($contact)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($user)."',
    '".mysql_real_escape_string($pass)."')");
} else {
    header("location: /register.php?codeErr=1");
    die;
}
作为补充说明,您应该转到PDO或MySQLi,因为
mysql.*
函数已被弃用。 这是一个很好的教程,下面是一个示例:

$db = new PDO('mysql:host=localhost;dbname=nnx;charset=UTF-8', 'root', '', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION))

$stmt = $db->prepare("SELECT * FROM `tablename` WHERE `username` = :username");
$stmt->execute(array(':username' => $_POST['user']));
$row_count = $stmt->rowCount();
if($row_count){
    header("location: /register.php?codeErr2=1");
    die;
}

if(($name!="") && ($lname!="") && ($add!="") && ($age!="") && ($contact!="") && ($email!="") && ($user!="") && ($pass!="")){
    $stmt = $db->prepare("INSERT INTO `tablename`(`name`, `lastname`, `address`, `age`, `contact`, `email`, `username`, `password`) VALUES (:name, :lname, :address, :age, :contact, :email, :username, :password)");
    $stmt->execute(array(':name' => $_POST['name'], ':lname' => $_POST['lname'], ':address' => $_POST['add'], ':age' => $_POST['age'], ':contact' => $_POST['contact'], ':email' => $_POST['email'], ':username' => $_POST['user'], ':password' => $_POST['pass']));
} else {
    header("location: /register.php?codeErr=1");
    die;
}

这样,您的sql注入是免费的。

sql注入豪华版。帮自己一个忙,从mysql_*函数切换到PDO和准备好的语句。这通常也会稍微清理代码,因为您混合了SQL代码和逻辑。我建议您将一些部分封装到它自己的函数中。
<?php

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);

$name=$_POST['name'];
$lname=$_POST['lname'];
$add=$_POST['add'];
$age=$_POST['age'];
$contact=$_POST['contact'];
$email=$_POST['email'];
$user=$_POST['user'];
$pass=$_POST['pass'];

if(($name!="")&&($lname!="")&&($add!="")&&($age!="")&&($contact!="")&& ($email!="")&&($user!="")&&($pass!=""))
{
    $tbl=mysql_query("SELECT * FROM tablename where username = '{$user}'");
    $num_rows = mysql_num_rows($tbl);
    if($num_rows > 0){
        header("location: /register.php?codeErr2=1");
    } else {
        while($row=mysql_fetch_array($tbl))
        {
            $value=mysql_query("INSERT INTO tablename(name, lastname, address, age, contact,email, username, password) VALUES ('".$_POST['name']."','".$_POST['lname']."','".$_POST['add']."','".$_POST['age']."','".$_POST['contact']."','".$_POST['email']."','".$_POST['user']."','".$_POST['pass']."')");
        }
    }
} else {
    header("location: /register.php?codeErr=1");
}

?>