【问题标题】:Can't Select a table and insert something into it at the same time (Mysql)无法选择一个表并同时向其中插入一些东西(Mysql)
【发布时间】:2015-01-24 05:41:37
【问题描述】:

我有这个注册表单,当用户完成表单后,他最终会提交它,但我想检查用户名和电子邮件是否已经存在,简单吧? 试图解决这个问题已经 2 天了,但没有运气。 对不起,我没有使用最新版本的 MySQL,因为这是我在课堂上学到的唯一版本。我会学习改进的。

我在 Google 上做了很多研究,我发现这是一些 LOCK 之王,当我们插入表格时会被锁定..

if(isset($_POST['button'])){


    $query_global = mysql_query("SELECT Username FROM users WHERE Username = '".$_POST['username']."' ") or die(mysql_error());

        $row = mysql_num_rows($query_global);

        if($row == 1){
            $error_username = "The username is already registered, please choose another one <br>";
        }

        $query_email = mysql_query("SELECT Email FROM users WHERE Email = '".$_POST['email']."' ") or die(mysql_error());

        $row_email = mysql_num_rows($query_email);

        if($row_email == 1){
            $error_email = "This email : '".$_POST['email']."' is already registered ";
        }

    if(isset($_POST['Username'])) { $Username = $_POST['Username']; }
    if(isset($_POST['email'])) { $email = $_POST['email']; }



    $nom = $_POST['nom'];
    $sexe = $_POST['sexe'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $adresse = $_POST['adresse'];
    $ville = $_POST['ville'];
    $pseudo = $_POST['pseudo'];
    $mdp = $_POST['mdp'];
    $date = $_POST['date'];
    $profession = $_POST['profession'];


    // location where initial upload will be moved to
    $target = "images/" .$_FILES['uploaded']['name'] ;

    // find thevtype of image
    switch ($_FILES["uploaded"]["type"]) {
    case $_FILES["uploaded"]["type"] == "image/gif":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/jpeg":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/pjpeg":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/png":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/x-png":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;

    default:
        $error[] = 'Seulement les JPG, PNG ou GIF sont acceptés!.';
    }

    $error="";

    if (!$error) {

    $query = "INSERT INTO Users Values ('', '".$nom."', '".$sexe."', '".$email."', ".$tel.", '".$adresse."', '".$ville."',  '".$pseudo."', '".$mdp."', curdate(), '$target', '".$date."', '".$profession."')";
    $add_user = mysql_query($query) or die(mysql_error());

    header('Location: Login/index.php');

        }

    }


    //display any errors
    if (!empty($error))
    {
            $i = 0;
            echo "<p><span class='error'>";
            while ($i < count($error)){
            echo $error[$i].'<br />';
            $i ++;}
            echo "</span></p>";
    }

即使所有这些都解决了,是否有任何方法可以在输入错误时阻止表单提交,我的意思是我已经在另一个文件中尝试过它并且它有效,但是即使输入错误,表单也会被提交。

迫不及待想听到你的答案。

【问题讨论】:

  • 你应该将你的代码分割成functions - 它主要是你的缩进/结构使你的任务复杂化。然后阅读数据库转义,更好的是avoiding mysql
  • 你说得对,我实际上将插入到查询中分割成一个函数,现在一切正常!谢谢!!

标签: php mysql select insert


【解决方案1】:

你定义了两种类型的错误,一种是数组,另一种是字符串我认为此时不需要定义errors字符串。

数组

$errors[]

字符串

 $error="";

还将已经注册的电子邮件和用户值存储在错误数组中。试试下面。

if(isset($_POST['button'])){


    $query_global = mysql_query("SELECT Username FROM users WHERE Username = '".$_POST['username']."' ") or die(mysql_error());

        $row = mysql_num_rows($query_global);

        if($row == 1){
            $error_username = "The username is already registered, please choose another one <br>";
        $error[] = "The username is already registered, please choose another one <br>";
        }

        $query_email = mysql_query("SELECT Email FROM users WHERE Email = '".$_POST['email']."' ") or die(mysql_error());

        $row_email = mysql_num_rows($query_email);

        if($row_email == 1){
            $error_email = "This email : '".$_POST['email']."' is already registered ";
        $error[] = "This email : '".$_POST['email']."' is already registered ";
        }

    if(isset($_POST['Username'])) { $Username = $_POST['Username']; }
    if(isset($_POST['email'])) { $email = $_POST['email']; }



    $nom = $_POST['nom'];
    $sexe = $_POST['sexe'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $adresse = $_POST['adresse'];
    $ville = $_POST['ville'];
    $pseudo = $_POST['pseudo'];
    $mdp = $_POST['mdp'];
    $date = $_POST['date'];
    $profession = $_POST['profession'];


    // location where initial upload will be moved to
    $target = "images/" .$_FILES['uploaded']['name'] ;

    // find thevtype of image
    switch ($_FILES["uploaded"]["type"]) {
    case $_FILES["uploaded"]["type"] == "image/gif":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/jpeg":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/pjpeg":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/png":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;
    case $_FILES["uploaded"]["type"] == "image/x-png":
        move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
        break;

    default:
        $error[] = 'Seulement les JPG, PNG ou GIF sont acceptés!.';
    }



    if (empty($error)) {

    $query = "INSERT INTO Users Values ('', '".$nom."', '".$sexe."', '".$email."', ".$tel.", '".$adresse."', '".$ville."',  '".$pseudo."', '".$mdp."', curdate(), '$target', '".$date."', '".$profession."')";
    $add_user = mysql_query($query) or die(mysql_error());

    header('Location: Login/index.php');

        }

    }


    //display any errors
    if (!empty($error))
    {
            $i = 0;
            echo "<p><span class='error'>";
            while ($i < count($error)){
            echo $error[$i].'<br />';
            $i ++;}
            echo "</span></p>";
    }

【讨论】:

  • 感谢您的回答,我在我的网站中使用了这段代码的一部分。您对错误问题的看法是对的,我让自己感到困惑,但问题实际上与错误无关,我将插入查询分成一个函数,现在它似乎工作正常。再次感谢!
  • @user3179645 欢迎您,如果您接受此答案已解决,我将不胜感激。 :-)
【解决方案2】:

我认为您对所有错误变量感到困惑。

不要将错误存储在不同的变量中,而是使用单个数组来保存所有错误。如果提交了表单并且错误数组为空,则意味着一切正常。以下是它的外观:

$errors = array(); // this will contain all your errors

if (isset($_POST['button'])) {

    // store all your submitted values
    $nom = $_POST['nom'];
    $sexe = $_POST['sexe'];
    $Username = $_POST['Username'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $adresse = $_POST['adresse'];
    $ville = $_POST['ville'];
    $pseudo = $_POST['pseudo'];
    $mdp = $_POST['mdp'];
    $date = $_POST['date'];
    $profession = $_POST['profession'];

    // check username
    $query_global = mysql_query("SELECT Username FROM users WHERE Username = '". $Username ."'") or die(mysql_error());

    $row = mysql_num_rows($query_global);

    if($row == 1){
        $errors[] = "The username is already registered, please choose another one <br>";
    }

    // check email
    $query_email = mysql_query("SELECT Email FROM users WHERE Email = '". $email ."'") or die(mysql_error());

    $row_email = mysql_num_rows($query_email);

    if($row_email == 1){
        $errors[] = "This email : '". $email ."' is already registered ";
    }

    // location where initial upload will be moved to
    $target = "images/" .$_FILES['uploaded']['name'] ;

    // find thevtype of image
    switch ($_FILES["uploaded"]["type"]) {
        case $_FILES["uploaded"]["type"] == "image/gif":
            move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
            break;
        case $_FILES["uploaded"]["type"] == "image/jpeg":
            move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
            break;
        case $_FILES["uploaded"]["type"] == "image/pjpeg":
            move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
            break;
        case $_FILES["uploaded"]["type"] == "image/png":
            move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
            break;
        case $_FILES["uploaded"]["type"] == "image/x-png":
            move_uploaded_file($_FILES["uploaded"]["tmp_name"],$target);
            break;
        default:
            $errors[] = 'Seulement les JPG, PNG ou GIF sont acceptés!.';
    }

    // create user if no errors
    if (empty($errors)) {
        $query = "INSERT INTO Users Values ('', '".$nom."', '".$sexe."', '".$email."', ".$tel.", '".$adresse."', '".$ville."',  '".$pseudo."', '".$mdp."', curdate(), '$target', '".$date."', '".$profession."')";
        $add_user = mysql_query($query) or die(mysql_error());

        header('Location: Login/index.php');

    // otherwise display errors
    } else {
        $i = 0;
        echo "<p><span class='error'>";
        while ($i < count($errors)){
            echo $errors[$i] . '<br />';
            $i++;
        }
        echo "</span></p>";
    }
}

【讨论】:

  • 感谢您的回答,我在我的网站中使用了这个改进的代码。您对错误问题是对的,我让自己感到困惑,但问题实际上与错误无关,我将插入查询分成一个函数,现在它似乎工作正常。再次感谢!
【解决方案3】:

您没有任何东西可以阻止脚本运行

if($row_email == 1){
        $error_email = "This email : '".$_POST['email']."' is already registered ";
    }
else{

//all the rest of your code here

}

在检查它的值之前,您将 $error 设置为空,不确定目的是什么:

$error="";

if (!$error) {

【讨论】:

  • 感谢您的回答,您对错误问题的看法是正确的,但问题实际上与错误无关,我将插入查询分成了一个函数,现在似乎可以正常工作了.再次感谢。
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多