0

假设我有一个包含10 条记录的,我想从这 10 条记录中获取namelastnamerank 。首先我做这样的事情:

<?php // DATABASE SELECT QUERY
      $db =& JFactory::getDBO();
      $query="SELECT name, lastname, rank
                FROM table
               ORDER BY rank ASC";
      $db->setQuery($query);
      $rows = $db->loadObjectList(); ?>

然后,我在表单中添加了一些包含表值的字段,因此我可以通过表单对其进行编辑:

<form action="#" method="post" name="form">

<table><?php $count    = 0; while ($count < 10){
             $name     = $rows[$count]->name;
             $lastname = $rows[$count]->lastname;
             $rank     = $rows[$count]->rank; ?>
<tr>

<td><input name="name" value="<?php echo $name ?>" type="text" /></td>
<td><input name="lastname" value="<?php echo $lastname ?>" type="text" /></td>
<td><select name="rank">
    <option value="<?php echo $rank ?>"><?php echo $rank ?></option>
    <option disabled="disabled" value="...">...</option>
    <?php for ($i = 0; $i <= 100; $i++){ ?>
    <option value="<?php echo $i ?>"><?php echo $i ?></option> <?php } ?>
    </select></td>  

</tr><?php $count++;}?>

</table>

<input class="something" name="updatemod" type="submit" value="UPDATE" />
</form>

接下来,在选择查询之前,我在下面使用此方法添加了一个更新查询,所以当我按下更新按钮时,更新我的数据库:

// DATABASE UPDATE QUERY
if (isset($_POST['updatemod']) or isset($_GET['updatemod'])){
$db =& JFactory::getDBO();
$query = "UPDATE table
             SET name = '".$_POST["name"]."',
             SET lastname = '".$_POST["lastname"]."',
             SET rank = '".$_POST["rank"]."'
             ";
$db->setQuery($query);
$db->query();}

但是......没有任何工作!我对另一种形式做了完全相同的事情,而且效果很好!这两种形式的唯一区别是我没有while在另一种形式中使用这个循环。所以,也许它与这个或什么有关???我不知道,此时是我的知识混乱的地方,所以我需要你的帮助!

4

1 回答 1

1

我认为您正在尝试更新表中的所有行。

如果是这种情况,你需要做这样的事情。

<?php // DATABASE SELECT QUERY // also you should select your unique id field
      $db =& JFactory::getDBO();
      $query="SELECT name, lastname, rank,id
                FROM table
               ORDER BY rank ASC";
      $db->setQuery($query);
      $rows = $db->loadObjectList(); ?>

在您的表单中,您将元素名称设置为单个,但您的要求是一次编辑所有行,您应该使用输入名称作为数组。此外,您还必须在此处引入一个新的 id 字段以用于更新条件

    <form action="#" method="post" name="form">

    <table><?php $count    = 0; while ($count < 10){
                 $name     = $rows[$count]->name;
                 $lastname = $rows[$count]->lastname;
                 $rank     = $rows[$count]->rank;
                  $id      = $rows[$count]->id; ?>
    <tr>

    <td><input name="uid[]" value="<?php echo $id?>" type="hidden" />
<input name="name[]" value="<?php echo $name ?>" type="text" /></td>
    <td><input name="lastname[]" value="<?php echo $lastname ?>" type="text" /></td>
    <td><select name="rank[]">
        <option value="<?php echo $rank ?>"><?php echo $rank ?></option>
        <option disabled="disabled" value="...">...</option>
        <?php for ($i = 0; $i <= 100; $i++){ ?>
        <option value="<?php echo $i ?>"><?php echo $i ?></option> <?php } ?>
        </select></td>  

    </tr><?php $count++;}?>

    </table>

    <input class="something" name="updatemod" type="submit" value="UPDATE" />
    </form>

同样在您的更新查询中也需要循环和 where cluase

// DATABASE UPDATE QUERY
if (isset($_POST['updatemod']) or isset($_GET['updatemod'])){
$db =& JFactory::getDBO();
$total_rows = sizeof($_POST["uid"]);
for($i =0; $i<$total_rows;$i++){

$query = "UPDATE table
             SET name = '".$_POST["name"][$i]."',
             lastname = '".$_POST["lastname"][$i]."',
             rank = '".$_POST["rank"][$i]."'
              WHERE id = '".$_POST["uid"][$i]."'
             ";
$db->setQuery($query);
$db->query();
}
}

我认为这将解决您的问题。

在这里,我刚刚提到了“id”作为您可能不同的表的唯一键。但您会明白的,我希望

但这是一个最坏的更新条件 Bcoz 你只是想象一个有 1000 行的表。需要很长时间才能得到结果。

尝试用适当的方法更新单行。这是最好的方法。

希望这可以帮助你。

于 2013-01-16T11:38:19.163 回答