SPA简单注册用户名存储为“root”;而不是给定的用户名


SPA simple registration username stored as "root" instead of given username

我正在创建一个简单的SPA成员注册系统。注册后——用户被存储在数据库中——并被重定向到一个配置文件页面。似乎相当简单,然而,尝试注册为"乔",密码,"乔"和电子邮件,"joe@joe.com"后,我得到重定向到一个个人资料页面,显示我的用户名是"根"。我已经检查了以确保我的mysqli连接变量$username没有与数据的存储混合(因为它的值为"root")。下面是我的代码:

checkreglogin.php

<?php
session_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="bonjour3"; // Mysql password
$db_name="itit"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
$mysqli = new mysqli("$host", "$username", "$password", "$db_name")or die("cannot connect");
// Define $myusername and $mypassword
$rmyusername=$_POST['rmyusername'];
$rmypassword=$_POST['rmypassword'];
$myemail=$_POST['myemail'];
$sql2 = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=? and password=?");
$sql2->bind_param('ss',$rmyusername,$rmypassword);
$sql2->execute();
$sql2->store_result();//apply to prepare statement
$numRows = $sql2->num_rows;
if($numRows != null) {
    echo "Username taken.";
    session_destroy();
}
else {
    // Insert data into mysql
    $sql = "INSERT INTO $tbl_name(username, password, email)VALUES(?,?,?)";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("sss", $rmyusername, $rmypassword, $myemail);
    $stmt->execute();
    $_SESSION['username'] = $rmyusername;
}
?>

上面的脚本在用户注册时运行。然后他们被"重定向"(不是真的因为它是SPA)到下面的个人资料页面:

模板/login_success.php

<?php
session_start();
?>
<h1>Login Successful</h1>
<h2>Username: <? echo $_SESSION['username']?></h2>
<div id="logoutlinkdiv" >
    <a href = "#" >Log out</a>
</div>

用户名应该显示"joe",它说的是<? echo $_SESSION['username']?>,但它说的是"root"…

js/application.js

$(document).ready(function() {
$.get('templates/regform.php', function(data) {
    $('#register').html(data);
    $("#registerform").submit(function(e) {  
        e.preventDefault();
        if ($('#rmyusername').val() != '' || $('#rmypassword').val() != '' || $('#myemail').val() != '') {
            if(!isValidEmailAddress($('#myemail').val())) {
                alert("Please enter a valid email address");
            }
            else {
                $.post("checkreglogin.php", $(this).serialize(), function(){
                    $("#main").load("templates/login_success.php");
                    $("#login").remove();
                    $("#register").remove();
                });
            }
        } else {
            alert('Please enter a Username/Password and email.');
        }
    });
}); 
});

我将$_POST调用更改为$_GET调用,并且我使用url创建用户,并且它有效-但是我得到一个空白页面,上面有警告:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /Users/Eamon/Sites/checkreglogin.php:1) in /Users/Eamon/Sites/checkreglogin.php on line 3

我遇到了同样的问题,发现在我的include('mysqli_connect.php')变量$username已经为我的数据库连接的用户名采取/使用。它具有与我的注册表单相同的name变量。

我将mysqli_connect.php文件中的$username变量改为$uname = "root";这样它们就不会相互冲突