MySQLi更新记录通过表单加载从PHP和SQL.数据库不会更新


MySQLi Update Record via Form loaded from PHP and SQL. Database wont update

我需要创建一个下拉框,该下拉框收集来自数据库的记录以填充下拉框。当选择其中一个值时,将显示一个表单,其中包含与所选值相关的数据。

表单要具有显示所选数据的功能,而且在填写和提交时还可以更新数据库中的记录。

我已经创建了一个php文件来尝试实现这一点,但我得到错误,如未定义的索引和未知列。

我是PHP的新手,所以这对我来说是一个很大的任务。有人可以看看我的代码,并通知我,如果有任何错误。

我一直试图从网上拼凑代码,但它是棘手的试图让它全部工作。

我没有得到任何错误现在经过一些调整,但记录不会更新。我得到一个"记录更新成功"消息,但记录没有更新。

我很确定缺乏记录更新是由于没有通过$q=$row["BearId"]正确收集ID,但如果我使用$q=$_GET["q"],我只会得到错误。我不完全肯定这就是问题所在,这就是为什么我在这里问这个问题。

我将感激你能给予的任何帮助。我已经用了这么多了,但我还不能让它更新记录。 编辑:我已经把问题定位到 中的id

$sql = "UPDATE //snip WHERE 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>

getvalues.php

<?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();
    }
?>

谢谢你的帮助

我认为您需要做的是在getvalues.php文件中为BearId创建一个隐藏的输入类型。这样,当您的表单执行的帖子,你可以从帖子获得BearId,而不是试图从$row['BearId']。我相当肯定$row['BearId']不是相同的$row['BearId'],用户选择当他第一次去getvalues.php表单。你试过打印$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();
        }