【问题标题】:PHP on submit the variable 'passkey' drops stopping UPDATE to databasePHP在提交变量'passkey'时会停止更新到数据库
【发布时间】:2014-03-23 10:22:17
【问题描述】:

当用户选择他们的帐户激活链接时,他们会被带到一个网页,其中包含欢迎消息,并要求他们更新其帐户详细信息(设置自己的密码等)。 目前,欢迎请求工作正常,我的代码识别密码(显示在 URL 代码中)并打印用户名。但是,当用户选择“提交”按钮以更新表单中的详细信息时,我的问题似乎出现了。密钥的变量似乎下降了,即使我的 PHP 消息告诉我它是,在提交时详细信息也没有存储到数据库中。

这是我的代码:

<?php
session_start();
include "includes/header.php";
include "includes/connect.php";
?>
<link rel="stylesheet" type="text/css" href="css/login.css">
<div class="jumbotron">
    <h1>New users</h1>
    <p>Register your details</p>
</div>
    <?php
     $_SESSION['passkey']=$passkey;
     $passkey=$_GET['passkey'];

    $sql1="SELECT FirstName FROM users WHERE confirm_code ='$passkey'";
    $result1=mysqli_query($conn, $sql1);
    $count = mysqli_num_rows($result1);
    $updateactive="1";


    if ($count==1){
    $activeQuery = mysqli_query($conn, "UPDATE users SET Activate='$updateactive' WHERE confirm_code='$passkey'"); 
    if ($activeQuery) {

            $row = mysqli_fetch_row($result1);
            echo "Welcome " .$row[0]. " please update your details:";

        } else die('Invalid query: ' . mysqli_error());

    }else echo "Wrong Confirmation code";
    ?>

    <div class="container">
    <form class="form-activate" role="form" action="emailactivation.php" method="post">
        <h2 class="form-signin-heading">Register your details</h2>
        <p>*All fields are required</p>
        <input class="form-control" type="text" placeholder="Current password*" name="current_password" maxlength = "30" required autofocus>
        <input class="form-control" type="text" placeholder="New password*" name="new_password" maxlength = "30" required autofocus>
        <input class="form-control" type="text" placeholder="Confirm new password*" name="confirmnew_password" maxlength = "30" required autofocus>
        <select class="form-control" name="department_category">
            <option value="0">Department category*</option>
            <option value="1">Administrative services</option>
            <option value="3">Business Development</option>
            <option value="4">Health & Safety</option>
            <option value="5">Finance & Accounting</option>
            <option value="6">HR</option>
            <option value="7">IT</option>
            <option value="8">Legal</option>
            <option value="9">Research & Development</option>
            <option value="10">Sales</option>
            <option value="11">Science</option>
        </select>       
        <select class="form-control" name="role">
            <option value="0">Role*</option>
            <option value="1">Director</option>
            <option value="3">Manager</option>
            <option value="4">Graduate</option>
            <option value="5">Intern</option>
            <option value="6">Assistant</option>
            <option value="8">Head of department</option>
        </select>       
        <button class="btn btn-lg btn-primary btn-block" type="submit" name="submitdetails">Update details</button>  
    </form>
    </div>

    <?php
    if(isset($_POST['submitdetails'])){


    $rcpwd= trim($_POST['current_password']);
    $usrnewpwd= trim($_POST['new_password']);
    $usrconfirm_newpwd= trim($_POST['confirm_newpassword']);
    $usrdepartment=trim($_POST['department_category']);
    $usrrole=trim($_POST['role']);
        $updateactivationkey="2";
    $q2 = "SELECT * FROM users WHERE Password='$rcpwd' LIMIT 1;";
    $resultset2 = mysqli_query($conn,$q2);
    $rows2 = mysqli_num_rows($resultset2);

        if ($rows2==1){
            echo 'We will now update your details';
            //If all fields have data
        if (!empty($_POST)){

                        if($usrdepartment!=0){ 
                            if($usrrole!=0){
                echo"hello1";
                        //  $updateQuery = mysqli_query($conn,  "UPDATE users SET Password='$usrnewpwd', DepartmentID='$usrdepartment', RoleID='$usrrole' WHERE FirstName='$row[0]';"); 



        $updateQuery = mysqli_query($conn, "UPDATE users SET Activate='$updateactivationkey' WHERE confirm_code='$passkey';"); 

                            /
                            if ($updateQuery) {
                                echo 'Details have been added';



                            }else  die('Invalid query: ' .   mysqli_error());
                        }

                        else echo 'warning 1';
                    }
                    else echo 'warning2';
            } 
            else echo 'warning3'; 
        }
    else echo'<div class="login-error">Please fill in all fields</div>';
    }

    ?>
    <?php
    require "footer.php";
    ?>

感谢您对此事的任何建议,以便我可以根据用户更新结果。 提前致谢。

【问题讨论】:

    标签: php mysql variables get


    【解决方案1】:

    在表单中添加一个隐藏字段为

    <input type="hidden" name="passkey" value = "<?php echo $passkey ;?>">
    

    因此,一旦您提交表单,您就可以将数据检索为

    $passkey = $_POST["passkey"]
    

    【讨论】:

    • 谢谢,这使我能够更新我的数据库。但是由于某种原因,当我点击提交时,欢迎消息变为错误消息 Wrong Confirmation code,有什么想法吗?
    • 你可以检查视图源,看看它是否在隐藏字段中添加了正确的值,并且在获取数据时最好使用 trim()。
    • 啊,我看到做某事在顶部添加 if(isset($_GET["passkey"])) {} 的内容,您使用 get 获取密码并在该部分添加第一组代码。由于一切都发生在同一页面中,因此第一次密码可通过 GET 获得,但在通过 POST 提交时,第一个代码将不会执行。
    • 查看查看源代码。在提交之前,值就在那里。提交后为空。我最好没有那个错误吗?我需要某种错误控制,因为如果密码错误怎么办。
    • 好的,我按照建议放置了 if(isset($_GET) 位。错误现在已经消失,除了数据库已更新之外,没有其他消息显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2021-05-13
    • 2014-11-21
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多