如果在类函数中,则无法执行代码

时间:2012-03-05 22:32:05

标签: php class

我对这段代码进行了编码,当我单独使用它而不将它放在类函数中时它运行良好,但是当我在我的类中放入一个具有多个函数的函数时,更新和删除语句不起作用,虽然插入功能运行良好。我不知道为什么更新和删除不起作用。

我检查了4个小时的代码,但我不知道是什么问题。

这是一个与使用更新表中多列的方法相关的问题吗?

public function admin_ads_manage(){

/*###############site_links#################*/
$sel_links="SELECT * FROM site_links ORDER BY id DESC";
$query_sel_links=mysql_query($sel_links);

// Count table rows
$count_links=mysql_num_rows($query_sel_links);

//add data

$site_name=$_POST['addname'];
$site_link=$_POST['addlink'];

if($_POST['addsubmit']){
$add_site_links="INSERT INTO site_links(site_name,site_link) VALUES ('$site_name','$site_link')";
$query_add_site_links=mysql_query($add_site_links);
echo "<meta http-equiv=\"refresh\"";
}

/*###############site_links#################*/
?>  

<div id="adsform">
<form action="<?php echo $PHP_SELF; ?>" method="post">

<h1>ادارة أضف لنك موقعك</h1>

<table width="500" border="0" cellspacing="0" cellpadding="0">

<tr><td>اسم الموقع:<input type="text" name="addname" ></td><td>الرابط:<input type="text" name="addlink"><td><input type="submit" name="addsubmit" value="اضف الرابط" ></td></td></tr>
<tr>
<td>
<table width="600" border="0" cellspacing="1" cellpadding="0">


<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>اسم الموقع</strong></td>
<td align="center"><strong>رابط الموقع</strong></td>

</tr>
<?php
while($fetch_site_links=mysql_fetch_array($query_sel_links)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $fetch_site_links['id']; ?>"></td>
<td align="center"><? $id[]=$fetch_site_links['id']; ?><? echo $fetch_site_links['id']; ?></td>
<td align="center"><input name="sitename[]" type="text" id="sitename" value="<? echo $fetch_site_links['site_name']; ?>"></td>
<td align="center"><input name="sitelink[]" type="text" id="sitelink" value="<? echo $fetch_site_links['site_link']; ?>"></td>

</tr>
<?php
}
?>
<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="تعديل"></td>
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="حذف"></td>
</tr>
</table>
</td>
</tr>



</table>


<h1>اعلان اليوم</h1>    
<h5 dir="rtl">لاضافة بنر لموضع اعلان اليوم ,كل ما عليك هو استبدال الصورة الموجودة فى مجلدimages بحيث تكون بنفس المقاسات والتى تساوى100 x 300</h5>



<p>adsense 728x90:الاعلان العرضى</p>
<p><textarea cols="50" rows="15" name="ads728"><?php echo $file728; ?></textarea></p>

<p>adsense 600x160:الاعلان المربع</p>
<p><textarea cols="50" rows="15" name="ads600"><?php echo $file600; ?></textarea></p>


<p>adsense 300x250:الاعلان الطولى</p>
<p><textarea cols="50" rows="15" name="ads300"><?php echo $file300 ?></textarea></p>

<p><input type="submit" name="submit" value="حفظ" /></p>

</form> 

<?php
// Check if button name "Submit" is active, do this
if($Submit){
for($i=0;$i<$count_links;$i++){
$upd_site_links="UPDATE site_links SET site_name='$sitename[$i]', site_link='$sitelink[$i]' WHERE id='$id[$i]'";
$query_upd_site_links=mysql_query($upd_site_links);
echo "<meta http-equiv=\"refresh\">";
}
}

if($delete){
for($i=0;$i<$count_links;$i++){
$del_id = $checkbox[$i];
$del_links = "DELETE FROM site_links WHERE id='$del_id'";
$query_del_links= mysql_query($del_links);

}}

if($query_del_links){
echo "<meta http-equiv=\"refresh\" >";
}

if($query_upd_site_links){
echo "<meta http-equiv=\"refresh\" >";
}



}

2 个答案:

答案 0 :(得分:2)

确保类函数中的代码实际上可以访问您正在使用的所有变量。我想其中一个不在范围内。

$checkbox$sitename$sitelink$id$count_links可能是最有可能的罪魁祸首。

编辑:这是一个单一的功能吗?你应该把它分解成更小的函数,每个函数都做一件事。

答案 1 :(得分:1)

有很多问题。

  • mysqli_connect()(或同等学历)在哪里?您的函数似乎依赖于库上次使用的任何连接句柄。这不是很好的编码。
  • 您的UPDATE循环会为每一行发送HTTP刷新。
  • 实际上,您的操作逻辑已经过了您的显示逻辑。这也是错误的编码。
  • 但最重要的是你似乎依赖于register_globals而你甚至都没有意识到这一点。 You should turn this off

您的操作代码需要从$_POST$_GET(或$_REQUEST检索所需的所有变量,如果无关紧要的话)。每个动作(你有两个动作)只应该在它需要的所有变量都被考虑之后做它要求做的事情。假设所有字段变量都是自动全局变量,这是非常糟糕的编码。