我正在为招聘机构制作一个原型网站,我遇到了将数据上传到为这个原型系统创建的数据库的问题。这是注册一个新的用户页面,它不会将html文本字段中的任何信息发送到数据库。
这是我的代码 -
<?php
require (__DIR__.'/connections/connections.php');
if(isset($_POST['Register'])){
session_start();
$Title = $_POST['Consultant_Title'];
$Fname = $_POST['Consultant_First_Name'];
$Lname = $_POST['Consultant_Last_Name'];
$Cbranch = $_POST['Consultant_Branch'];
$Email = $_POST['Email'];
$Username = $_POST['Username'];
$Password = $_POST['Password'];
$StorePassword = password_hash($Password, PASSWORD_BCRYPT, array('cost' => 10));
$spl = $con->query("INSERT INTO consultant_details (Title, Fname, Lname, Cbranch )Values('{$Title}', '{$Fname}', '{$Lname}', '{$Cbranch}')");
$spl = $con->query("INSERT INTO users ( Email, Username, Password )Values('{$Title}', '{$Email}', '{$Username}', '{$StorePassword}')");
header('location: Login.php');
}
?>
Html -
<h2>Staff Register </h2>
<div class="clr"></div>
<form action="" method="post" name="Registerform" id="Registerform">
<div class="FormElement"><select style="font-size: medium;">
<option name="Consultant_Title" id="Consultant_Title" value="Mr">Mr</option>
<option name="Consultant_Title" id="Consultant_Title" value="Mrs">Mrs</option>
<option name="Consultant_Title" id="Consultant_Title" value="Miss">Miss</option>
<option name="Consultant_Title" id="Consultant_Title" value="Ms">Ms</option>
<option name="Consultant_Title" id="Consultant_Title" value="Dr">Dr</option>
<option name="Consultant_Title" id="Consultant_Title" value="Professor">Professor</option>
</select></div>
<div class="FormElement">
<input name="Consultant_First_Name" type="text" required="required" class="TField" id="Consultant_First_Name" placeholder="First Name"> <input name="Consultant_Last_Name" type="text" required="required" class="TField" id="Consultant_Last_Name" placeholder="Last Name">
</div>
<div class="FormElement">
<input name="Username" type="text" required="required" class="TField" id="Username" placeholder="Username"> <input name="Password" type="text" pattern=".{6,}" required title="6 characters minimum" class="TField" id="Password" placeholder="Password">
</div>
<div class="FormElement">
<input name="Consultant_Branch" type="text" required="required" class="TField" id="Consultant_Branch" placeholder="Consultant Branch"> <input name="Email" type="text" required="required" class="TField" id="Email" placeholder="Email">
</div>
<div class="FormElement"><input name="Register" type="submit" class="button" id="Register" value="Register"></div>
</form>
答案 0 :(得分:5)
正如评论中所述,<select>
包含name属性,而不是<option>
。然后,值将从value="x"
给出的值中填充。
然后,您在第二个查询中有3列和4个值(缺少“标题”列)并尝试执行multi-query。
请参阅以下链接
并将其应用于您的代码。
另一件事,因为您正在使用password_hash()
,请使用带有该语句的预准备语句。
您对SQL注入持开放态度。请参阅Stack上的以下内容:
您的连接也是未知的,无论是MySQL_,还是MySQLi_或PDO。
不同的API不会混用,因此从连接到查询使用相同的MySQL API,称之为洞察。
要检查查询真正是否成功,请使用affected_rows()
:
PHP有一组专门用于处理密码哈希的函数。
如果您使用的PHP版本低于5.5,则可以使用password_hash()
compatibility pack。
阅读this tutorial,了解如何将这些内容付诸实践。
答案 1 :(得分:0)
首先将name属性放在select标签
中<div class="FormElement"><select name="Consultant_Title" style="font-size: medium;">
<option id="Consultant_Title" value="Mr">Mr</option>
<option id="Consultant_Title" value="Mrs">Mrs</option>
<option id="Consultant_Title" value="Miss">Miss</option>
<option id="Consultant_Title" value="Ms">Ms</option>
<option id="Consultant_Title" value="Dr">Dr</option>
<option id="Consultant_Title" value="Professor">Professor</option>
</select></div>
在您的查询中第二次错过提及标题,并且您在值中提供了
$spl = $con->query("INSERT INTO users ( Title, Email, Username, Password ) Values('{$Title}', '{$Email}', '{$Username}', '{$StorePassword}')");
答案 2 :(得分:0)
在每个查询之后尝试处理有关查询的任何mysql错误。
实施例。
$spl = $con->query("INSERT INTO users ( Email, Username, Password )
Values ('{$Title}', '{$Email}', '{$Username}', '{$StorePassword}')"
or die(mysqli_error($con)));
这将指导您处理mysql错误。