无法将用户名加载到数据库中

时间:2014-06-05 00:06:48

标签: php mysql

我之前使用过此代码,现在我再也无法使用了。密码很好地加载到数据库中,但用户名不会。用户名已正确标记。加载时,用户名为空。请帮忙。

我一直收到以下错误:

  

警告:mysqli_query()需要至少2个参数,在第55行的C:\ xampp \ htdocs \ signup.php中给出。

我知道错误意味着什么。我现在不知道为什么$ createusername不作为参数读取...

<?php
    $createusername = (isset($_GET['createusername']) ? $_GET['createusername'] : null);
$createpassword = (isset($_POST['createpassword']) ? $_POST['createpassword'] : null);
$confirmpassword = (isset($_POST['confirmpassword']) ? $_POST['confirmpassword'] : null);


function unique_salt() {
    return substr(sha1(mt_rand()),0,22);
}
$unique_salt = unique_salt();


function myhash($createpassword, $unique_salt) {
    return crypt($createpassword, '$2y$10$'.$unique_salt);
}
$myhash = myhash($createpassword, $unique_salt);

$con=mysqli_connect("mysite","mylogin","mypassword","mydatabase");


if (mysqli_connect_errno()) {
  echo "Failed to connect to database." . mysqli_connect_error();
}

$sql=mysqli_query("INSERT INTO Users (username, password) VALUES ('$createusername', '$myhash')");


if($createpassword != $confirmpassword) {
    trigger_error("The passwords do not match.");
}else {
$sql;
}
mysqli_close($con);
?>

<

div style="color:#000047;margin-top:60px;">
<form id='newuser' accept-charset='UTF-8' style='margin-top:-45px;'> 
<fieldset > 
<legend style="font-family:verdana;color:#000047;">New User</legend> 
<input type='hidden' name='submitted' id='submitted' value='1'/>   
<label for='createusername' >Create UserName:</label> 
<input type='text' id='createusername'  method='get' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>   
<label for='createpassword' >Create Password:</label> 
<input type='text' id='createpassword' method='post' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
<label for='createpassword' >Confirm Password:</label> 
<input type='text' id='confirmpassword' method='post' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
<input type="image" id="login2" method='post' src="/images/submit.jpg" alt="Submit" style="vertical-align:bottom" />    
</fieldset> 
</form> 
</div>
<h3>Please sign in after registration.</h3>
<a href="index.php"><h3>Sign In</h3></a>

3 个答案:

答案 0 :(得分:2)

你在这里见过的人,这是你从好的弗雷德身上看到的最后一个答案。

我正在退休给予答案。它的评论只有帮助。


按原样,您的表单没有方法,因此默认为GET。另外,您正在使用2x POST条件。那些不会工作的人。您可以在method="post"内添加<form...并使用我的其他建议,也可以将所有$_POST更改为$_GET

另外这个<input type="image" id="login2" method='post' aaahhhh我现在看到了。从那里删除method='post'。那是无效的。它属于form

此外,您使用的是输入中的方法,但未命名哪些方法无效,但仅限于id

但我对一些事情不确定。

这样:

else {
$sql;
}

trigger_error() - 我在您的代码中看不到该名称的功能,这可以很好地解释为什么您没有收到错误,说明密码不匹配。

  

您的评论:&#34;另外值得注意的是,当密码不正确时,不会触发错误。&#34;

如果您没有这样的功能,请将其替换为回声,然后替换为exit()die()

您的查询属于$sql;所在的位置,而不仅仅是杂散变量。

另一件事是您没有将DB连接传递给您的查询:

