我有以下代码,但是当我运行它时,它没有做我想要它做的事。
使用代码,我有一个下拉列表,其中列出了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>
答案 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 -->