Foros del Web » Programando para Internet » PHP »

in_array(): Wrong datatype for second argument

Estas en el tema de in_array(): Wrong datatype for second argument en el foro de PHP en Foros del Web. Hola... estoy haciendo un formulario que me permite insertar registros e irlos guardando (actualizando) a medida que valla trabajando, en este caso son noticias. El ...
  #1 (permalink)  
Antiguo 07/11/2008, 10:44
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
in_array(): Wrong datatype for second argument

Hola... estoy haciendo un formulario que me permite insertar registros e irlos guardando (actualizando) a medida que valla trabajando, en este caso son noticias.

El problema es que cada noticia puede tener varias categorias y cuando hago el INSERT me da este error la funcion in_array:
Cita:
Warning: in_array() [function.in-array]: Wrong datatype for second argument in D:\WAMP-SERVER\wamp\www\arnac.cu.industrial\admin\admin-modulos\admin-escribir-entrada.php on line 104
Puede ser por el uso de sessiones? aqui el codigo:
Código php:
Ver original
  1. <?php // enviar las categorias a la entrada
  2. $sqlQueryCat = mysql_query("SELECT * FROM categorias", $db_link)
  3.                             or die(mysql_error());
  4. while ($row = mysql_fetch_array($sqlQueryCat)){
  5.     if(!isset($_SESSION['envio'])){
  6.         echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' />$row[catTitulo] - $row[catIdioma]<br />";
  7.     }else{
  8.         if(in_array($rowEntrada['entradaCatID'], $_SESSION['campos']['catID'])){ // el error lo da en esta linea
  9.             echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' checked='checked' />$row[catTitulo] - $row[catIdioma]<br />";
  10.         }else{
  11.             echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' />$row[catTitulo] - $row[catIdioma]<br />";
  12.         }
  13.     }
  14. }
  15. ?>
$_SESSION['envio'] es una variable que guarda un valor si el formulario se ha enviado, de lo contrario estara vacia..

$rowEntrada['entradaCatID'] deveria mostrar el registro guardado en el campo entradaCatID

Lo que quiero lograr es que al checar las casillas de las posibles categorias, estas permanezcan acivadas al presionar el boton guardar... hay otro boton Publicar que funciona perfectamente, claro, porque destruye todas las variables de session que tengo.

Solo puse ese pedaso para no complicar mucho la cosa
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 07/11/2008, 11:50
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Me respondo a mi mismo: rogertm <- mi mismo, ya no me da el error, pero tampoco me muestra los resultados.

Ahora le pregunto a esta GRAN comunidad... que tengo mal?
Código php:
Ver original
  1. <?php // enviar las categorias a la entrada
  2. $sqlQueryCat = mysql_query("SELECT * FROM categorias", $db_link)
  3.                             or die(mysql_error());
  4. while ($row = mysql_fetch_array($sqlQueryCat)){
  5.     echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' />$row[catTitulo] - $row[catIdioma]<br />";
  6. }
  7. if(isset($_SESSION['envio'])){
  8.     echo "<hr />";
  9.     $sqlQuerySesCat    = mysql_query("SELECT * FROM categorias", $db_link)
  10.                                     or die(mysql_error());
  11.     $rowSesCat    = mysql_fetch_array($sqlQuerySesCat);
  12.     // sacamos las categorias
  13.     if(in_array($rowSesCat['catID'], $_SESSION['sesCatID'])){
  14.         echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' checked='checked' />$row[catTitulo] - $row[catIdioma]<br />";
  15.     }
  16. }
  17. ?>
Ahora lo que pretendo (me fui por lo mas facil) es que al enviar el formulario, me muestre las categorias antes seleccionadas aparte de las demas... pero no me las muestra

gracias mil de antemano
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #3 (permalink)  
Antiguo 07/11/2008, 11:59
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: in_array(): Wrong datatype for second argument

Si no te muestra nada quiere decir que $_SESSION['sesCatID'] es un array vacío, o que para todos los registros el elemento $rowSesCat['catID'] no existe en ese array.

Cómo es que lo armas?

Saludos,
  #4 (permalink)  
Antiguo 07/11/2008, 12:27
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Okram me descubriste, jaja, por donde te respondo, por aqui o por alla?

