下拉列表中缺少第一个产品,仅显示第一个产品的价格

时间:2013-07-01 17:57:58

标签: php javascript mysql

我有以下代码,但是当我运行它时,它没有做我想要它做的事。

使用代码,我有一个下拉列表,其中列出了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>

1 个答案:

答案 0 :(得分:1)

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

调用mysql_fetch_array将内部结果指针向前移动 - 后续调用仅获取第2条记录及更高级别。只在循环中第一次调用它。

如果您需要检查查询是否返回了行,请使用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 -->