MySQLi通过从PHP和SQL加载的表单更新记录。数据库不会更新
我需要创建一个下拉框,从数据库中收集记录以填充下拉框。选择其中一个值时,将显示一个表格,其中包含与所选值相关的数据 该表单具有显示所选数据的功能,但在填写和提交时,还可以更新数据库中的记录 我已经创建了一个php文件来尝试并完成这项工作,但是我遇到了一些错误,比如未定义索引和未知列 我刚刚接触PHP,所以这对我来说是一项艰巨的任务。有人能看一下我的代码并告诉我是否有任何错误吗 我一直在尝试从网上把代码拼凑在一起,但要想让所有的代码都正常工作是很困难的 经过一些调整后,我现在没有收到任何错误,但记录不会更新。我收到“记录更新成功”消息,但记录未更新 我敢肯定,缺少记录更新的原因是,没有通过MySQLi通过从PHP和SQL加载的表单更新记录。数据库不会更新,php,forms,mysqli,sql-update,Php,Forms,Mysqli,Sql Update,我需要创建一个下拉框,从数据库中收集记录以填充下拉框。选择其中一个值时,将显示一个表格,其中包含与所选值相关的数据 该表单具有显示所选数据的功能,但在填写和提交时,还可以更新数据库中的记录 我已经创建了一个php文件来尝试并完成这项工作,但是我遇到了一些错误,比如未定义索引和未知列 我刚刚接触PHP,所以这对我来说是一项艰巨的任务。有人能看一下我的代码并告诉我是否有任何错误吗 我一直在尝试从网上把代码拼凑在一起,但要想让所有的代码都正常工作是很困难的 经过一些调整后,我现在没有收到任何错误,但记
$q=$row[“BearId”]
正确收集ID,但是如果我使用$q=$\u GET[“q”]
我只会得到错误。我不完全肯定这就是问题所在,这就是为什么我在这里问这个问题
如果你能给我任何帮助,我将不胜感激。我在这件事上已经做了这么多,但我无法让它更新记录
编辑:我已经将问题精确定位到了中的id
$sql=“UPDATE//snip其中BearId='$q'代码>
$q=$row[“BearId”]代码>
如果我手动将BearId
更改为等于'1'
,则记录将被更新
updatebears.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Update Bears</title>
<script>
function showUser(str)
{
if (str=="")
{
document.getElementById("result").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getvalues.php?q="+str,true);
xmlhttp.send();
}
</script>
<style>
// style elements
</style>
</head>
<body>
<h1>Update Bears</h1>
Select a Bear:
<br />
<select name="bears" onchange="showUser(this.value)">
<option value="">Select a BearId</option>
<?php
$query = "SELECT * FROM bears";
$mysqli = new mysqli('localhost','User','123','bears');
$result = $mysqli->query($query);
while($row = $result->fetch_assoc())
echo '<option value="'.$row["BearId"].'">'.$row["BearId"].'</option>';
?>
</select>
<br />
<?php
$q=$row["BearId"];
$mysqli = new mysqli('localhost','User','123','bears');
$sql = "SELECT * FROM bears WHERE BearId='".$q."'";
if(array_key_exists('_submit_check', $_POST))
{
$weight = $_POST['Weight'];
$sex = $_POST['Sex'];
$type = $_POST['Type'];
$colour = $_POST['Colour'];
$breed = $_POST['BreedId'];
$sql = "UPDATE bears SET Weight = '$weight', Sex = '$sex', Type = '$type', Colour = '$colour', Breed = '$breed' WHERE BearId = '$q'";
if($mysqli->query($sql) === TRUE)
{
echo 'Record updated successfully<br />';
}
else
{
echo $sql.'<br />' . $mysqli->error;
}
$mysqli->close();
}
?>
<br />
<div id="result"></div>
<br />
<a href="insertbear.php" class="Task2">Click here to Visit Task 2 (Insert Bears)</a> | <a href="displaybears.php" class="Task3">Click here to Visit Task 3 (Display Bears)</a>
</body>
</html>
<?php
$q=$_GET["q"];
$mysqli = new mysqli('localhost','User','123','bears');
$sql = "SELECT * FROM bears WHERE BearId='".$q."'";
if($stmt = $mysqli->prepare($sql))
{
$stmt->execute();
$stmt->bind_result($BearId, $Weight, $Sex, $Type, $Colour, $Breed);
while ($stmt->fetch())
{
echo "<form method='post' name='form1' onsubmit='return validateForm()' action='updatebears.php'>";
echo "<p>";
echo "<label for='BreedId'>BreedId:</label>";
echo "<br />";
echo "<select id='BreedId' name='BreedId' />";
echo "<option value='".$Breed."'>".$Breed."</option>";
echo "<option value='1'>1. Polar</option>";
echo "<option value='2'>2. Brown</option>";
echo "<option value='3'>3. Panda</option>";
echo "</select>";
echo "</p>";
echo "<p>";
echo "<label for='Weight'>Weight(kg):</label>";
echo "<br />";
echo "<input type='text' id='Weight' name='Weight' value='".$Weight."' />";
echo "</label>";
echo "</p>";
echo "<p>";
echo "Sex: ";
echo "<br />";
echo "<label for='M'>Male</label><input type='radio' id='M' value='M' name='Sex'";
if($Sex=='M') echo "checked";
echo "/>";
echo "<label for='F'>Female</label><input type='radio' id='F' value='F' name='Sex'";
if($Sex=='F') echo "checked";
echo "/>";
echo "</p>";
echo "<p>";
echo "<label for='Type'>Type:</label> ";
echo "<br />";
echo "<input type='text' id='Type' name='Type' maxlength='100' value='".$Type."' />";
echo "</p>";
echo "<p>";
echo "<label for='Colour'>Colour:</label>";
echo "<br />";
echo "<input type='text' id='Colour' name='Colour' maxlength='20' value='".$Colour."' />";
echo "</p>";
echo "<p>";
echo "<input type='submit' value='Submit' />";
echo "<input type='reset' value='Reset' />";
echo "<input type='hidden' name='_submit_check' value=1 />";
echo "</p>";
echo "</form>";
}
}
else
{
echo 'Unable to connect';
exit();
}
?>
更新熊
函数showUser(str)
{
如果(str==“”)
{
document.getElementById(“结果”).innerHTML=“”;
返回;
}
if(window.XMLHttpRequest)
{
xmlhttp=新的XMLHttpRequest();
}
其他的
{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“结果”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“getvalues.php?q=“+str,true”);
xmlhttp.send();
}
//风格元素
更新熊
选择一只熊:
选择一只熊
我相信您需要做的是在getvalues.php文件中为BearId创建一个隐藏的输入类型。这样,当表单执行post时,您可以从post获取BearId,而不是试图从$row['BearId']获取BearId。我相当确定$row['BearId']与用户第一次进入getvalues.php表单时选择的$row['BearId']不同。您是否尝试过将$row['BearId']打印到html以验证其是否为合法值
if(array_key_exists('_submit_check', $_POST))
{
$id = $_POST['BearId']
$weight = $_POST['Weight'];
$sex = $_POST['Sex'];
$type = $_POST['Type'];
$colour = $_POST['Colour'];
$breed = $_POST['BreedId'];
$sql = "UPDATE bears SET Weight = '$weight', Sex = '$sex', Type = '$type', Colour = '$colour', Breed = '$breed' WHERE BearId = '$id'";
if($mysqli->query($sql) === TRUE)
{
echo 'Record updated successfully<br />';
}
else
{
echo $sql.'<br />' . $mysqli->error;
}
$mysqli->close();
}
?>
<h1>getvalues.php</h1>
<?php
$q=$_GET["q"];
$mysqli = new mysqli('localhost','User','123','bears');
$sql = "SELECT * FROM bears WHERE BearId='".$q."'";
if($stmt = $mysqli->prepare($sql))
{
$stmt->execute();
$stmt->bind_result($BearId, $Weight, $Sex, $Type, $Colour, $Breed);
while ($stmt->fetch())
{
echo "<form method='post' name='form1' onsubmit='return validateForm()' action='updatebears.php'>";
echo <input type="hidden" name="BearId" value='".$q."'>
echo "<p>";
echo "<label for='BreedId'>BreedId:</label>";
echo "<br />";
echo "<select id='BreedId' name='BreedId' />";
echo "<option value='".$Breed."'>".$Breed."</option>";
echo "<option value='1'>1. Polar</option>";
echo "<option value='2'>2. Brown</option>";
echo "<option value='3'>3. Panda</option>";
echo "</select>";
echo "</p>";
echo "<p>";
echo "<label for='Weight'>Weight(kg):</label>";
echo "<br />";
echo "<input type='text' id='Weight' name='Weight' value='".$Weight."' />";
echo "</label>";
echo "</p>";
echo "<p>";
echo "Sex: ";
echo "<br />";
echo "<label for='M'>Male</label><input type='radio' id='M' value='M' name='Sex'";
if($Sex=='M') echo "checked";
echo "/>";
echo "<label for='F'>Female</label><input type='radio' id='F' value='F' name='Sex'";
if($Sex=='F') echo "checked";
echo "/>";
echo "</p>";
echo "<p>";
echo "<label for='Type'>Type:</label> ";
echo "<br />";
echo "<input type='text' id='Type' name='Type' maxlength='100' value='".$Type."' />";
echo "</p>";
echo "<p>";
echo "<label for='Colour'>Colour:</label>";
echo "<br />";
echo "<input type='text' id='Colour' name='Colour' maxlength='20' value='".$Colour."' />";
echo "</p>";
echo "<p>";
echo "<input type='submit' value='Submit' />";
echo "<input type='reset' value='Reset' />";
echo "<input type='hidden' name='_submit_check' value=1 />";
echo "</p>";
echo "</form>";
}
}
else
{
echo 'Unable to connect';
exit();
}
if(数组\键\存在(“\提交\检查',$\发布))
{
$id=$\u POST['BearId']
$weight=$_POST['weight'];
$sex=$_POST['sex'];
$type=$_POST['type'];
$color=$_POST['color'];
$bride=$_POST['BreedId'];
$sql=“更新熊集重量='$Weight',性别='$Sex',类型='$Type',颜色='$color',品种='$Breed',其中熊id='$id';
if($mysqli->query($sql)==TRUE)
{
echo“记录更新成功
”;
}
其他的
{
回显$sql。“
”。$mysqli->错误;
}
$mysqli->close();
}
?>
getvalues.php
那太完美了。正是我的问题,并以如此完美的方式进行了解释。对此我感激不尽。现在这很有道理,但我从来没有想到过。很明显,我应该检索它,但我试图从javascript函数中检索它,而不是像其他任何东西一样从表单中检索它。你给我省了很多麻烦。非常感谢你。