【发布时间】:2018-08-09 23:38:39
【问题描述】:
我有一个表单,当用户进行选择并输入一些个人详细信息(例如姓名和电子邮件)时,这些数据应该会自行插入 MySQL 数据库表中。然后通过显示表格中最近输入的记录作为确认,将输入的数据显示回给用户。
我遇到的问题是显示的数据库表是空的,当我检查数据库时只输入了空条目?
(表单位于两个单独的页面上,因此我可以稍后在没有 JQuery 等的情况下使下拉列表相互依赖)
form1.php
<html>
<head>
<title>Library System</title>
</head>
<body>
<h1> <center> Library Book Reservation System </center></h1>
<h2> <small><center>Use the form below to search for available books </center></small> </h2>
<?php
?>
<form class="submission-form"action="form2.php" method="post">
<center>
Select Book:
<select name="books" id="books">
<option value="catcher in the rye.">catcher in the rye.</option>
<option value="to kill a mocking bird">to kill a mocking bird</option>
<option value="1984">1984</option>
<option value="Ulysses ">Ulysses</option>
<option value="East of Eden">East of Eden</option>
<option value="Animal Farm">Animal Farm </option>
<option value="Of mice and men">Of mice and me.</option>
</select>
<p></p>
<input type="submit" value="Next" id="sendBtn">
<input type="reset" value="Reset" id="resetBtn">
<input type="button" value="Help" id="helpBtn">
</center>
</form>
</body>
</html>
form2.php
<?php session_start();?>
<?php if($_POST) {
$_SESSION['books'] = $_POST['books'];
echo 'the book selected is : '.$_SESSION['books'].'';
?>
<html>
<head>
<title>Library System</title>
</head>
<body>
<h1> <center> Library Book Reservation System </center></h1>
<h2> <small><center>Use the form below to search for available books </center></small> </h2>
<form class="submission-form"action="booksphp.php" method="post">
<center>
Select Researcher:
<select name="owner">
<option value="Roger">Roger</option>
<option value="Catherine">Catherine</option>
<option value="Deborah">Deborah</option>
<option value="Frank">Frank</option>
<option value="Paul">Paul</option>
</select>
<p></p>
Full name:<br>
<input type="text" name="fullname" size="45"><br>
Email:<br>
<input type="email" name="email" size="45"><br><br>
<input type="submit" value="Submit" id="sendBtn">
<input type="reset" value="Reset" id="resetBtn">
<input type="button" value="Help" id="helpBtn">
</center>
</form>
<?php
}
?>
action_form.php
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<head>
<title> PHP + MySQL</title>
</head>
<body>
<h1> <center> Library Book Reservation System </center></h1>
<?php
$name = $_POST['fullname'];
$email = $_POST['email'];
$book = $_POST['books'];
$owner = $_POST['owner'];
if (!empty($name)){
if (!empty($email)){
}
else{
echo "Email field cannot be left blank";
die();
}
}
else{
echo "Name field cannot be left blank";
die();
}
$db_hostname = "mysql";
$db_database = "****";
$db_username = "******";
$db_password = "**********";
$db_charset = "utf8mb4";
$dsn = "mysql:host=$db_hostname;dbname=$db_database;charset=$db_charset";
$opt = array(
PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
);
try{
$pdo = new PDO($dsn,$db_username,$db_password,$opt);
$stmt = $pdo->prepare(
"INSERT INTO Borrowtest
(Book_Description,Owner,Fullname,Email) VALUES(?,?,?,?)");
$success = $stmt->execute(
array($_REQUEST['Book_Description'],
$_REQUEST['Owner'],$_REQUEST['Fullname'],$_REQUEST['Email']));
echo '<table width="70%" border="1" cellpadding="5"
cellspacing="5">
<tr>
<th>ID</th>
<th>Book Title</th>
<th>Owner</th>
<th>Fullname</th>
<th>Email</th>
</tr>';
echo "<h2><center>Data in table</center></h2>\n";
$stmt = $pdo->query("SELECT MAX(Id) FROM Borrowtest");
echo "Rows retrieved: ".$stmt->rowcount()."<br><br>\n";
while ($row = $stmt->fetch()) {
echo '<tr>
<td>'.$row["Id"].'</td>
<td>'.$row["Book_Description"].'</td>
<td>'.$row["Owner"].'</td>
<td>'.$row["Fullname"].'</td>
<td>'.$row["Email"].'</td>
</tr>';
}
// Prints the users input
// must change to print most recent table entry
echo "Name: $name <br /> Email: $email <br /> Book: $book <br />
Owner: $owner <br />";
$pdo = NULL;
} catch (PDOException $e) {
exit("PDO Error: ".$e->getMessage()."<br>");
}
?>
</body>
</html>
【问题讨论】:
-
booksphp.php在哪里?发到action_form.php的表格在哪里? -
@Phil 我们在 1 秒之内做了完全相同的编辑哈哈。
-
我猜问题是
$_REQUEST['Book_Description'], $_REQUEST['Owner'],$_REQUEST['Fullname'],$_REQUEST['Email']。为什么你使用来自$_REQUEST的值和大写的键?您已经在使用小写键检查$_POST中的值,所以我假设这些是您真正想要插入数据库的值。 -
无论如何,在开发时,始终将您的PHP环境的错误报告设置为
E_ALL并显示错误以便快速反馈,即在您的php.ini文件中,设置error_reporting = E_ALL和display_errors = On。然后,您将看到任何未定义数组索引的警告。 投票结束是一个错字 -
另外,下次您想问问题时,请查看How to create a Minimal, Complete, and Verifiable example,重点关注minimal