【问题标题】:updating a particular field with id in php my sql data table用 php my sql 数据表中的 id 更新特定字段
【发布时间】:2011-11-23 04:00:30
【问题描述】:

以上是我页面的屏幕截图。我的问题是我从我的 sql 表中获取数据并创建一个这样的 php 数据表:

<?php
$s="select * from events join event_time on (events.event_id=event_time.event_id)

where events.isapproved='N' ";
$res=mysql_query($s);
echo "<table border='1' cellspacing='2' >
<tr>
<th>title</th>
<th>email</th>
<th>address</th>
<th>link</th>
<th>start_date</th>
<th>start_time</th>
<th>end_date</th>
<th>isapproved</th> 
</tr>";
while($info = mysql_fetch_array( $res )) 
{
echo "<tr>";
echo " <td>".$info['title'] . "</td> ";
echo " <td>".$info['email'] . "</td> ";
echo " <td>".$info['address'] . "</td> ";
echo " <td>".$info['link'] . "</td> ";
echo " <td>".$info['start_date'] . "</td> ";
echo " <td>".$info['start_time'] . "</td> ";
echo " <td>".$info['end_date'] . "</td> ";
echo "<td><a href=yes.php?".$info['event_id'] .">".$info['isapproved'] ."</a></td>";
echo "<td><a href=del.php?".$info['event_id'].">".'Delete'."</a></td></tr>";

}
echo "</table>";

?>

我想要访问的超链接是 是的.php

<?php
include("config/config.php");

$sq="select * from events";
$res=mysql_query($sq);
while($row=mysql_fetch_assoc($res))
{
if($row['isapproved']=='N')
{
$id=$row['event_id'];

}
}
$sql="UPDATE events SET isapproved= 'Y'
WHERE event_id='$id'";

$result = mysql_query($sql);


header("Location:admin.php");
?>

看,功能是当我点击超链接“N”时,我的表必须更新(如您在查询中看到的)值为“Y”。

真正的问题是,当我点击“N”时,我得到了 id,但是当查询 gt 更新时,表底部的行更新为“Y”。问题是什么?任何人都可以看看它..我快死了...

【问题讨论】:

  • 你能做一个 var_dump 并在呈现的 HTML 中向我们展示几行,这样我们就可以看到 N 和 Y 的值是什么?
  • 您真的希望通过单击任何行来更新所有现有行吗?还是只想更新被点击的一行?

标签: php mysql datatable


【解决方案1】:

如果我没记错的话,你想要下面的东西。首先用这个改变你的 php 数据表:

while($info = mysql_fetch_array( $res )) 
{
echo "<tr>";
echo " <td>".$info['title'] . "</td> ";
echo " <td>".$info['email'] . "</td> ";
echo " <td>".$info['address'] . "</td> ";
echo " <td>".$info['link'] . "</td> ";
echo " <td>".$info['start_date'] . "</td> ";
echo " <td>".$info['start_time'] . "</td> ";
echo " <td>".$info['end_date'] . "</td> ";
echo "<td><a href=yes.php?id=".$info['event_id'] .">".$info['isapproved'] ."</a></td>";
echo "<td><a href=del.php?".$info['event_id'].">".'Delete'."</a></td></tr>";

}

然后用以下代码更改yes.php文件:

<?php
include("config/config.php");
$id=$_GET['id'];
$sql="UPDATE events SET isapproved= 'Y'
WHERE event_id='$id'";

$result = mysql_query($sql);


header("Location:admin.php");
?>

【讨论】:

    【解决方案2】:

    使用此代码:

    $sq="select * from events";
    $res=mysql_query($sq);
    while($row=mysql_fetch_assoc($res))
    {
    if($row['isapproved']=='N')
    {
    $id=$row['event_id'];
    
    }
    }
    

    您正在获取所有未批准事件的 id 并将它们存储(覆盖)在 $id 中。您可能希望将所有这些更改为 $id = intval($_GET['id']);,然后在您的其他页面中将 &lt;a href=yes.php?".$info['event_id'] ."&gt; 更改为 &lt;a href=yes.php?id=".$info['event_id'] ."&gt;

    您可能还想对该输入添加自己的验证。请记住,通过 get 发送的任何内容都是不安全的。如果有人尝试进行注入攻击 intval 只会将其转换为整数(0 如果它无法转换),所以你可以安全,但人们可以伪造他们想要的任何 id 并拥有它的状态改变了。此外,如果您有一个 id 为 0 的事件,如果您不进行测试,失败的 intval 将修改它而不是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2013-08-09
      • 2021-03-15
      • 2014-02-01
      • 1970-01-01
      • 2018-01-15
      相关资源
      最近更新 更多