2011-07-18 223 views
1

我在我的數據庫中有2個表。類別和產品。在類別中有2個字段。 catid和catname。產品中還有3個領域。 id,catid和名稱。需要PHP和MySQL幫助

在我的提交表格中,我將這個catname放入一個扇區。我想要做的是獲取選擇器的值並將catid保存到產品表catid字段中。而不是類別名稱。任何人都可以解釋我如何做到這一點。提前致謝。

下面是提交表單的代碼。

include("db.php"); 

$result = mysql_query("SELECT * FROM categories") 
or die (mysql_error()); 

?> 
<!--SubmitForm--> 

<form method="post" action="add_products.php"> 
<select name="cat"> 
<?php 
while($row = mysql_fetch_array($result))  
{echo "<option value='".$row[catid]."'>".$row[catname]."</option>";} 
?> 
</select><br/> 
<input type="text" name="name" value=""><br/> 
<input type="submit" value="submit"/> 
</form> 

add_products.php代碼

<?php 
include("db.php"); 

$cat = $_POST['catid']; 

$query = "SELECT * FROM categories WHERE catname='$cat'"; 
$result= mysql_query($query) or die ('Mysql Error'); 

while($row = mysql_fetch_array($result)){ 
$catn = $row['catid']; 

} 


$name = mysql_real_escape_string($_POST['name']); 
$query="INSERT INTO products(catid, name)VALUES ('".$catn."','".$name."')"; 
mysql_query($query) or die ('Error Updating'); 

echo "Product Added"; 


?> 
+0

您的表單元素名稱不匹配您的$ _POSTs,並且$ _POST ['catid']未被注入保護 –

+0

那麼有什麼不起作用?你是否收到錯誤信息?發表它。 – Thilo

+1

選擇框的名稱與您從$ _POST數組中提取的內容不匹配。也沒有名爲「商店」的輸入,所以你也會在那裏遇到麻煩。 – Backlin

回答

0

您似乎已經有正確的價值觀,只需將它們放在正確的位置,如果你需要「CATID」,你可以把它放在select的id標籤中。

當你呼應你只需要做到這一點,

echo "<option id='".$row[catid]."' value='".$row[cat]."'>".$row[catname]."</option>"; 

欲瞭解更多信息請參閱爲w3school手冊,在this鏈接。

+0

謝謝大家這一個確實工作(user838500答案)後,我根據Subdigger修復錯誤 – zack

0

一些零散的,但很重要的事情:

  • 你應該逃脫$cat它進入查詢之前
  • 你應該總是逃脫與HTML結合的字符串htmlspecialchars
  • 你應該總是使用$row['keyname'],而不是過時的$row[keyname]

現在對於你的問題。代碼似乎是正確的乍一看,但我現在沒有PHP,所以我無法測試它。有沒有特別的東西沒有按預期工作?

0

你已經在?

$cat = $_POST['catid']; 

如果你只需要插入,如果他們$貓存在,那麼:

<?php 
include("db.php"); 

$cat = $_POST['catid']; 

$query = "SELECT * FROM categories WHERE catname='$cat'"; 
$result= mysql_query($query) or die ('Mysql Error'); 

if($result) 
{ 
    $name = mysql_real_escape_string($_POST['store']); 
    $query="INSERT INTO products(catid, name)VALUES ('".$catn."','".$name."')"; 
    mysql_query($query) or die ('Error Updating'); 
    echo "Product Added"; 
} 
?> 
0

您已經在選擇菜單分配類別ID類別名稱。選擇菜單的變量是$_REQUEST['cat'],它提交表單後保存所選類別的ID。您可以將此值直接保存到產品表中。

然而,add_products.php中的while循環沒有用,因爲您始終將表中的最後一個ID分配給變量$catn。將此循環替換爲$catn = $_REQUEST['cat'](而是選擇菜單的名稱)。

0

這裏似乎很多的錯誤:

select name="cat" 

和你嘗試接收$cat = $_POST['catid'];正確的是$cat = $_POST['cat'];

則試圖通過catname

$query = "SELECT * FROM categories WHERE catname='$cat'"; 

當你需要比較IDS選擇catid='$cat'";

如果結果是單一的,那麼如何分配梅尼時間?:

if (($row = mysql_fetch_array($result))){ 
    $catn = $row['catid']; 

} 
0

你的選擇字段名「貓」,所以它應該是$_POST['cat'](或更好,重命名選擇字段爲「CATID」)。它包含catid,所以不需要再從DB中獲取它(除非你想確保它確實存在)。

最後,您應該像名字一樣跳過$_POST['cat']參數。 因此,這是足夠了:

$catid = mysql_real_escape_string($_POST['cat']); 
$name = mysql_real_escape_string($_POST['store']); 

$query="INSERT INTO products(catid, name) VALUES ('".$catid"','".$name."')"; 
mysql_query($query) or die ('Error Updating'); 

echo "Product Added"; 

也請考慮PDO用於處理數據庫查詢,這樣的最佳方式。

0

嘗試改變這種

"INSERT INTO products(catid, name)VALUES ('".$catn."','".$name."')"; 

"INSERT INTO products(catid, name)VALUES ('".$cat."','".$name."')";