PHP, MySQL Table UPDATE проблема - PullRequest
       14

PHP, MySQL Table UPDATE проблема

0 голосов
/ 06 апреля 2011

Я пытаюсь обновить таблицу "products" innodb, используя форму, в которой последний столбец является subid (fk), ссылается на subid (PK) таблицы "subcategory", но я только хочу обновить таблицу "products", не делаялюбые изменения в столбце subid (fk) в таблице "products", вот мой полный код

<?php   

if (isset($_POST['PRODUCT_NAME'])) {

$pid = mysql_real_escape_string($_POST['thisPID']);
$catalog_no = mysql_real_escape_string($_POST['CATALOG_NO']);
$product_name = mysql_real_escape_string($_POST['PRODUCT_NAME']);
$price = mysql_real_escape_string($_POST['PRICE']);
$composition = mysql_real_escape_string($_POST['COMPOSITION']);
$size = mysql_real_escape_string($_POST['SIZE']);
// See if that product name is an identical match to another product in the system
$sql = mysql_query("UPDATE products SET CATALOG_NO='$catalog_no', PRODUCT_NAME='$product_name', PRICE='$price', COMPOSITION='$composition', SIZE='$size' WHERE PID='$pid'") or die(mysql_error());
header("location: inventory_list.php"); 
exit();  
}
?> 

<?php 
if (isset($_GET['PID'])) {
$targetID = $_GET['PID'];
$sql = mysql_query("SELECT products.PID, products.CATALOG_NO, products.PRODUCT_NAME, products.PRICE, products.COMPOSITION, products.SIZE FROM products WHERE PID='$targetID' LIMIT 1") or die(mysql_error());
$productCount = mysql_num_rows($sql); // count the output amount
if ($productCount > 0) {
    while($row = mysql_fetch_array($sql)){ 

         $catalog_no = $row["CATALOG_NO"];
         $product_name = $row["PRODUCT_NAME"];
         $price = $row["PRICE"];
         $composition = $row["COMPOSITION"];
         $size = $row["SIZE"];
    }
} else {
    echo "You dont have that product";
    exit();
}
}
?>  

Форма использует следующий код

<form action="inventory_edit.php" enctype="multipart/form-data" name="myForm" id="myform" method="post">
<table width="90%" border="0" cellspacing="0" cellpadding="6">
  <tr>
    <td width="20%" align="right">Product Name</td>
    <td width="80%"><label>
      <input name="product_name" type="text" id="product_name" size="64" value="<?php echo $product_name; ?>" />
    </label></td>
  </tr>
  <tr>
    <td align="right">Product Price</td>
    <td><label>
      $
      <input name="price" type="text" id="price" size="12" value="<?php echo $price; ?>" />
    </label></td>
  </tr>
  <tr>
    <td align="right">Composition</td>
    <td><label>
      <textarea name="composition" id="composition" cols="64" rows="5"><?php echo $composition; ?></textarea>
    </label></td>
  </tr>
  <tr>
    <td align="right">Size</td>
    <td><label>
      <input type="text" name="size" id="size" value="<?php echo $size; ?>" />
    </label></td>
  </tr>      
  <tr>
    <td>&nbsp;</td>
    <td><label>
      <input name="thisID" type="hidden" value="<?php echo $targetID; ?>" />
      <input type="submit" name="button" id="button" value="Make Changes" />
    </label></td>
  </tr>
</table>
</form>

Форма ничего не делает (это простообновляет страницу), он не обновляет таблицу.Как решить эту проблему?

Вот моя структура таблицы: имя таблицы - для "products" установлено значение ON UPDATE и ON DELETE CASCADE

PID(PK) CATALOG_NO  PRODUCT_NAME PRICE COMPOSITION SIZE SUBCAT_ID(FK)
  1         bbp2         NO2      $45    1% NO     10ml      7

Ответы [ 4 ]

1 голос
/ 06 апреля 2011
$pid = mysql_real_escape_string($_POST['thisPID']);

Здесь вы пропустили <input name="thisID" type="hidden">. Это должно быть thisPID.

0 голосов
/ 18 апреля 2013

Прошло много времени с тех пор, как я сделал mysql_query, но правильна ли эта строка?

$sql = mysql_query("UPDATE products SET CATALOG_NO='$catalog_no', PRODUCT_NAME='$product_name', PRICE='$price', COMPOSITION='$composition', SIZE='$size' WHERE PID='$pid'") or die(mysql_error());

Это похоже на то, что он пишет SQL, как это

"UPDATE products SET CATALOG_NO='$catalog_no'" 

вместо значения $ catalog_no.

Если линия не будет построена так:

"UPDATE products SET CATALOG_NO='" . $catalog_no . "', PRODUCT_NAME='" . $product_name . '"... 

и т.д ..?

0 голосов
/ 07 апреля 2011

Поскольку запрос, похоже, ничего не делает, но не вызывает состояние ошибки (или вы увидите это с помощью вызова die(), вам следует проверить, как именно выглядит сгенерированная строка запроса) :

$sql = "UPDATE products SET CATALOG_NO='$catalog_no', PRODUCT_NAME='$product_name', PRICE='$price', COMPOSITION='$composition', SIZE='$size' WHERE PID='$pid'";
$result = mysql_query($sql) or die(mysql_error());

echo $sql;

Тот факт, что вызов запроса не сделал die(), не означает, что запрос действителен. Изучите сгенерированный запрос, попробуйте запустить его вручную, посмотрите, что произойдет потом.

0 голосов
/ 06 апреля 2011

Отладьте ваш код, как это, отправьте форму и проверьте каждое значение

// Проверьте, совпадает ли это имя продукта с другим продуктом в системе. echo $ sql = "ОБНОВЛЕНИЕ продуктов SET CATALOG_NO = '$ catalog_no', PRODUCT_NAME = '$ product_name', PRICE = '$ price', COMPOSITION = '$ состав', SIZE = '$ size' WHER PID = '$ pid'" ;

выход;

...