Foros del Web » Programando para Internet » PHP »

Error unir 2 Strings

Estas en el tema de Error unir 2 Strings en el foro de PHP en Foros del Web. Hola, tengo un pequeño problema, tengo una función que conecta con una base de datos MySQL y recupera los nombres de los articulos que hay ...
  #1 (permalink)  
Antiguo 08/05/2012, 06:16
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 11 años, 11 meses
Puntos: 0
Error unir 2 Strings

Hola, tengo un pequeño problema, tengo una función que conecta con una base de datos MySQL y recupera los nombres de los articulos que hay en ella, pues bien, quiero unir los nombres en un String para poder imprimirlo por pantalla tal que así:

Nombres: Articulo1 articulo2 articulo3 ...

Este es el código:
Código PHP:
        public function datos(){
        
$servidor="localhost";
        
$usuario="tienda";
        
$pass="tienda";
        
$basedatos="tienda";
        
$articulo="Nombres: ";
        
//$arrayid;
        
$link = @mysql_connect($servidor$usuario$pass);
        if (!
$link) {
            die (
"No se puede conectar");
        }
          
$db mysql_select_db($basedatos$link);
          if (!
$db) {
          die (
"No se puede conectar");
          }

        
$result mysql_query("SELECT * FROM Articulo");
        while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
$id=$row['Nombre'];
        
//$articulo=$articulo." ".$id;
        
$articulo=$articulo." $id";
                }    
        
//$articulo=$articulo." $id";
        
return $articulo;
        } 
Sin embargo cuando intento unir los string pasan 2 cosas:

1-Si lo hago justo antes del return, funciona y me devuelve solo el último nombre(lógico).
2-Si lo hago dentro del While NO FUNCIONA!!
  #2 (permalink)  
Antiguo 08/05/2012, 06:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Error unir 2 Strings

if(!is_null($articulo)) $articulo.=", ";
$articulo.=$row['Nombre'];

y así?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 08/05/2012, 06:46
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Error unir 2 Strings

pues ese código parece correcto. Puede ser que $row["nombre"] esté vacio? Si nó, creo que tienes el error en otra parte.

Salud!


mm! lo siento. Mientras escribia, respondió quim diciendo lo mismo.
  #4 (permalink)  
Antiguo 08/05/2012, 07:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Error unir 2 Strings

Antes de todo gracias por las respuestas. He probado:

$articulo.=$id;
y
$articulo.=$row['Nombre'];

No funciona ninguno.
La parte de inicializar la variable si no existe me la he comido ya que para asegurarme que existe la inicializo yo a mano al principio de la función:
$articulo="Nombres: ";


Como ya puse en el primer post, si uno las cadenas fuera del while si funciona,luego eso descarta fallo de la sintaxis, o como sugiere oscar, el row['Nombre'] NO esta vacio, por lo que tampoco es un problema de acceso a la bd.

El problema reside en que no puedo editar la variable articulo dentro del while, cosa que no entiendo.
  #5 (permalink)  
Antiguo 08/05/2012, 07:30
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Error unir 2 Strings

Puedes probar a ver que pasa con:
Código PHP:
       
$array
mysql_fetch_array($resultMYSQL_ASSOC);
echo 
"<pre>".print_r($array)."</pre>"
eso te enseña el array devuelto por la db.
En caso que esté lleno...
Código PHP:

$id
=0;
while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) { 
           
$id++;
           
$articulo=$articulo." $id"
        }     
        echo 
"id=$id --- articulo= $articulo"
y saldrás de dudas de la maldita variable.
Saludos
  #6 (permalink)  
Antiguo 08/05/2012, 09:11
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Error unir 2 Strings

Mira he hecho algo parecido:
Código PHP:
while ($row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
$id=$row['Nombre'];
        
$arrayid[count($arrayid)]="Articulo";  
                } 
        return 
$arrayid
Vale, entonces si hago print_r($array) obtengo:

Array ( [0] => Articulo [1] => Articulo [2] => Articulo [3] => Articulo [4] => Articulo [5] => Articulo [6] => Articulo [7] => Articulo [8] => Articulo [9] => Articulo [10] => Articulo [11] => Articulo [12] => Articulo [13] => Articulo [14] => Articulo [15] => Articulo [16] => Articulo [17] => Articulo [18] => Articulo [19] => Articulo [20] => Articulo )

O lo que es lo mismo, por cada uno de los 20 articulo que encuentra en el while añade la palabra "articulo" al array de nombres de articulos, hasta aqui todo bien, pero si cambio para que en vez de añadir la palabra "articulo", añada el nombre de cada articulo ya que en definitiva es lo que busco:

Código PHP:
while ($row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
$id=$row['Nombre'];
        
$arrayid[count($arrayid)]=$id;
        
//$arrayid[count($arrayid)]=$row['Nombre'];
  
                

        return 
$arrayid
NO FUNCIONA!!! nose si llamar a Cuarto Milenio porque esto parece algo paranormal...
  #7 (permalink)  
Antiguo 08/05/2012, 10:23
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Error unir 2 Strings

Bueno pues despues de romperme la cabeza, por lo menos acoto un poco el problema.
En lugar de hacer

$row['Nombre'];

Lo he cambiado por $row['Precio'];

Y FUNCIONA!!

Teniendo en cuenta que Precio es decimal en la base de datos y Nombre es varchar, deduzco que es un problema de lo que devuelve la base de datos, algun tipo de problema para guardar los varchar en un array, o problema con los espacios de los nombres. A ver si ahora que esta claro donde esta el fallo podeis echarme una mano, porque en el tema de almacenar strings, arrays y ese tema estoy muy verde. Gracias.

Así queda el código después de todos los cambios:

Código PHP:
public function datos(){
        
$servidor="localhost";
        
$usuario="tienda";
        
$pass="tienda";
        
$basedatos="tienda";

        
$link = @mysql_connect($servidor$usuario$pass);
        if (!
$link) {
            die (
"No se puede conectar");
        }
          
$db mysql_select_db($basedatos$link);
          if (!
$db) {
          die (
"No se puede conectar");
          }

        
$result mysql_query("SELECT * FROM Articulo");
        while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
$nombre=$row['Precio'];
        
$id++;

        
$arrayid[$id]=$nombre;
                }
        return 
$arrayid;
        } 
  #8 (permalink)  
Antiguo 08/05/2012, 12:59
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Error unir 2 Strings

Bueeeeeno conseguido.

Despues de probar todo lo posible he decidido añadir a mano los nombres en un array, y me he dado cuenta de que funcionaba hasta que añado un nombre con acento y PUM!

Asique ahi estaba el problema despues de todo, los acentos, los malditos acentos, asique he probado a setear la base de datos en utf8 antes de hacer la consulta y FUNCIONA!!

Os dejo el código por si quereis verlo:

Código PHP:
        public function datos(){
        
$servidor="localhost";
        
$usuario="tienda";
        
$pass="tienda";
        
$basedatos="tienda";
        
$arrayid=array();
        
$link = @mysql_connect($servidor$usuario$pass);
        if (!
$link) {
            die (
"No se puede conectar");
        }
          
$db mysql_select_db($basedatos$link);
          if (!
$db) {
          die (
"No se puede conectar");
          }
        
mysql_set_charset('utf8');
        
$result mysql_query("SELECT * FROM Articulo");
        while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) {
        
$id++;        
        
$nombre=$row['Nombre'];
        
        
$arrayid[$id]=$nombre;
                }
        return 
$arrayid;

        } 

Etiquetas: mysql, strings, usuarios
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 05:29.