$sql=mysqli_query($con,"INSERT...是应该使用的。

旁注:不建议使用type="text"来获取密码字段。这些已更改为type="password"

请改用它,但我建议您使用两个不同的文件。一个用于表单,一个用于PHP / SQL。就目前而言,您的代码将尝试连接并立即执行查询。通常的方法是查看是否所有字段都不为空,以查看是否设置了提交按钮,但这取决于您。以下作品。

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$createusername = (isset($_POST['createusername']) ? $_POST['createusername'] : null);
$createpassword = (isset($_POST['createpassword']) ? $_POST['createpassword'] : null);
$confirmpassword = (isset($_POST['confirmpassword']) ? $_POST['confirmpassword'] : null);


function unique_salt() {
    return substr(sha1(mt_rand()),0,22);
}
$unique_salt = unique_salt();

function myhash($createpassword, $unique_salt) {
    return crypt($createpassword, '$2y$10$'.$unique_salt);
}
$myhash = myhash($createpassword, $unique_salt);

$con=mysqli_connect("mysite","mylogin","mypassword","mydatabase");

if (mysqli_connect_errno()) {
  echo "Failed to connect to database." . mysqli_connect_error();
}

if($createpassword != $confirmpassword) {
    // trigger_error("The passwords do not match.");

    die("The passwords do not match.");
}else {

$sql=mysqli_query($con,"INSERT INTO Users (username, password) VALUES ('$createusername', '$myhash')");
}
mysqli_close($con);
?>

<div style="color:#000047;margin-top:60px;">
<form id='newuser' accept-charset='UTF-8' style='margin-top:-45px;' method='post'> 
<fieldset> 
<legend style="font-family:verdana;color:#000047;">New User</legend> 
<input type='hidden' name='submitted' id='submitted' value='1'/>   
<label for='createusername' >Create UserName:</label> 
<input type='text' name='createusername' id='createusername' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>   
<label for='createpassword' >Create Password:</label> 
<input type='password' name='createpassword' id='createpassword' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
<label for='confirmpassword'>Confirm Password:</label> 
<input type='password' name='confirmpassword' id='confirmpassword' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
<input type="image" id="login2" src="/images/submit.jpg" alt="Submit" style="vertical-align:bottom" />    
</fieldset> 
</form> 
</div>
<h3>Please sign in after registration.</h3>
<a href="index.php"><h3>Sign In</h3></a>

检查空字段的替代方法:

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

$createusername = (isset($_POST['createusername']) ? $_POST['createusername'] : null);
$createpassword = (isset($_POST['createpassword']) ? $_POST['createpassword'] : null);
$confirmpassword = (isset($_POST['confirmpassword']) ? $_POST['confirmpassword'] : null);

function unique_salt() {
    return substr(sha1(mt_rand()),0,22);
}
$unique_salt = unique_salt();

function myhash($createpassword, $unique_salt) {
    return crypt($createpassword, '$2y$10$'.$unique_salt);
}
$myhash = myhash($createpassword, $unique_salt);

$con=mysqli_connect("mysite","mylogin","mypassword","mydatabase");

    if (mysqli_connect_errno()) {
      echo "Failed to connect to database." . mysqli_connect_error();
    }

    if($createpassword != $confirmpassword) {
        // trigger_error("The passwords do not match.");

        die("The passwords do not match.");
    }

if(!empty($_POST['createusername']) && !empty($_POST['createpassword']) && !empty($_POST['confirmpassword']) ){
    $sql=mysqli_query($con,"INSERT INTO Users (username, password) VALUES ('$createusername', '$myhash')");

if($sql){
echo "Success";
}

    else{
    throw new Exception($con->error);
    }
}

mysqli_close($con);

?>

<div style="color:#000047;margin-top:60px;">

<form id='newuser' accept-charset='UTF-8' style='margin-top:-45px;' method='post'>

<fieldset> 
<legend style="font-family:verdana;color:#000047;">New User</legend> 
<input type='hidden' name='submitted' id='submitted' value='1'/>   
<label for='createusername' >Create UserName:</label> 
<input type='text' name='createusername' id='createusername' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>   
<label for='createpassword' >Create Password:</label> 
<input type='password' name='createpassword' id='createpassword' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
<label for='confirmpassword'>Confirm Password:</label> 
<input type='password' name='confirmpassword' id='confirmpassword' maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
<input type="image" id="login2" src="/images/submit.jpg" alt="Submit" style="vertical-align:bottom" />    
</fieldset> 
</form>

</div>
<h3>Please sign in after registration.</h3>
<a href="index.php"><h3>Sign In</h3></a>

答案 1 :(得分:1)

For a better answer, view Fred -ii- 's answer here.


你的表格解释了一切。你正在以错误的方式处理它。你应该拥有的是一个看起来像这样的表格:

<form action="" method="post">
    <fieldset > 
        <legend style="font-family:verdana;color:#000047;">New User</legend> 
        <input type='hidden' name='submitted' id='submitted' value='1'/>   
        <label for='createusername' >Create UserName:</label> 
        <input type='text' id='createusername' name="createusername" maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>   
        <label for='createpassword' >Create Password:</label> 
        <input type='text' id='createpassword' name="createpassword" maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
        <label for='createpassword' >Confirm Password:</label> 
        <input type='text' id='confirmpassword' name="confirmpassword" maxlength="50" style="background-color:#000047;color:#FFFFFF;"/>
        <input type="image" id="login2" src="/images/submit.jpg" alt="Submit" style="vertical-align:bottom" />    
    </fieldset> 
</form>

正如您所看到的,您的表单input元素需要method标记。然而;他们确实需要一个name标记,您可以在上面的表单中看到它们。

这将允许您访问$_POST数组并获取变量:

$createusername = (isset($_POST['createusername']) ? $_POST['createusername'] : null);
$createpassword = (isset($_POST['createpassword']) ? $_POST['createpassword'] : null);
$confirmpassword = (isset($_POST['confirmpassword']) ? $_POST['confirmpassword'] : null);

我的意思是,他们确实制定了指导原因。因此,遵循它们只会是实际的。


一些阅读

答案 2 :(得分:0)

在您的查询中,您需要提供连接:

$sql = mysqli_query($con, "INSERT INTO Users (username, password) VALUES ('$createusername', '$myhash')");

如果您使用object oriented版本,则无需传递连接,因为它存储在对象中。


作为旁注,您的代码很容易受到SQL注入攻击。您可以通过过滤输入或使用parameterised queries来解决此问题。