2016-01-17 3 views
1

Я новичок в 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 SET LocationID =„Golden Bay Нельсон Новая Зеландия Австралазию“, ItemTypeID = 'Минерал', ImageID = 'C: \ XAMPP \ HTDOCS \ Images \ Фото композиты-High Def \ Box 2 checked19-01-2013.jpg', DonatorID = 'Джеймс Смит' WHERE ItemID = '373' "

Таким образом, значения, вводимые в базу данных, не являются идентификационными номерами первичных ключей в данных опций выбора, которые должны быть сохранены, но фактическими значениями данных слова. Может кто-нибудь, пожалуйста, скажите мне, почему идентификаторы в ячейках выбора не сохраняются и передаются в оператор UPDATE, который будет использоваться для обновления минерала?

+0

Спасибо всем. Я изменил значение - на a = и теперь отправляет идентификатор в браузер, а не значение слова, которое я проверил, повторив запрос. Я также получаю сообщение об успешном завершении «Обновленные данные». Но когда я проверяю минерал в phpMyAdmin, я нахожу, что данные в полях LocationID, ImageID, ItemTypeID и DonatorID по-прежнему остаются NULL. Есть ли ошибка в коде? –

ответ

0

Есть HTML кодирования проблемы, как <option value-, будет <option value=

Изменить ваше кодирование от

$SiteOptionData .= "<option value-\"$LocationID\">$Site $Region $Country $Continent</option>"; 

$DonatorOptionData .= "<option value-\"$DonatorID\">$DonatorFN $DonatorLN</option>"; 

$ItemTypeOptionData .= "<option value-\"$ItemTypeID\">$ItemType</option>"; 

$ImageOptionData .= "<option value-\"$ImageID\">$Image</option>"; 

$ItemOptionData .= "<option value-\"$ItemID\">$TrayBoxNo,$ItemInBox,$Name</option>"; 

Для

$SiteOptionData .= "<option value=\"$LocationID\">$Site $Region $Country $Continent</option>"; 

$DonatorOptionData .= "<option value=\"$DonatorID\">$DonatorFN $DonatorLN</option>"; 

$ItemTypeOptionData .= "<option value=\"$ItemTypeID\">$ItemType</option>"; 

$ImageOptionData .= "<option value=\"$ImageID\">$Image</option>"; 

$ItemOptionData .= "<option value=\"$ItemID\">$TrayBoxNo,$ItemInBox,$Name</option>"; 
0

Ваша проблема с вашим HTML. У вас есть:

$SiteOptionData .= "<option value-\"$LocationID\"> 

Но вам нужны = после значения, а не -:

$SiteOptionData .= "<option value=\"$LocationID\"> 

Это будет получить браузер, чтобы правильно передать идентификатор.

Смежные вопросы