Foros del Web » Programando para Internet » PHP »

Warning: Invalid argument supplied for foreach()

Estas en el tema de Warning: Invalid argument supplied for foreach() en el foro de PHP en Foros del Web. Hola, le ando dando vueltas a este problema, y no le encuentro por donde, alguien me puede ayudar? Código PHP: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>OA</title> </head> ...
  #1 (permalink)  
Antiguo 11/02/2013, 17:51
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 7 años, 7 meses
Puntos: 0
Warning: Invalid argument supplied for foreach()

Hola, le ando dando vueltas a este problema, y no le encuentro por donde, alguien me puede ayudar?

Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OA</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data"> 
<?php    
require ('conexion.php');
 echo
"Debes llenar los datos<br>";
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 if (isset(
$_POST["guardar"])){
 if(
$conexion=conexion()){
 
$sql="SELECT oa_reg FROM oa WHERE id='$_POST[id]' AND oa_reg='1' ";
 
$resultado=mysql_query($sql);
  if(@
mysql_num_rows($resultado)==0){ 
  
$sql="INSERT INTO oa (oa_nom,oa_pu,oa_con,oa_ex,oa_ha,oa_re,id) VALUES ('$_POST[oa_nom]','$_POST[oa_pu]','$_POST[oa_con]','$_POST[oa_ex]','$_POST[oa_ha]','$_POST[oa_re]','$_POST[id]')";
 if([email protected]
mysql_query($sql,$conexion)){
 echo 
'Error al insertar la información OA';}
 else{
 echo 
'<br>Información insertada correctamente. Puede agregar otro socio, o ir a AM';}
 }
 else{echo
"Ya existen los datos";
 
$sql="SELECT oa_nom,oa_pu,oa_con,oa_ex,oa_ha,oa_re FROM oa WHERE id='$_POST[id]'";
  if(
$resultado=mysql_query($sql,$conexion)){
  
  echo
"<br>En los campos del formulario se ven los valores actuales, si no los actualiza los valores se mantienen";
 
$dat_oa=mysql_fetch_array($resultado);
 
$contar_doa=mysql_num_rows($resultado);
 do{
 echo
"<table width='200' border='1'>";
  echo
"<tr>";
   echo
"<td>Nombre completo</td>";
   echo
"<td>Puesto</td>";
   echo
"<td>Conocimientos</td>";
   echo
"<td>Experiencia</td>";
   echo
"<td>Habilidades</td>";
   echo
"<td>Reconocimientos</td>";
 echo
"</tr>";
 echo
"<tr>";
 
    echo
"<td><input type='text' name='oa_nombre[]' value='$datos_organizacion_administrativa['oa_nom']'></td>";
    echo
"<td><input type='text' name='oa_puesto[]' value='".$datos_organizacion_administrativa['oa_pu']."'></td>";
    echo
"<td><textarea name='oa_conocimiento[]' cols='20' rows='10' value='".$datos_organizacion_administrativa['oa_con']."'></textarea></td>";
    echo
"<td><textarea name='oa_experiencia[]' cols='20' rows='10' value='".$datos_organizacion_administrativa['oa_ex']."'></textarea></td>";
    echo
"<td><textarea name='oa_habilidades[]' cols='20' rows='10' value='".$datos_organizacion_administrativa['oa_ha']."'></textarea></td>";
    echo
"<td><textarea name='oa_reconocimientos[]'cols='20' rows='10' value='".$datos_organizacion_administrativa['oa_re']."'></textarea></td>";
   echo
"</tr>";
echo
"</table>";
echo
"<br>";
}
while(
$dat_oa=mysql_fetch_array($resultado));
 }
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 echo
"<input type='hidden' name='contar_doa' value='".$contar_doa."'>";
 echo
"<br><input type='submit' name='actualizar_oa' value='Actualizar los datos en OA'>";
 echo
"<br><input type='submit' name='am' value='Continuar con AM'>";
 }
 }
 else{
 echo 
'<br>No se realizó la conexión.';}
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 }
?>
 <table width="200" border="1">
 <tr>
 <td>Nombre completo</td>
 <td>Puesto</td>
 <td>Conocimientos</td>
 <td>Experiencia</td>
 <td>Habilidades</td>
 <td>Reconocimientos</td>
 </tr>
 <tr>
    <td><input type="text" name="oa_nom"></td>
    <td><input type="text" name="oa_pu"></td>
    <td><textarea name="oa_con" cols="20" rows="10"></textarea></td>
    <td><textarea name="oa_ex" cols="20" rows="10"></textarea></td>
    <td><textarea name="oa_ha" cols="20" rows="10"></textarea></td>
    <td><textarea name="oa_re" cols="20" rows="10"></textarea></td>
 </tr>
    </table>

  <div align="center">
 <input type="submit" name="guardar" value="Añadir" />
 <input type="submit" name="terminar" value="Terminar" />
 </div>
