PHP循环不起作用

PHP循环不起作用,php,mysql,foreach,while-loop,Php,Mysql,Foreach,While Loop,我试图从带有数组的表单中获取值,我需要从bd获取ID以进行更新,但它不起作用,也许你给我一个主意,我会发布代码,这样你就可以理解了。提前感谢您的帮助 <?php include "conecta.php"; include "verifica.php"; $sql1 = "SELECT idcategorias FROM categorias"; $res = mysql_query($sql1); while ($row=mysql_fetch_array($res)){ $go

我试图从带有数组的表单中获取值,我需要从bd获取ID以进行更新,但它不起作用,也许你给我一个主意,我会发布代码,这样你就可以理解了。提前感谢您的帮助

<?php

include "conecta.php";
include "verifica.php";



$sql1 = "SELECT idcategorias FROM categorias";
$res = mysql_query($sql1);
while ($row=mysql_fetch_array($res)){
$gosma = $row["idcategorias"];
}

foreach ($_POST['ordem'] as $key => $value){


$sql = "UPDATE categorias SET ordem='$value' WHERE idcategorias='$gosma'";
$res = mysql_query($sql) or die ("Erro ao alterar") . mysql.error();
}

if($res) {
echo("<script>alert('DADOS ALTERADOS COM SUCESSO ');</script>");
echo "<meta HTTP-EQUIV='refresh' CONTENT='1;URL=lista_categorias.php'>";

 }

else{
echo("<script>alert('ORDEM INALTERADA, TENTE NOVAMENTE');</script>");
echo "<meta HTTP-EQUIV='refresh' CONTENT='1;URL=altera_ordem_categoria.php'>";
}

?>



您的while循环每次都会覆盖
$row
。你不是故意的吗

$gosma = array();
while ($row=mysql_fetch_array($res)) {
    $gosma[] = $row["idcategorias"];
}
在插入查询之前,应始终转义:

$sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' WHERE idcategorias='".mysql_real_escape_string($gosma)."'";
您应该将mysql_错误放在die函数中(不要在名称中使用点)


在这个周期里你想做什么

foreach ($_POST['ordem'] as $key => $value) {   
    $sql = "UPDATE categorias SET ordem='$value' WHERE idcategorias='$gosma'";
    $res = mysql_query($sql) or die ("Erro ao alterar") . mysql.error();
}
你不想要这样的东西吗

foreach ($_POST['ordem'] as $key => $value) {   
    $sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' WHERE idcategorias='".mysql_real_escape_string($key)."'";
    $res = mysql_query($sql) or die ("Erro ao alterar: ".mysql_error());
}


编辑

<form action="altera_ordem_cat.php" method="post">
  <table>
<?php
include "conecta.php";
include "verifica.php";
$sql = "SELECT idcategorias, ordem FROM categorias ORDER BY ordem";
$res = mysql_query($sql) or die (mysql_error());

while ($linha = mysql_fetch_array($res)) {
?>
  <tr>
    <td><input name='ordem[<?php echo $linha[0]; ?>]' type='text' id='textfield' size='2' maxlength='2' value='<?php echo $linha[1]; ?>'/></td>
    <td></td> 
</tr>
<?php
}
?>
  </table>
<!-- ........ -->

然后:

<?php

include "conecta.php";
include "verifica.php";

foreach ($_POST['ordem'] as $key => $value) {   
  $sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' ".
         "WHERE idcategorias='".mysql_real_escape_string($key)."'";
  $res = mysql_query($sql) or die ("Erro ao alterar: ".mysql_error());
}

请澄清问题所在。你得到了什么具体的错误?你期望它做什么?你在这里到底想做什么?你期望它做什么?它做了什么?你试过什么?你想做什么?您的代码存在许多问题。请显示您的表单,至少是您应该为“ordem”($\u POST['ordem'])包含多个字段的部分。您需要指定您面临的确切问题。不要期望这里的人为您测试代码,测试确实很困难,因为这样做需要数据库中的相关表,而这不可能一目了然地创建。所以,请准确回答您的问题。Czetechnology,是的,但如果我在数据库升级后关闭while,不知何故,$row会变成0作为一个值,因此它无法将$value分配给id$gosma。如果我在数据库更新后关闭它,它就不会循环。@Renato Ferreira,我认为你的状态也不好。您应该这样编写字段
您给出的最后一个示例应该可以很好地工作,但它不会更新数据库,并在表单创建后返回数组submited@RenatoFerreira,它应该以
idcategorias=>ordem
的形式返回一个数组。请看我编辑的答案。我确实在这里尝试过,但也不起作用。因为我在db发布的原始代码应该在idcategorias行上完成更新,我从bd检索了一段时间,但根本不起作用。
<form action="altera_ordem_cat.php" method="post">
  <table>
<?php
include "conecta.php";
include "verifica.php";
$sql = "SELECT idcategorias, ordem FROM categorias ORDER BY ordem";
$res = mysql_query($sql) or die (mysql_error());

while ($linha = mysql_fetch_array($res)) {
?>
  <tr>
    <td><input name='ordem[<?php echo $linha[0]; ?>]' type='text' id='textfield' size='2' maxlength='2' value='<?php echo $linha[1]; ?>'/></td>
    <td></td> 
</tr>
<?php
}
?>
  </table>
<!-- ........ -->
<?php

include "conecta.php";
include "verifica.php";

foreach ($_POST['ordem'] as $key => $value) {   
  $sql = "UPDATE categorias SET ordem='".mysql_real_escape_string($value)."' ".
         "WHERE idcategorias='".mysql_real_escape_string($key)."'";
  $res = mysql_query($sql) or die ("Erro ao alterar: ".mysql_error());
}
$gosma[] = $row["idcategorias"]; instead of $gosma = $row["idcategorias"];