0

我有下面的代码,但是当我运行它时,它并没有做我想做的事情。

使用代码,我有一个下拉列表,其中列出了 tblproduct 中的所有产品名称。选择产品名称后,其对应的价格应显示在提供的文本字段中,可在此处修改和保存。每个产品的价格都存储在 tblretprod 中。我所拥有的是下拉列表中缺少第一个产品名称,但其价格在文本字段中显示为默认值。

<!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 product</title>

<SCRIPT language=JavaScript>
function reload(form)
{
var val=form.prod_name.options[form.prod_name.options.selectedIndex].value;
//var description1=form.description.value;
self.location='upd_prod.php?prod_name=' + val;
//+'&description=' +description1;
}

</script>

<link href="CSS/update.css" rel="stylesheet" type="text/css" />
</head>

<body>

<?php

include('db_connect.php');

@$prod_name=$_GET['prod_name'];

$query=mysql_query("select p.prod_name, pr.prod_price from tblproduct p INNER JOIN tblretprod pr   ON p.prod_id = pr.prod_id");

$row=mysql_fetch_array($query);

?>

<div id="stylized" class="myform">

<form id="form" name="upd_prod" method="post" action="updprod.php">

<h2 align="center"><b>- Update Product -</b></h2>

<table width="1000" border="0">
<tr>
<td><div align="right">Product Name</div></td>
<td>
<?PHP 

echo "<select name='prod_name' onchange=\"reload(this.form)\"><option value=''>select one</option>";
while($row1 = mysql_fetch_array ($query)) { 
if($row1['0']==@$prod_name){echo "<option selected value='".$row1['0']."'>".$row1['0']." </option>";}
else{echo  "<option value=\"".$row1['0']."\">".$row1['0']."</option>";}
}
echo "</select>";
    ?>

</td>
</tr>
<tr>
<td><div align="right">Product Price (MRU)</div></td>
<td><input type="text" name="prod_price" id="prod_price" value = "<?PHP print $row['prod_price'] ?>"/></td>
</tr>
</table>

<p align="center">
 <input type="submit" class="button" name="update" id="update" value="<-- Update product -->" />
</p>

</form>

4

1 回答 1

1

$row=mysql_fetch_array($query);不需要。

调用mysql_fetch_array将内部结果指针向前移动——后续调用仅获得第二条记录或更高记录。仅在循环中第一次调用它。

如果需要检查查询是否返回行,请使用mysql_num_rows.

您还应该考虑切换到 mysqli,因为 mysql 已被弃用。

最后,您缺少 WHERE 子句来仅提取您选择的产品。您正在展示的产品是随机选择的。

如果您希望显示单个产品,并列出所有其他不是该产品的产品,则应使用两个单独的查询,一个指定产品,另一个将其从“其他产品”列表中排除。或者,您可以显示所有产品,但在循环期间标记所选产品——您可以将此产品保存到第二个变量中,以便稍后在页面中使用。

如:

<!-- you beginning HTML -->
<?php

include('db_connect.php');

$prod_name = isset($_GET['prod_name'])?$_GET['prod_name']:"";

$sql = "select p.prod_name, pr.prod_price from tblproduct p INNER JOIN tblretprod pr ON p.prod_id = pr.prod_id";

$result = mysql_query($sql);

if(mysql_num_rows($result) < 1) {} //No records, do something (exit, die, return, whatever)

?>
<!-- Continue your HTML -->
<?php 

while($row = mysql_fetch_array($result){
    if($row['prod_name'] == $prod_name) {
        $selected_product = $row;
        echo "<option selected value='".$row['0']."'>".$row['0']." </option>";
    } else {
        echo  "<option value=\"".$row['0']."\">".$row['0']."</option>";
    }
}
?>
<!-- Continue your HTML -->
<td><input type="text" name="prod_price" id="prod_price" 
           value = "<?php print $selected_product['prod_price'] ?>"/></td>    
<!-- Rest of HTML -->
于 2013-07-01T18:13:12.393 回答