Autor Tema: PHP explode y recorrer array para una consulta, solo asigna el último valor.  (Leído 7153 veces)

Joaquin59

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Mi problema es el siguiente, a ver si alguien me puede ayudar pues no doy con ello.

Desde una aplicación Android envío una variable del tipo Array. Esta la recibo como un String.

En concreto la variable contiene una serie de tipos de establecimientos, Restaurante, Bar, Bar-Restaurante, etc.

Esta es: $tiposfin=$_POST['subTiposFin'];

En Android tiene el formato: [Restaurante, Bar, Bar-Restaurante,…] y en el mismo formato de cadena la recibo en php.

Lo que hago, es convertirla en un array, primero eliminando los corchetes:

$reemplazar1=str_replace("[", "", $tiposfin);
$reemplazar2=str_replace("]", "", $reemplazar1);


Y después convertirla en un array:

$tipos=explode(',', $reemplazar2);

El problema surge a la hora de recorrer el array para la consulta, tanto con for, foreach o while.

La consulta que me interesa es:

for ($y=0; $y<count($tipos);  $y++) {
   $result = mysql_query("select id_cliente, nombre, tipo, precio, icono1, localidad FROM restauracion WHERE tipo = $tipos");
   }

Pero para saber que valores me está pasando, en la tabla en el campo ‘nombre’ utilizo:

for($i=0;$i<count($tipos);$i++) {
$sql = mysql_query("UPDATE restauracion SET nombre = '$tipos[$i]' WHERE tipo = 'Cómida para llevar'");
   }

Y entonces el problema es el siguiente, si el array tiene tres valores p.e. (Restaurante, Bar, Bar-Restaurante), sólo devuelve el último, en este caso Bar-Restaurante. No sé a qué se puede deber.
« Última modificación: 13 de Octubre 2015, 08:14 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Hola Joaquin59 pega el código php como se indica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Esta consulta parece que la tienes mal planteada:

Código: [Seleccionar]
for ($y=0; $y<count($tipos);  $y++) {
   $result = mysql_query("select id_cliente, nombre, tipo, precio, icono1, localidad FROM restauracion WHERE tipo = $tipos");
   }

En cada pasada del bucle se destruye el valor de $result, además $tipos no tiene indicado el índice que debe utilizarse.

En esta consulta:

Código: [Seleccionar]
for($i=0;$i<count($tipos);$i++) {
$sql = mysql_query("UPDATE restauracion SET nombre = '$tipos[$i]' WHERE tipo = 'Cómida para llevar'");
   }

En cada pasada del bucle se destruye el valor de $sql, quedando únicamente el valor correspondiente a la última pasada, donde $tipos[ i ] es el último elemento del array, es decir, Bar-Restaurante

Un pequeño código de ejemplo:

Código: [Seleccionar]
<?php 
echo 'Prueba <br/>';
$tipos[0] = 'Restaurante';
$tipos[1] = 'Bar';
$tipos[2] = 'Bar-Restaurante';
echo 
'Recorrido primer bucle<br/>';
for (
$y=0$y<count($tipos);  $y++) {
   echo 
$tipos.'<br/>';
   }
   echo 
'Recorrido segundo bucle<br/>';

for (
$y=0$y<count($tipos);  $y++) {
   echo 
$tipos[$y].'<br/>';
   }
?>

Te recomiendo seguir este curso http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193 donde se explican los conceptos relacionados con bucles, arrays, consultas, etc.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".