Creo que para decirte como armo eso tendria que poner casi todo o todo el megacodigo que tengo... bueno lopongo y ya me diras:
Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. // guardamos las noticias en la base de datos
  7. if(isset($_POST['form'])){
  8.     // que boton se envio?
  9.     $form    = $_POST['form'];
  10.  
  11.     // que todos los campos lleguen llenos
  12.     if(!empty($_POST['entradaTitulo']) && !empty($_POST['entradaTexto']) && !empty($_POST['entradaCatID'])){
  13.  
  14.         // variables
  15.         $entradaTitulo    = $_POST['entradaTitulo'];
  16.         $entradaTexto    = $_POST['entradaTexto'];
  17.         $entradaIdioma    = $_POST['entradaIdioma'];
  18.         $entradaEstado    = $_POST['entradaEstado'];
  19.         $entradaCatID    = implode(",", $_POST['entradaCatID']);
  20.  
  21.         // las guardamos en sessiones
  22.         $_SESSION['campos'] = array(
  23.             'titulo'    => $entradaTitulo,
  24.             'texto'        => $entradaTexto,
  25.             'idioma'    => $entradaIdioma,
  26.             'estado'    => $entradaEstado,
  27.             'catID'        => $entradaCatID,
  28.         );
  29.  
  30.         // sentencias
  31.         $insert    = "INSERT INTO entradas (entradaTitulo, entradaTexto, entradaIdioma, entradaEstado, entradaCatID)
  32.                    VALUES ('$entradaTitulo', '$entradaTexto', '$entradaIdioma', '$entradaEstado', '$entradaCatID')";
  33.  
  34.         $select    = mysql_query("SELECT entradaID, entradaCatID
  35.                                FROM entradas
  36.                                ORDER BY entradaID DESC",$db_link)
  37.                                 or die(mysql_error());
  38.         $rowEntrada    = mysql_fetch_array($select);
  39.  
  40.         $id        = $rowEntrada['entradaID'];
  41.         $catID    = array($rowEntrada['entradaCatID']); // esta es el array para las categorias
  42.         $_SESSION['sesCatID'] = $catID;
  43.  
  44.         $update    = "UPDATE entradas SET
  45.                    entradaTitulo = '$entradaTitulo', entradaTexto = '$entradaTexto', entradaIdioma = '$entradaIdioma',
  46.                    entradaEstado = '$entradaEstado', entradaCatID = '$entradaCatID'
  47.                    WHERE entradaID = '$id'";
  48.  
  49.         // creamos la sentencia que vamos a usar en la consulta
  50.         if($form == 'Guardar'){
  51.             $envio        = "ok";
  52.             if(!empty($_POST['envio'])){
  53.                 $sentencia    = $update;
  54.             }else{
  55.                 $sentencia    = $insert;
  56.             }
  57.             $_SESSION['sentencia']    = $sentencia;
  58.             $_SESSION['envio']        = $envio;
  59.         }
  60.         if($form == 'Publicar'){
  61.             $envio        = "ok";
  62.             if(!empty($_POST['envio'])){
  63.                 $sentencia = $update;
  64.             }else{
  65.                 $sentencia = $insert;
  66.             }
  67.  
  68.             // destruimos todas las sessiones
  69.             unset($_SESSION['sentencia']);
  70.             unset($_SESSION['campos']);
  71.             unset($_SESSION['envio']);
  72.         }
  73.  
  74.         // hacemos la consulta INSERT o UPDATE
  75.         $sqlQuery    = mysql_query("$sentencia", $db_link) or die(mysql_error());
  76.  
  77.     }else{
  78.         $error = "Debe llenar todos los campos";
  79.     }
  80. }
  81. ?>
  82. <h1 class="pagetitulo">Escribir Entrada</h1>
  83. <?php
  84. echo var_dump($_SESSION['sesCatID']);
  85. //var_dump($_SESSION['envio']);
  86. ?>
  87. <div id="post">
  88.     <?php if($error){echo "<p class='error'>".$error."</p>";} ?>
  89.     <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
  90.         <div id="postbody">
  91.             <h3>T&iacute;tulo</h3>
  92.             <input type="text" name="entradaTitulo" class="text" value="<?php echo $_SESSION['campos']['titulo'] ?>" />
  93.             <h3>Escribir Entrada</h3>
  94.             <textarea name="entradaTexto"><?php echo $_SESSION['campos']['texto'] ?></textarea>
  95.         </div>
  96.         <div id="postsubmit">
  97.             <h3>Idioma</h3>
  98.             <input type="radio" name="entradaIdioma" value="es" checked="checked" />Espa&ntilde;ol<br />
  99.             <input type="radio" name="entradaIdioma" value="en" />Ingl&eacute;s
  100.             <h3>Categor&iacute;as</h3>
  101.             <div class="scroll">
  102.                 <?php // enviar las categorias a la entrada
  103.                 $sqlQueryCat = mysql_query("SELECT * FROM categorias", $db_link)
  104.                                             or die(mysql_error());
  105.                 while ($row = mysql_fetch_array($sqlQueryCat)){
  106.                     echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' />$row[catTitulo] - $row[catIdioma]<br />";
  107.                 }
  108.                 if(isset($_SESSION['envio'])){
  109.                     echo "<hr />";
  110.                     $sqlQuerySesCat    = mysql_query("SELECT * FROM categorias", $db_link)
  111.                                                     or die(mysql_error());
  112.                     $rowSesCat    = mysql_fetch_array($sqlQuerySesCat);
  113.                     // sacamos las categorias
  114.                     if(in_array($rowSesCat['catID'], $_SESSION['sesCatID'])){
  115.                         echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' checked='checked' />$row[catTitulo] - $row[catIdioma]<br />";
  116.                     }
  117.                 }
  118.                 ?>
  119.             </div>
  120.             <h3>Estado de la publicaci&oacute;n</h3>
  121.             <p>
  122.             <input type="radio" name="entradaEstado" value="si" />Publicada<br />
  123.             <input type="radio" name="entradaEstado" value="no" checked="checked" />Pendiente<br />
  124.             </p>
  125.             <input type="text" name="envio" value="<?php echo $catID ?>" />
  126.             <input type="submit" name="form" value="Guardar" class="buttom" />
  127.             <input type="submit" name="form" value="Publicar" class="buttom" />
  128.         </div>
  129.     </form>
  130. </div>

A mi no me gusta pegar tanto codigo, pero bueno... aqui aun no hice lo que me dijiste en el otro hilo sobre eliminar # if(!empty($_POST['sql'])){ pero al fin te entendi, jejeje

Y bueno habri otro post para no satural el otro

Gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #5 (permalink)  
Antiguo 07/11/2008, 13:01
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: in_array(): Wrong datatype for second argument

Y qué te devuelve el var_dump($_SESSION['sesCatID']);? Porque en la línea 42 asignas a esa variable de sesión un array de un sólo elemento, osea, en el mejor de los casos, sólo tendrás un checkbox, si es que $rowSesCat['catID'] coincide con ése valor (Línea 114). No teestarás olvidando de colocar un else alternativo para ese if?

En resumen, qué es lo que deseas hacer entonces?

  #6 (permalink)  
Antiguo 10/11/2008, 09:13
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Re:Hola Okram... que tal de fin??? pues le puse el else como me has dicho y ahora si me pone una casilla pero solo una

El var_dump($_SESSION['sesCatID']) me muestra los ID de las categorias que envio: array(1) { [0]=> string(5) "1,2,3" }. pero por ejemplo, si en el segundo envio mando otra categoria, me mantiene en la session las primeras y luego en el tercero es que cambia a las otras y asi

Mi problema esta en el uso de in_array y en definir que parametro paso ahi (el pajar)

Bueno, sigo aqui intentando y si resuelvo esto pues posteo...

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 10/11/2008, 09:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: in_array(): Wrong datatype for second argument

Si puedes ver tu string no es un array, tienes que pasarlo a un array usando explode() para que sea un array verdadero y puedas usar in_array.

Saludos.
  #8 (permalink)  
Antiguo 10/11/2008, 10:12
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Oops...! es verdad, ahora me muestra array(1) { [0]=> string(5) "Array" , pero igual no me hace lo que quiero, solo muestra un checkbox debajo del <hr /> y sin valor ninguno, asi envie todas las categorias
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #9 (permalink)  
Antiguo 10/11/2008, 13:29
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Ya me sale sin errores, pero hace algo raro y es problema con las sessiones... pues al enviar por primera vez el formulario, me muestra checadas los checkbox del envio anterior, osea, los que estaban guardados en la session anterior, ya a partir de ahi si marcan las que son:
Código php:
Ver original
  1. <?php
  2. $_SESSION['id'] = $id; // $id es la variable de la linia 40 en el codigo mas arriba
  3.  
  4. // aqui lo que modifique
  5. if(isset($_SESSION['envio'])){
  6.     $sqlQuerySesCat    = mysql_query("SELECT entradaID, entradaCatID
  7.                                    FROM entradas
  8.                                    WHERE entradaID = '{$_SESSION['id']}'", $db_link)
  9.                                     or die(mysql_error());
  10.     $rowAsocCat    = mysql_fetch_assoc($sqlQuerySesCat);
  11.     $cat        = explode(",", $rowAsocCat['entradaCatID']);
  12.  
  13.     $sqlCategorias    = mysql_query("SELECT catID, catTitulo
  14.                                    FROM categorias", $db_link)
  15.                                     or die(mysql_error());
  16.     while($rowCategorias = mysql_fetch_array($sqlCategorias)){
  17.         if(in_array($rowCategorias['catID'], $cat)){
  18.             echo "<input type='checkbox' name='entradaCatID[]' value='$rowCategorias[catID]' checked='checked' />$rowCategorias[catTitulo]<br />";
  19.         }else{
  20.             echo "<input type='checkbox' name='entradaCatID[]' value='$rowCategorias[catID]' />$rowCategorias[catTitulo]<br />";
  21.         }
  22.     }
  23. }else{
  24.     $sqlQueryCat = mysql_query("SELECT * FROM categorias", $db_link)
  25.                                 or die(mysql_error());
  26.     while ($row = mysql_fetch_array($sqlQueryCat)){
  27.         echo "<input type='checkbox' name='entradaCatID[]' value='$row[catID]' />$row[catTitulo] - $row[catIdioma]<br />";
  28.     }
  29. }
  30. ?>
  31. ?>
por que hace eso???
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #10 (permalink)  
Antiguo 10/11/2008, 14:15
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 16 años, 1 mes
Puntos: 8
Respuesta: in_array(): Wrong datatype for second argument

Si no me equivoco, las variables de sesión seguirán "vivas" mientras mantengas abierto el navegador (dando por hecho que no caducan de otra forma, claro). No basta con actualizar o cargar de nuevo la página. Al menos así lo he comprobado en mis pruebas. Si cierras el navegador, se "mata" la sesión y al abrir de nuevo y cargar la página lo tendrás todo en sus valores por defecto.

Un saludo.
  #11 (permalink)  
Antiguo 10/11/2008, 14:24
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Cita:
Iniciado por Deschamps Ver Mensaje
Si no me equivoco, las variables de sesión seguirán "vivas" mientras mantengas abierto el navegador (dando por hecho que no caducan de otra forma, claro). No basta con actualizar o cargar de nuevo la página. Al menos así lo he comprobado en mis pruebas. Si cierras el navegador, se "mata" la sesión y al abrir de nuevo y cargar la página lo tendrás todo en sus valores por defecto.

Un saludo.
No no... tengo un botón que al ser enviado mata las sessiones... fijate en el codigo y de paso ya conoces a unset.
Código php:
Ver original
  1. /***********/
  2. if($form == 'Publicar'){
  3.     $envio    = "ok";
  4.     if(!empty($_POST['envio'])){
  5.         $sentencia = $update;
  6.     }else{
  7.         $sentencia = $insert;
  8.     }
  9.  
  10.     // destruimos todas las sessiones
  11.     unset($_SESSION['sentencia']);
  12.     unset($_SESSION['campos']);
  13.     unset($_SESSION['envio']);
  14.     unset($_SESSION['sesCatID']);
  15.     unset($_SESSION['id']);
  16. }

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #12 (permalink)  
Antiguo 10/11/2008, 14:46
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 16 años, 1 mes
Puntos: 8
Respuesta: in_array(): Wrong datatype for second argument

Decía...

Cita:
... dando por hecho que no caducan de otra forma, claro ...
Es que no revisé las 200 líneas de código. Para la próxima lo haré antes de comentar nada

Un saludo.
  #13 (permalink)  
Antiguo 10/11/2008, 14:50
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Cita:
Iniciado por Deschamps Ver Mensaje
Es que no revisé las 200 líneas de código. Para la próxima lo haré antes de comentar nada
Un saludo.
Me cito a mi mismo <- mi mismo
Cita:
Iniciado por rogertm Ver Mensaje
A mi no me gusta pegar tanto codigo, pero bueno...
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #14 (permalink)  
Antiguo 11/11/2008, 11:15
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: in_array(): Wrong datatype for second argument

Uufff...! ya lo tengo cuasiresuelto, y ya descubri cual es el error, lo que pasa es que al enviar por primera vez el formulario, hace el SELECT usando el ultimo ID guardado, y no el que acabo de hacer con el INSERT.

Donde me perdi fue en donde coloco la consulta INSERT para que me recoja, desde la primera vez, el ID que acabo de guardar.

Por su puesto que esto no ocurre al enviar el formulario por segunda vez o mas, pues si lo hace bien.

Alguien que me de un norte de como resolver esto??? o mejor lo dejo por unos dias y refresco la cabezota...

saludos y gracias de antemano
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
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 21:12.