gpt4 book ai didi

php - 需要双击才能插入数据库

转载 作者:行者123 更新时间:2023-12-01 00:46:49 26 4
gpt4 key购买 nike

这可能是一个非常简单的解决方案,但我真的想不通。如果我插入到我的数据库中,我必须按两次插入按钮才能工作。我的猜测是这与我在一个文件中使用 2 个表单有关,或者只是因为我在一个文件中完成了所有操作。请帮助我。

谢谢

代码:

<?php
/*require "link.php";*/
?>
<html>
<head>
<!--<link rel="stylesheet" type="text/css" href="css.css">--> <!-- verwijzing naar je css -->
<!--<script type="text/javascript" src="js.js"></script>-->
</head>
<header>
</header>
<article>
<div id="cards">
<?php
$host = "localhost";
$user = "root";
$pwd = "";
$db_name = "flashcards";
$link = mysqli_connect($host, $user, $pwd, $db_name)or die("cannot connect");
$array = array();
$IDarray = array();

ini_set('display_errors', 1);
error_reporting(E_ALL);

$sql = mysqli_query($link, "SELECT * FROM Questions ORDER BY ID ASC ") or die(mysqli_error($link));
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'><table border='1'>";
while ($rows = mysqli_fetch_assoc($sql))
{
echo "<tr id='".$rows['ID']."'><td>".$rows['Question']."</td><td><input type='text' name='Answer[]' id='V".$rows['ID']."'></input></td></tr>";
$array[] = $rows["Answer"];
$IDarray[] = $rows["ID"];
}
echo "</table><input type='submit' name='submit'></input></form>";

$i = 0;
$count = sizeof($IDarray);
if(!empty($_POST['Answer']))
{
foreach($_POST['Answer'] as $answer)
{
if (isset($_POST['Answer'])) {
if ($answer == $array[$i])
{
echo "<script>document.getElementById('".$IDarray[$i]."').style.background='green'; document.getElementById('V".$IDarray[$i]."').value='".$array[$i]."'</script>";
}
elseif ($answer !== $array[$i])
{
echo "<script>document.getElementById('".$IDarray[$i]."').style.background='red'; document.getElementById('V".$IDarray[$i]."').value='".$answer."'</script>";
$count = $count-1;
}
$i ++;
}
}echo $count." van de ".sizeof($IDarray)." goed";
if ($count == sizeof($IDarray))
{
header('Location: http://localhost:1336/php3/');
}
}

echo "</br></br>insert";
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'><table border='1'>";
echo "<tr><td>vraag</td><td><input type='text' name='vraag'></input></td><td>antwoord</td><td><input type='text' name='antwoord'></input></td></tr>";
echo "</table><input type='submit' name='submitinsert' value='insert'></input></form>";

if ($_POST['vraag'] != "") {
$vraag = $_POST['vraag'];
$antwoord = $_POST['antwoord'];
mysqli_query($link, "INSERT INTO questions (Question, Answer) VALUES (".$vraag.",".$antwoord.");") or die(mysqli_error($link));
}
?>
</div>
</article>
<footer>
</footer>
</html>

最佳答案

问题是您正在使用与生成 表单的脚本相同的脚本来处理表单提交。再加上您查询数据库,用您已经存储的内容生成一个表单,然后然后添加用户可能发布的任何数据,您在您第一次提交表单时,我们永远不会看到您添加的数据。
要么将插入查询移至顶部(在生成表单之前),要么单独关注

让我告诉你我的意思:

//don't OR DIE
$sql = mysqli_query($link, "SELECT * FROM Questions ORDER BY ID ASC ") or die(mysqli_error($link));
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'><table border='1'>";
while ($rows = mysqli_fetch_assoc($sql))
{//build form here
}
/*
CODE HERE
*/
if ($_POST['vraag'] != "") {
//insert here, after form is generated
}

所以你查询的数据还不能包含提交的表单数据。
但是,代码还有一些其他问题,例如 or die:不要那样做。与您的编码风格保持一致(同一脚本中的 allman 括号 + K&R 很困惑)。正确缩进您的代码和这个:

if ($_POST['vraag'] != "") {
}

应该是:

if (isset($_POST['vraag'])) {
}

您将可能不存在 的数组键与空字符串进行比较,而您应该检查该数组键是否存在。使用 isset

我可以继续说下去,但我暂时就此打住。还有一件事:再次 -> 单独关注!表示层(输出:HTML 等)不应包含数据库连接内容。这应该在其他地方完成。
使用 AJAX 异步处理您的表单(因为提交的任何内容都会添加到已经存在的表中),或者至少使用单独的脚本。用一个脚本完成所有工作很快就会让你为一堆意大利面条代码而哭泣

关于php - 需要双击才能插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20996231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com