使用PHP从HTML表单发布到MySQL数据库,表单在没有发布数据的情况下重新加载
我正在尝试编写代码,允许用户向我的数据库中添加免费的公共厕所。这需要将数据添加到数据库中的3个单独的表中:自治区、位置和房间。我使用insert_id将查询链接到每个父/子表 正如我现在编写的代码一样,表单只是重新加载到页面上,而没有添加任何内容到数据库中。问题是因为我的一些表单输入类型是一个下拉选择菜单和几个复选框(其中一个是数组)?这是我学习php和MySQL的第一个学期,所以我希望能得到一些有用的指导或其他答案。谢谢 我已经在这个网站上找到了一些答案,但是没有找到任何包含我所有输入类型的表单使用PHP从HTML表单发布到MySQL数据库,表单在没有发布数据的情况下重新加载,php,mysql,Php,Mysql,我正在尝试编写代码,允许用户向我的数据库中添加免费的公共厕所。这需要将数据添加到数据库中的3个单独的表中:自治区、位置和房间。我使用insert_id将查询链接到每个父/子表 正如我现在编写的代码一样,表单只是重新加载到页面上,而没有添加任何内容到数据库中。问题是因为我的一些表单输入类型是一个下拉选择菜单和几个复选框(其中一个是数组)?这是我学习php和MySQL的第一个学期,所以我希望能得到一些有用的指导或其他答案。谢谢 我已经在这个网站上找到了一些答案,但是没有找到任何包含我所有输入类型的表
#Add a toilet to the database
if (isset($_POST['submit'])) { //check if the form has been submitted
if ((empty($_POST['name'])) || (empty($_POST['location'])) || (empty($_POST['hours'])) || (empty($_POST['boro_id'])) ||
(empty($_POST['boro_name'])) || (empty($_POST['gender'])) || (empty($_POST['handicap_access'])) ||
(empty($_POST['change_table'])) || (empty($_POST['stalls'])) ) {
$message = '<p class="error">Please fill out all of the form fields!</p>';
} else {
$conn = new mysqli($hn, $un, $pw, $db);
if ($conn->connect_error) die($conn->connect_error);
$name = sanitizeMySQL($conn, $_POST['name']);
$location = sanitizeMySQL($conn, $_POST['location']);
$hours = sanitizeMySQL($conn, $_POST['hours']);
$boro_id = sanitizeMySQL($conn, $_POST['boro_id']);
$boro_name = sanitizeMySQL($conn, $_POST['boro_name']);
$gender = sanitizeMySQL($conn, $_POST['gender']);
$h_a = sanitizeMySQL($conn, $_POST['handicap_access']);
$c_t = sanitizeMySQL($conn, $_POST['change_table']);
$stalls = sanitizeMySQL($conn, $_POST['stalls']);
$query = 'INSERT INTO `borough` VALUES(NULL, \"$boro_name\")';
$result = $conn->query($query);
$insertID = $conn->insert_id;
$query = 'INSERT INTO `location` VALUES(NULL, \"$name\", \"$location\", \"$hours\", NULL, \"$insertID\" )';
$result = $conn->query($query);
$insertID = $conn->insert_id;
$query = 'INSERT INTO `rooms` VALUES(NULL, \"$insertID\", \"$gender\", \"$h_a\", \"$c_t\", \"$stalls\" )';
$result = $conn->query($query);
if (!$result) {
die ("Database access failed: " . $conn->error);
} else {
$message = "<p class=\"message\">Successfully added new toilet! <a href=\"index.php\">Return to home</a></p>";
}
}
}
if (isset($message)) echo $message;
function sanitizeString($var)
{
$var = stripslashes($var);
$var = strip_tags($var);
$var = htmlentities($var);
return $var;
}
function sanitizeMySQL($connection, $var)
{
$var = sanitizeString($var);
$var = $connection->real_escape_string($var);
return $var;
}
?>
<h1>Add a public toilet</h1>
<div class="form">
<form method="POST" action="">
Borough<br>
<select name="boro_name" size="1">
<option value="Bronx">Bronx</option>
<option value="Brooklyn">Brooklyn</option>
<option value="Manhattan">Manhattan</option>
<option value="Queens">Queens</option>
<option value="Staten Island">Staten Island</option>
</select><br><br>
<div>Name <input type="text" name="name"></div><br>
<div>Location <input type="text" name="location"></div><br>
<div>Hours <input type="text" name="hours"></div><br>
Gender<br>
<input type="checkbox" name="gender[]" value="men">Men<br>
<input type="checkbox" name="gender[]" value="women">Women<br>
<input type="checkbox" name="gender[]" value="neutral">Neutral<br><br>
Handicap Accessible
<input type="checkbox" name="handicap_access"><br><br>
Changing Tables
<input type="checkbox" name="change_table"><br><br>
<div>Number of Stalls <input type="text" name="stalls"></div><br><br>
<input type="submit" name="submit" value="Submit">
</form>
</div>
#将马桶添加到数据库中
如果(isset($_POST['submit']){//检查表单是否已提交
如果((空($_POST['name']))|(空($_POST['location']))|(空($_POST['hours']))|(空($_POST['boro_id']))|
(空($_POST['boro_name']))| |(空($_POST['gender']))| |(空($_POST['disability_access']))| |
(空($_POST['change_table']))| |(空($_POST['stalls'])){
$message='请填写所有表单字段!
';
}否则{
$conn=newmysqli($hn、$un、$pw、$db);
如果($conn->connect\u error)死亡($conn->connect\u error);
$name=sanitizeMySQL($conn,$_POST['name']);
$location=sanitizeMySQL($conn,$_POST['location']);
$hours=sanitizeMySQL($conn,$_POST['hours']);
$boro_id=sanitizeMySQL($conn,$_POST['boro_id']);
$boro_name=sanitizeMySQL($conn,$_POST['boro_name']);
$gender=sanitizeMySQL($conn,$_POST['gender']);
$h_a=sanitizeMySQL($conn,$_POST['Disability_access']);
$c_t=sanitizeMySQL($conn,$_POST['change_table');
$stalls=sanitizeMySQL($conn,$_POST['stalls']);
$query='插入'borough'值(空,\“$boro\u name\”);
$result=$conn->query($query);
$insertID=$conn->insert\U id;
$query='插入到`location`值中(NULL、\“$name\”、\“$location\”、\“$hours\”、NULL、\“$insertID\”);
$result=$conn->query($query);
$insertID=$conn->insert\U id;
$query='INSERT INTO`rooms`值(NULL、\“$insertID\”、\“$SEXT\”、\“$h\U a\”、\“$c\U t\”、\“$stalls\”);
$result=$conn->query($query);
如果(!$result){
die(“数据库访问失败:”.$conn->错误);
}否则{
$message=“ ”;
}
}
}
if(isset($message))echo$message;
函数sanitizeString($var)
{
$var=stripslashes($var);
$var=带标签($var);
$var=htmlentities($var);
返回$var;
}
函数sanitizeMySQL($connection,$var)
{
$var=卫生限制($var);
$var=$connection->real\u escape\u字符串($var);
返回$var;
}
?>
增加一个公共厕所
行政区
布朗克斯
布鲁克林
曼哈顿
皇后区
斯塔顿岛
名称
位置
小时数
性别
男人
女性
中性
无障碍
换桌子
摊位数量
我希望表单提交到我的数据库中,并告诉用户他们成功了。您对这么多输入类型的关注是公平的,但您会发现它与后端非常相似。您需要做的是查看数据和if/then逻辑的情况 让我们调试一下 我将教您如何自己调试代码,而不仅仅是调试代码(可能有人愿意这么做)。因为,老实说,使用正确的指针,这对您来说应该相当容易 首先,你知道你有一个表单和一些应该处理事情的东西。您不知道的是数据是什么样子的 这个小片段可以让您看到正在发送的数据。看在上帝的份上,当您设置站点为活动时,请不要保留此代码
echo '<pre>';
print_r($_POST);
echo '</pre>';
这将向您展示PHP是如何遵循您给出的逻辑的。一直把它们放进去,它们会告诉你什么代码正在运行,以及以什么顺序运行。寻找失踪的以及出现的观察者
确保一切正常
现在,您可能会在这里发现一个问题:
$query = 'INSERT INTO `borough` VALUES(NULL, \"$boro_name\")';
$result = $conn->query($query);
if (!$result) {
die ("Database insert failed at stage one " . $conn->error);
} else {
echo "7. Stage one success";
}
$insertID = $conn->insert_id;
你怎么知道插页起作用了?你没有,因为你从未测试过。我假设你最后一个观察者是6岁。让我们在这里也做一些测试
if (isset($message)) echo "<p class=\"message\">$message</p>";
现在你知道这个是否有效了。第二次插入有用吗?同样,您不知道,因为您只测试了最后一个。在你检查之前,你可能有三个错误。执行同样的操作并检查第二级镶块
现在怎么办?
把所有这些放在一起,您应该能够准确地看到这个脚本失败的地方。这应该告诉你需要做什么才能让它工作。如果你仍然被卡住,或者事情仍然拒绝接受这个计划,你将有一个更具体的问题要问
不断测试,不断改进,不断提问。您的代码结构合理,因此调试应该很简单
奖励材料:
$query = 'INSERT INTO `borough` VALUES(NULL, \"$boro_name\")';
$result = $conn->query($query);
$insertID = $conn->insert_id;
如果你做一个小小的改变,你就可以减少发送消息的工作量。为什么要在消息中添加HTML?这似乎比你想要的要多
if(isset($message))回显“
”;
谢谢,这非常有帮助。我找到了那个地方,但我不知道发生了什么。“回声”一行3.形式很好不会回显到我的页面if((空($_POST['name'])…{echo“2.有些东西是空的”}其他{echo“3.形式很好”;$conn=newmysqli($hn,$un,$pw,$db);
if (isset($message)) echo "<p class=\"message\">$message</p>";