</form>
<form action="di" method="post" enctype="multipart/form-data"> 
<?php
if(isset($_POST['actualizar_oa'])){
if(
$conexion=conexion()){
foreach(
$_POST['oa_nom'] as $value) { 

        echo(
$value);}
$oa_nom=$_POST['oa_nom'];
$oa_pu=$_POST['oa_pu'];
$oa_con=$_POST['oa_con'];
$oa_ex=$_POST['oa_ex'];
$oa_ha=$_POST['oa_ha'];
$oa_re=$_POST['oa_re'];
$contar_doa=$_POST['contar_doa'];
echo
"<br>$oa_nom";
echo
"<br>$oa_nom[0]";
echo
"<br>$oa_nom[1]";
for(
$i=0;$i<$contar_doa;$i++){
  
$sql="UPDATE oa SET oa_nombre='".$oa_nombre[$i]."',oa_puesto='".$oa_puesto[$i]."',oa_conocimiento='".$oa_conocimiento[$i]."',oa_experiencia='".$oa_experiencia[$i]."',oa_habilidades='".$oa_habilidades[$i]."',oa_reconocimientos='".$oa_reconocimientos[$i]."', WHERE id='$_POST[id]'";
}
 if([email protected]
mysql_query($sql,$conexion)){
 echo 
'Error al actualizar la información OA';}
 else{
 echo 
'<br>Información actualizada correctamente.<br>';
 echo
"<input type='submit' name='am' value='AM' />";
echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";}
}
else{
 echo 
'No se realizó la conexión.';
 }
}

if (isset(
$_POST["terminar"])){
if(
$conexion=conexion()){
$sql="UPDATE oa SET oa_re='1' WHERE id='$_POST[id]'";
 if([email protected]
mysql_query($sql,$mi_conexion)){
 echo 
'Error al actualizar la información OA';}
 else{
 echo 
'<br>Información actualizada correctamente.<br>';
 echo
"<input type='submit' name='am' value='AM' />";
echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";}
}
else{
 echo 
'No se realizó la conexión.';
 }
}
?>
</form>
</body>
</html>
este es mi codigo, y no le encuentro el error¡¡ayuda por fas¡¡¡¡
  #2 (permalink)  
Antiguo 11/02/2013, 17:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.064
Antigüedad: 11 años, 9 meses
Puntos: 2215
Respuesta: Warning: Invalid argument supplied for foreach()

Código PHP:
Ver original
  1. // Tienes esto:
  2.  echo"<td><input type='text' name='oa_nombre[]' value='$datos_organizacion_administrativa['oa_nom']'></td>";
  3.  
  4. // Pero, intentas sobre un campo que no existe
  5. foreach($_POST['oa_nom'] as $value) {

El nombre del campo es oa_nombre, pero tratas de accederlo desde $_POST['oa_nom']

Luego, la forma correcta de recorrer todos los arreglos al mismo tiempo es usando índice y valor, ejemplo:

Código PHP:
Ver original
  1. foreach($_POST['oa_nombre'] as $index => $value) {
  2.     // en $value tienes sólo lo de oa_nombre, no los demás
  3.     $oa_nom = $value;
  4.  
  5.     // El nombre corresponde a lo que pusiste como name en el input
  6.     // y no al nombre de campo en la tabla
  7.     $oa_pu = $_POST['oa_puesto'][$index];
  8.  
  9.     // Haces lo mismo para los otros campos y listo!
  10. }
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 11/02/2013, 21:29
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 7 años, 7 meses
Puntos: 0
Respuesta: Warning: Invalid argument supplied for foreach()

Hola Triby, gracias por contestar, voy viendo que mi codigo no estaba bien escrito... copie la version anterior, esta es la version que si es:
Código PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OA</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data"> 
<?php    
require ('conexion.php');
 echo
"Debes llenar los datos<br>";
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 if (isset(
$_POST["guardar"])){
 if(
$conexion=conexion()){
 
$sql="SELECT oa_reg FROM oa WHERE id='$_POST[id]' AND oa_reg='1' ";
 
$resultado=mysql_query($sql);
  if(@
mysql_num_rows($resultado)==0){ 
  
$sql="INSERT INTO oa (oa_nom,oa_pu,oa_con,oa_ex,oa_ha,oa_re,id) VALUES ('$_POST[oa_nom]','$_POST[oa_pu]','$_POST[oa_con]','$_POST[oa_ex]','$_POST[oa_ha]','$_POST[oa_re]','$_POST[id]')";
 if([email protected]
mysql_query($sql,$conexion)){
 echo 
'Error al insertar la información OA';}
 else{
 echo 
'<br>Información insertada correctamente. Puede agregar otro socio, o ir a AM';}
 }
 else{echo
"Ya existen los datos";
 
$sql="SELECT oa_nom,oa_pu,oa_con,oa_ex,oa_ha,oa_re FROM oa WHERE id='$_POST[id]'";
  if(
$resultado=mysql_query($sql,$conexion)){
  
  echo
"<br>En los campos del formulario se ven los valores actuales, si no los actualiza los valores se mantienen";
 
$dat_oa=mysql_fetch_array($resultado);
 
$contar_doa=mysql_num_rows($resultado);
 do{
 echo
"<table width='200' border='1'>";
  echo
"<tr>";
   echo
"<td>Nombre completo</td>";
   echo
"<td>Puesto</td>";
   echo
"<td>Conocimientos</td>";
   echo
"<td>Experiencia</td>";
   echo
"<td>Habilidades</td>";
   echo
"<td>Reconocimientos</td>";
 echo
"</tr>";
 echo
"<tr>";
 
    echo
"<td><input type='text' name='oa_nom[]' value='".$dat_oa['oa_nom']."'></td>";
    echo
"<td><input type='text' name='oa_pu[]' value='".$dat_oa['oa_pu']."'></td>";
    echo
"<td><textarea name='oa_con[]' cols='20' rows='10' value='".$dat_oa['oa_con']."'></textarea></td>";
    echo
"<td><textarea name='oa_ex[]' cols='20' rows='10' value='".$dat_oa['oa_ex']."'></textarea></td>";
    echo
"<td><textarea name='oa_ha[]' cols='20' rows='10' value='".$dat_oa['oa_ha']."'></textarea></td>";
    echo
"<td><textarea name='oa_re[]'cols='20' rows='10' value='".$dat_oa['oa_re']."'></textarea></td>";
   echo
"</tr>";
echo
"</table>";
echo
"<br>";
}
while(
$dat_oa=mysql_fetch_array($resultado));
 }
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 echo
"<input type='hidden' name='contar_doa' value='".$contar_doa."'>";
 echo
"<br><input type='submit' name='actualizar_oa' value='Actualizar los datos en OA'>";
 echo
"<br><input type='submit' name='am' value='Continuar con AM'>";
 }
 }
 else{
 echo 
'<br>No se realizó la conexión.';}
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 }
?>
 <table width="200" border="1">
 <tr>
 <td>Nombre completo</td>
 <td>Puesto</td>
 <td>Conocimientos</td>
 <td>Experiencia</td>
 <td>Habilidades</td>
 <td>Reconocimientos</td>
 </tr>
 <tr>
    <td><input type="text" name="oa_nom"></td>
    <td><input type="text" name="oa_pu"></td>
    <td><textarea name="oa_con" cols="20" rows="10"></textarea></td>
    <td><textarea name="oa_ex" cols="20" rows="10"></textarea></td>
    <td><textarea name="oa_ha" cols="20" rows="10"></textarea></td>
    <td><textarea name="oa_re" cols="20" rows="10"></textarea></td>
 </tr>
    </table>

  <div align="center">
 <input type="submit" name="guardar" value="Añadir" />
 <input type="submit" name="terminar" value="Terminar" />
 </div>
</form>
<form action="di" method="post" enctype="multipart/form-data"> 
<?php
if(isset($_POST['actualizar_oa'])){
if(
$conexion=conexion()){
// foreach($_POST['oa_nom'] as $value) { 

        // echo($value);}
$oa_nom=$_POST['oa_nom'];
$oa_pu=$_POST['oa_pu'];
$oa_con=$_POST['oa_con'];
$oa_ex=$_POST['oa_ex'];
$oa_ha=$_POST['oa_ha'];
$oa_re=$_POST['oa_re'];
$contar_doa=$_POST['contar_doa'];
echo
"<br>$oa_nom";
echo
"<br>$oa_nom[0]";
echo
"<br>$oa_nom[1]";
for(
$i=0;$i<$contar_doa;$i++){
  
$sql="UPDATE oa SET oa_nombre='".$oa_nom[$i]."',oa_puesto='".$oa_pu[$i]."',oa_conocimiento='".$oa_con[$i]."',oa_experiencia='".$oa_ex[$i]."',oa_habilidades='".$oa_ha[$i]."',oa_reconocimientos='".$oa_re[$i]."', WHERE id='$_POST[id]'";
}
 if([email protected]
mysql_query($sql,$conexion)){
 echo 
'Error al actualizar la información OA';}
 else{
 echo 
'<br>Información actualizada correctamente.<br>';
 echo
"<input type='submit' name='am' value='AM' />";
echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";}
}
else{
 echo 
'No se realizó la conexión.';
 }
}

if (isset(
$_POST["terminar"])){
if(
$conexion=conexion()){
$sql="UPDATE oa SET oa_re='1' WHERE id='$_POST[id]'";
 if([email protected]
mysql_query($sql,$conexion)){
 echo 
'Error al actualizar la información OA';}
 else{
 echo 
'<br>Información actualizada correctamente.<br>';
 echo
"<input type='submit' name='am' value='AM' />";
echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";}
}
else{
 echo 
'No se realizó la conexión.';
 }
}
?>
</form>
</body>
</html>
ES VERDAD LA PRIMER OBSERVACION QUE HACES, QUE LLAMABA CON OTRO NOMBRE, PERO EL LA VERSION QUE SI VA SI LLEVAN EL MISMO NOMBRE, Y LA FORMA DE RECORRER TODOS LOS VALORES LA HAGO CON UN FOR, LA PUEDES CHECAR PORFAS?????????.........SIGUE SALIENDOME EL ERROR DEL FOREACH, Y ESTE OTRO:


Notice: Uninitialized string offset: 0 in C:\xampp\htdocs\d\d1.3.php on line 107
la línea 107 es:

$sql="UPDATE oa SET oa_nombre='".$oa_nom[$i]."',oa_puesto='".$oa_pu[$i]."',oa_conocimiento='".$oa_con[$i]."',oa_experiencia='".$oa_ex[$i]."',oa_habilidades='".$oa_ha[$i]."',oa_reconocimientos='".$oa_re[$i]."', WHERE id='$_POST[id]'";
  #4 (permalink)  
Antiguo 11/02/2013, 22:35
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 7 años, 7 meses
Puntos: 0
Respuesta: Warning: Invalid argument supplied for foreach()

hola, ya resolví el problema, el problema es que le ponía el mismo nombre a las variables, tanto en la sentencias:
Código PHP:
 echo"<td><input type='text' name='oa_nom[]' value='".$dat_oa['oa_nom']."'></td>";
    echo
"<td><input type='text' name='oa_pu[]' value='".$dat_oa['oa_pu']."'></td>";
    echo
"<td><textarea name='oa_con[]' cols='20' rows='10' value='".$dat_oa['oa_con']."'></textarea></td>";
    echo
"<td><textarea name='oa_ex[]' cols='20' rows='10' value='".$dat_oa['oa_ex']."'></textarea></td>";
    echo
"<td><textarea name='oa_ha[]' cols='20' rows='10' value='".$dat_oa['oa_ha']."'></textarea></td>";
    echo
"<td><textarea name='oa_re[]'cols='20' rows='10' value='".$dat_oa['oa_re']."'></textarea></td>"
COMO EN LAS SIGUIENTES:

Código PHP:
<table width="200" border="1">
 <
tr>
 <
td>Nombre completo</td>
 <
td>Puesto</td>
 <
td>Conocimientos</td>
 <
td>Experiencia</td>
 <
td>Habilidades</td>
 <
td>Reconocimientos</td>
 </
tr>
 <
tr>
    <
td><input type="text" name="oa_nom"></td>
    <
td><input type="text" name="oa_pu"></td>
    <
td><textarea name="oa_con" cols="20" rows="10"></textarea></td>
    <
td><textarea name="oa_ex" cols="20" rows="10"></textarea></td>
    <
td><textarea name="oa_ha" cols="20" rows="10"></textarea></td>
    <
td><textarea name="oa_re" cols="20" rows="10"></textarea></td>
 </
tr>
    </
table
Por esta razón no me inicializaba las cadenas, gracias por la ayuda¡¡... solo había que cambiar el nombre para que fueran diferentes¡¡ GRACIAS¡¡

Etiquetas: formulario, html, invalid, select, sql, warning
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:01.