我在哪里设置这个PHP代码中的$ id变量?

时间:2011-04-27 19:57:33

标签: php mysql

我正在对此代码进行疑难解答,我对PHP很新,所以任何帮助都会受到赞赏。

我认为错误来自于没有设置$id变量,所以我在哪里设置它?

以下是代码:

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$sql="SELECT * FROM $tbl_name WHERE depot = 'plainview'";
$result=mysql_query($sql);

// Count table rows
$count=mysql_num_rows($result);

//error reporting
error_reporting(E_ALL); ini_set('display_errors', '1');

$result1 = false;

//update
if(isset($_POST['Submit'])){
for($i=0;$i<$count;$i++){

$sql1 = "UPDATE $tbl_name SET 

available='".mysql_real_escape_string($_POST['available'][$i])."', 
rent='".mysql_real_escape_string($_POST['rent'][$i])."',  
corp_ready='".mysql_real_escape_string($_POST['corp_ready'][$i])."', 
down='".mysql_real_escape_string($_POST['down'][$i])."',  
gfs='".mysql_real_escape_string($_POST['gfs'][$i])."', 
dateTime = NOW()   
WHERE id='".$id[$i]."'";



$result1 = mysql_query($sql1) or die(mysql_error());
}
}

//redirect
if($result1){
header("location: success.php");
}
else
header("location: fail.php");


?>



<!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" />
<script language="JavaScript1.1" type="text/javascript">
<!--
function mm_jumpmenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
//-->
</script>
<title>Untitled Document</title>
</head>

<body>

<div>
    <p>Plainview, North East Region</p>
    <p>Select a different region: <select onchange="mm_jumpmenu('parent',this,0)" name="lostlist">
                <option value="" selected="selected">Choose Your Depot</option>
                <option value="plainview.php">Plainview</option>
                <option value="worcrester.php">Worcrester</option>

                </select></p>
</div><Br />

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="post" action="">
<tr>
<td>
<table width="700" border="0" cellspacing="1" cellpadding="0">

<tr>
<td>ID</td>
<td align="center"><strong>Product Name</strong></td>
<td align="center"><strong>Available</strong></td>
<td align="center"><strong>Rent</strong></td>
<td align="center"><strong>Corp Ready</strong></td>
<td align="center"><strong>Down</strong></td>
<td align="center"><strong>GFS</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="left"><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>

<td align="left"><?php echo $rows['product']; ?></td>
<td align="center"><input name="available[]" type="text" id="available" value="<?php echo $rows['available']; ?>" size="5"></td>
<td align="center"><input name="rent[]" type="text" id="rent" value="<?php echo $rows['rent']; ?>" size="5"></td>
<td align="center"><input name="corp_ready[]" type="text" id="corp_ready" value="<?php echo $rows['corp_ready']; ?>" size="5"></td>
<td align="center"><input name="down[]" type="text" id="down" value="<?php echo $rows['down']; ?>" size="5" /></td>
<td align="center"><input name="gfs[]" type="text" id="gfs" value="<?php echo $rows['gfs']; ?>" size="5"></td>

</tr>
<?php
}
?>
<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>
<?php

mysql_close();

?>


</body>
</html>

根据声明:

if($result1){
header("location: success.php");
}
else
header("location: fail.php");

每当我尝试访问该页面时,它都会重定向到fail.php,那为什么会失败?

4 个答案:

答案 0 :(得分:1)

未设置$_POST['Submit'],或$count为0。

答案 1 :(得分:0)

if($result1 === true){
header("location: success.php");
} else {
header("location: fail.php");
}

答案 2 :(得分:0)

也许我错过了一条线,但是我没有看到你把价值放到$ id的位置......你第一次提到它是你希望从中获得价值的地方。

答案 3 :(得分:0)

如果您不发布任何内容,$result1将保持为假。 如果你发布了一些内容,那么测试只会在你循环的最后一次迭代中进行,所以其他所有的UPDATE都会失败,但是最后一次,它会被认为是成功的。

顺便问一下,为什么重定向后会有一些代码?它显然永远不会显示出来。 在任何exit()之后,您还需要header('Location')以避免不必要的代码执行(在标题调用之后将保留的代码)。

我认为您可能希望在header()测试中包含if(isset($_POST['Submit']))说明,以避免仅通过加载页面而不发布任何内容来重定向。

Location也应该是一个包含协议和域名的完整网址,即使大多数浏览器都接受部分自己的网址,这也违反了一些RFC。

您还需要将结果循环到已定义的$id

while ($row = mysql_fetch_assoc($result)) $id[] = $row['primary_column_name'];