Я новичок в php, и я пытаюсь обновить таблицу в моей базе данных PHP MYSQL с именем mineraltable. Мне нужно обновить внешние ключи LocationID, ItemTypeID, ImageID и DonatorID.Ошибка обновления внешних ключей в базе данных MYSQL, где неверные данные опций из полей выбора используются для обновления внешних ключей
Эти внешние ключи связываются с первичными ключами в источниках, подходящих для отображения, itemtypetable, imagetable и donatortable соответственно.
У меня есть форма с 5 выпадающими ячейками выбора, в которых отображаются фактические значения данных, такие как сайт, регион, страна и континент, но когда пользователь выбирает местоположение, тогда идентификатор местоположения (первичный ключ из подзаголовки) записывается в опции данные. Это значение, которое я хочу вставить в минерал, как внешний ключ, связанный с подходящим. Мой общий код PHP для этого файла ниже:
<?php
$debugMode = true;
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'rockandmineraldb';
$conn = mysql_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
$sql = 'SELECT LocationID,Site,Region,Country,Continent FROM sourcelocationtable';
mysql_select_db('rockandmineraldb');
$retval = mysql_query($sql, $conn);
if(! $retval) {
die('Could not get data: ' . mysql_error());
}
$SiteOptionData="";
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
$LocationID = $row['LocationID'];
$Site = $row['Site'];
$Region = $row['Region'];
$Country = $row['Country'];
$Continent = $row['Continent'];
$SiteOptionData .= "<option value-\"$LocationID\">$Site $Region $Country $Continent</option>";
}
$sql = 'SELECT DonatorID,DonatorFN,DonatorLN FROM donatortable';
mysql_select_db('rockandmineraldb');
$retval = mysql_query($sql, $conn);
if(! $retval) {
die('Could not get data: ' . mysql_error());
}
$DonatorOptionData="";
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
$DonatorID = $row['DonatorID'];
$DonatorFN = $row['DonatorFN'];
$DonatorLN = $row['DonatorLN'];
$DonatorOptionData .= "<option value-\"$DonatorID\">$DonatorFN $DonatorLN</option>";
}
$sql = 'SELECT ItemTypeID,ItemType FROM itemtypetable';
mysql_select_db('rockandmineraldb');
$retval = mysql_query($sql, $conn);
if(! $retval) {
die('Could not get data: ' . mysql_error());
}
$ItemTypeOptionData="";
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
$ItemTypeID = $row['ItemTypeID'];
$ItemType = $row['ItemType'];
$ItemTypeOptionData .= "<option value-\"$ItemTypeID\">$ItemType</option>";
}
$sql = 'SELECT ImageID,Image FROM imagetable';
mysql_select_db('rockandmineraldb');
$retval = mysql_query($sql, $conn);
if(! $retval) {
die('Could not get data: ' . mysql_error());
}
$ImageOptionData="";
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
$ImageID = $row['ImageID'];
$Image = $row['Image'];
$ImageOptionData .= "<option value-\"$ImageID\">$Image</option>";
}
$sql = 'SELECT ItemID,TrayBoxNo,ItemInBox,Name FROM mineraltable';
mysql_select_db('rockandmineraldb');
$retval = mysql_query($sql, $conn);
if(! $retval) {
die('Could not get data: ' . mysql_error());
}
$ItemOptionData="";
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
$ItemID = $row['ItemID'];
$TrayBoxNo = $row['TrayBoxNo'];
$ItemInBox = $row['ItemInBox'];
$Name = $row['Name'];
$ItemOptionData .= "<option value-\"$ItemID\">$TrayBoxNo,$ItemInBox,$Name</option>";
}
mysql_free_result($retval);
echo "Fetched data successfully\n";
if(isset($_POST['update'])) {
if(isset($_POST['Item'])){ $ItemID== $_POST['Item']; }
if(isset($_POST['Location'])){ $LocationID = $_POST['Location']; }
if(isset($_POST['ItemType'])){ $ItemTypeID = $_POST['ItemType']; }
if(isset($_POST['Image'])){ $ImageID = $_POST['Image']; }
if(isset($_POST['Donator'])){ $DonatorID = $_POST['Donator']; }
$sql = "UPDATE `mineraltable` SET `LocationID`='$LocationID', `ItemTypeID`='$ItemTypeID', `ImageID`='$ImageID', `DonatorID`='$DonatorID' WHERE `ItemID`='$ItemID'";
if(! $retval) {
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
die($sql);
}
?>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table>
<tr>
<td>Select Site</td>
<td>
<select size="10" name="Location" multiple="multiple" id="Location">
<?php echo $SiteOptionData; ?>
</select>
</td>
</tr>
<br>
<tr>
<td>Select Donator</td>
<td>
<select size="10" name="Donator" multiple="multiple" id="Donator">
<?php echo $DonatorOptionData; ?>
</select>
</td>
</tr>
<br>
<tr>
<td>Select ItemType</td>
<td>
<select size="10" name="ItemType" multiple="multiple" id="ItemType">
<?php echo $ItemTypeOptionData; ?>
</select>
</td>
</tr>
<br>
<tr>
<td>Select Image</td>
<td>
<select size="10" name="Image" multiple="multiple" id="Image">
<?php echo $ImageOptionData; ?>
</select>
</td>
</tr>
<tr>
<td>Select Item</td>
<td>
<select size="10" name="Item" multiple="multiple" id="Item">
<?php echo $ItemOptionData; ?>
</select>
</td>
</tr>
</table>
<input name="update" type="submit" id="update" value="update">
</form>
У меня есть PHP UPDATE заявление, чтобы обновить базу данных с помощью PHP переменных, выбранных из полого выбора. Смотрите ниже:
if(isset($_POST['update'])) {
if(isset($_POST['Item'])){ $ItemID== $_POST['Item']; }
if(isset($_POST['Location'])){ $LocationID = $_POST['Location']; }
if(isset($_POST['ItemType'])){ $ItemTypeID = $_POST['ItemType']; }
if(isset($_POST['Image'])){ $ImageID = $_POST['Image']; }
if(isset($_POST['Donator'])){ $DonatorID = $_POST['Donator']; }
$sql = "UPDATE `mineraltable` SET `LocationID`='$LocationID', `ItemTypeID`='$ItemTypeID', `ImageID`='$ImageID', `DonatorID`='$DonatorID' WHERE `ItemID`='$ItemID'";
if(! $retval) {
die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
die($sql);
}
?>
Но когда я запускаю этот код в веб-браузере я получаю сообщение об успешном
«Обновленные данные успешно UPDATE
mineraltable
SETLocationID
=„Golden Bay Нельсон Новая Зеландия Австралазию“,ItemTypeID
= 'Минерал',ImageID
= 'C: \ XAMPP \ HTDOCS \ Images \ Фото композиты-High Def \ Box 2 checked19-01-2013.jpg',DonatorID
= 'Джеймс Смит' WHEREItemID
= '373' "
Таким образом, значения, вводимые в базу данных, не являются идентификационными номерами первичных ключей в данных опций выбора, которые должны быть сохранены, но фактическими значениями данных слова. Может кто-нибудь, пожалуйста, скажите мне, почему идентификаторы в ячейках выбора не сохраняются и передаются в оператор UPDATE, который будет использоваться для обновления минерала?
Спасибо всем. Я изменил значение - на a = и теперь отправляет идентификатор в браузер, а не значение слова, которое я проверил, повторив запрос. Я также получаю сообщение об успешном завершении «Обновленные данные». Но когда я проверяю минерал в phpMyAdmin, я нахожу, что данные в полях LocationID, ImageID, ItemTypeID и DonatorID по-прежнему остаются NULL. Есть ли ошибка в коде? –