Я должен создать раскрывающийся список, который собирает записи из базы данных для заполнения раскрывающегося списка. Когда выбрано одно из значений, должна отображаться форма, которая содержит данные, относящиеся к выбранному значению.
Форма состоит в том, чтобы иметь функцию отображения выбранных данных, а также обновлять запись в базе данных при заполнении и отправке.
Я создал файл php, чтобы попытаться выполнить это, но Im получает ошибки, такие как неопределенный индекс и неизвестный столбец.
Я новичок в PHP, поэтому для меня это большая задача. Может ли кто-нибудь взглянуть на мой код и сообщить мне, есть ли какие-либо ошибки.
Я пытался скомпоновать код вместе здесь и там из сети, но это было сложно, пытаясь заставить все это работать.
После некоторых настроек я не получаю никаких ошибок, но запись не будет обновлена. Я получаю сообщение «запись обновлено успешно», но запись не обновляется.
Я уверен, что отсутствие обновления для записи сводится к тому, что идентификатор не получает должным образом собранный $q=$row["BearId"]
через $q=$row["BearId"]
но если я использую $q=$_GET["q"]
я получаю ничего, кроме ошибки. Я не полностью уверен, что это проблема, поэтому я задаю здесь вопрос.
Я был бы признателен за любую помощь, которую вы можете дать. Ive получил до сих пор с этой вещью, и все же я не могу заставить его обновить запись.
EDIT: я указал проблему на идентификатор в
$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(); } ?>
Спасибо за помощь.
Я считаю, что вам нужно создать скрытый тип ввода для BearId в файле getvalues.php. Таким образом, когда ваша форма выполняет этот пост, вы можете получить 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(); }