我之前使用过此代码,现在我再也无法使用了。密码很好地加载到数据库中,但用户名不会。用户名已正确标记。加载时,用户名为空。请帮忙。
我一直收到以下错误:
警告: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>
答案 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)
<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来解决此问题。