【问题标题】:php form submission to mysql databasephp表单提交到mysql数据库
【发布时间】:2014-05-25 12:26:33
【问题描述】:

我有一个注册表。在数据库中,用户名和电子邮件是唯一索引。当表单提交并且用户名或电子邮件已存在于数据库中时,不会插入这些值。我想通知用户未插入值。我该怎么做?

HTML

<form action="register.php" method="post" id="reg" onsubmit='return validate();'>
    Company Name: 
    <input type="text"  class="inputs" name="name" id="name" /><br />
    Email:
    <input type="text" class="inputs" name="email" id="txtEmail" /><br />
    User name:
    <input type="text"  class="inputs"  name="uname" id="uname"/><br />
    Password:
    <input type="password" class="inputs" name="pass" id="pass1"/><br />
    Conferm Password:
    <input type="password" class="inputs" name="cpass"  id="pass2"/><br /><br /> 
    <input type="submit" value="Register" class="button" />
</form>

register.php:

include ("db.php"); 
if (isset($_POST['register'])) { 
    echo $name = ($_POST["name"]); 
    echo $email = ($_POST["email"]); 
    echo $uname = ($_POST["uname"]); 
    echo $password = ($_POST["pass"]); 
    mysqli_query($con,"INSERT INTO company_profile(user_name, password, company_name, email, phone, country, activation_string) VALUES ('$uname','$password','$name','$email','','','')"); 
} 

【问题讨论】:

  • 先检查tue用户名是否存在,如果存在,就给用户发消息...
  • 到目前为止你的 PHP 代码是什么样的?
  • 包括(“db.php”); if (isset($_POST['register'])) { echo $name = ($_POST["name"]);回声 $email = ($_POST["email"]);回声 $uname = ($_POST["uname"]);回声 $password = ($_POST["pass"]); mysqli_query($con,"INSERT INTO company_profile(user_name, password, company_name, email, phone, country, activation_string) VALUES ('$uname','$password','$name','$email','',' ','')"); }
  • 请在您的问题中添加register.php。也许mysql_affected_rows 会帮助你。
  • 您的代码易受 SQL 注入攻击。请看prepared statements

标签: php html mysql forms phpmyadmin


【解决方案1】:

*又甜又短*

首先使用select查询检查用户名或电子邮件是否存在,如果结果为0(表示不存在),Insert查询将提前运行

<?php 
   if($_POST['register']){   
      $uname = $_POST['uname'];
      $email = $_POST['email'];
      $name= $_POST['name'];
      $pass= $_POST['pass'];
      $result =  mysqli_query($con, 'SELECT * from TABLE_NAME where email_id = "'.$email.'" or username = "'.$uname.'" ');
       if(mysqli_num_rows($result) > 0){
          echo "Username or email already exists.";
       }else{
         $query = mysqli_query($con , 'INSERT INTO TABLE_NAME (`email_id`, `username`,`name`,`pass`) VALUES("'.$email.'", "'.$email.'", "'.$uname.'","'.$name.'", "'.$pass.'")');

         if($query){
            echo "data are inserted successfully.";
         }else{
          echo "failed to insert data.";
         }
     } 
}
  ?>

【讨论】:

  • 请解释反对意见,以便我可以修复我的错误(如果有)? :-)
  • 不,我已经删除了评论;)我已经习惯了面向对象的 mysqli 风格,但我猜偏门程序风格也可以工作......你有我的投票!但正如@Marcel Balzer 已经评论的那样,使用准备好的语句来防止注入
【解决方案2】:

查询方法将返回真或假,具体取决于行是否已插入。

【讨论】:

    【解决方案3】:

    试试下面的代码

        include ("db.php"); 
        if (isset($_POST['register'])) 
        { 
        echo $name = ($_POST["name"]); 
        echo $email = ($_POST["email"]); 
        echo $uname = ($_POST["uname"]);
        echo $password = ($_POST["pass"]);
       $var = mysqli_query('SELECT * from company_profile where email_id = "'.$email.'" or username = "'.$uname.'" ');
    $num = mysqli_num_rows($var);
    if($num==0)
    {
        $result = INSERT INTO company_profile(user_name, password, company_name, email, phone, country, activation_string) VALUES ('$uname','$password','$name','$email','','','');
        $res = mysqli_query($result);
            if($res)
            {
            echo "Records Inserted Successfully!!";
            }
            else
            {
            echo "Records Inserted Failed!!";
            }
    }
    else
    {
    echo "User with the Details Already exists!!"
    }
         }
    

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 2023-03-15
      • 2018-01-12
      相关资源
      最近更新 更多