我正在尝试输入我从两个变量stuname获得的数据,并在表格的用户名和书籍列中预订!我只想将数据输入这两列,因为id列是自动增量,日期是自动更新的时间戳!!!每次运行我的代码时,我都会将数据输入到两个文本字段中,当我按下提交时,我会收到此消息!!
Warning: mysqli_select_db() expects exactly 2 parameters, 1 given in C:\xampp\htdocs\assignment.php on line 35
Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\assignment.php on line 36
这是我的代码:
<?php
$servername = "localhost";
$Username = "root";
$Password = "admin";
$Dbname = "nfc";
$conn = mysqli_connect($servername, $Username, $Password, $Dbname);
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "Connected successfully";
if(isset($_POST["stuname"])&&($_POST["book"]))
{
$stuname = $_POST["stuname"];
$book =$_POST["bookname"];
$sql = "INSERT INTO library (id, username, book, date)
VALUES ('', '$stuname', '$book','')";
mysqli_select_db($conn, 'nfc') or die(mysqli_error($con));
$retval = mysqli_query( $sql, $conn );
if(! $retval )
{
die('Could not enter data: ' . mysql_error());
}
else
{
echo "Success";
}
echo " to stuname ". $stuname;
echo " to book ". $book;
}
?>
<form id="form1" name="form1" method="post" action="#">
<p>
<label for="1">student name</label>
<input type="text" name="stuname" id="1" />
</p>
<p>
<label for="12">book name</label>
<input type="text" name="bookname" id="12" />
</p>
<input name="submit" type="submit" value="Submit" />
</form>
答案 0 :(得分:1)
在 mysqli_query 中,您应首先输入conn然后再将查询本身放入
$retval = mysqli_query( $conn, $sql );
答案 1 :(得分:1)
@Ghost在评论中解决了第一个问题。
现在解决其他问题:
<强> 1。您的数据库设计有问题
这应该立即失败,因为你要为id插入一个空值。 id应该是主键,因此应该是唯一的。如果插入空值,则自动增量不起作用。
<强> 2。您的插入声明有问题
您应该在INSERT语句中排除自动增量列,并且不应对date
使用空值。如果date
是时间戳,则应该使用NULL
(如果时间应该为空)或使用NOW()
来使用当前时间戳。
第3。根据您的意见,您不应该在此页面上使用插入。
如果您尝试更新现有行,则应该使用UPDATE或REPLACE而不是INSERT,但是您应该使用主键来表示要替换的行。现在,看起来你没有主键,所以请参阅我的第一点。
<强> 4。安全问题:您的查询受SQL注入。
您在查询中直接使用用户输入($ _POST)。任何恶意用户都可以利用此功能并提取,删除或操作数据库中的数据。您应该使用预准备语句,或者至少使用转义函数。