Foros del Web » Programando para Internet » PHP »

Vector con php

Estas en el tema de Vector con php en el foro de PHP en Foros del Web. Hola gente, tengo un problemilla con un vector. Éste es el código: Código PHP: $conexion  =  bd ();           /*Aquí tenemos todos los jugadores que son porteros y que no han sido ya dados a otros usuarios de la liga*/           $sql  =  ...
  #1 (permalink)  
Antiguo 10/02/2011, 14:31
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Vector con php

Hola gente, tengo un problemilla con un vector.

Éste es el código:

Código PHP:
$conexion bd();
    
    
/*Aquí tenemos todos los jugadores que son porteros y que no han sido ya dados a otros usuarios de la liga*/
    
    
$sql "SELECT id
            FROM jugadores
            WHERE demarcacion = 'Portero'"

            
    
$res mysql_query($sql);

    
/*Creamos una variable chivato para ver si es la primera vez que entramos en el while, en cuyo caso, lo que haremos será inicializar el array*/
    
    
$chivato 0;
    
    
/*Iniciamos un while para recorrer todos los porteros que aún están disponibles para ser elegidos*/
    
    
while( $row mysql_fetch_array$resMYSQL_ASSOC ) )
    {
    
        
/*Es la primera vez que entramos, por tanto creamos el array y ponemos chivato a 1 para evitar volver a crear el array otra vez*/
        
        
if($chivato==0)
        {
        
            
/*Inicializamos el vector*/
            
            
$array = array(=> $row['id']);
            
            
/*Ponemos chivato a 1*/
            
            
$chivato=1;
        
        
/*No es la primera vez que entramos aquí, por tanto, el array ya está creado, así que solo tenemos que seguir metiendo valores en él*/
            
        
}else
        {
        
            
$array[]=$row['id'];
            
        }
            
        
    }
    
    
/*Aquí vamos a elegir 2 elementos de manera aleatoria de entre todos los porteros disponibles para elegir*/
    
    
foreach ($array as $valor) {
   echo 
"Valor: $valor<br>";

    
shuffle($array); // desordena aleatoriamente el array
    
$array array_slice($array,0,2); // coge los 6 primeros elementos desordenados
    
    
foreach ($array as $valor) {
   echo 
"NuevoArray: $valor<br>";

    
    
/*Ahora, insertamos en la base de datos los porteros elegidos al azar*/
    
    
for ($i 0$i 2$i++) 
    {
    
        
$query "INSERT INTO plantillas (id, nombreEquipo, usuario, jugador, liga, tipo)
                  VALUES ('0', '"
.$nombreEquipo."', '".$user."', '".$array[$i]."', '".$nombreLiga."', 'a')";
        
        
$result mysql_query$query );
        
    } 
Con éste código, sólo me inserta el primer elemento en la base de datos, pero ya está. No arroja ningún error ni nada. Los foreach imprimen los valores correctos, tanto el inicial como el aleatorio, sin embargo, sólo me hace la primera inserción (el valor del array coincide con el que hay en la primera posición). Además, la ejecución del script para ahí, ya que no ejecuta el resto de código que viene después (que básicamente es el mismo script 4 veces pero con distintos elementos, obviamente).

Alguna idea??

Gracias!!
  #2 (permalink)  
Antiguo 10/02/2011, 14:41
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Vector con php

Es porque $chivato siempre es cero!!! Tenés que incrementarlo dentro del while...
  #3 (permalink)  
Antiguo 10/02/2011, 15:04
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Vector con php

Cita:
Iniciado por walterdevel Ver Mensaje
Es porque $chivato siempre es cero!!! Tenés que incrementarlo dentro del while...
Hola walterdevel, gracias por tu respuesta.

Creo que no he entendido muy bien. Chivato es 0 la primera vez que se ejecuta el script, para crear el array. Una vez se crea, se pone a 1. A partir de ahí, ya no entra nunca más en el if, sino salta el else.

Si chivato fuera siempre 0 el array sólo tendría un elemento, pero cuando lo imprimo con el foreach, me imprime todo los elementos tal y como debería ser.

Te pido disculpas si no te he entendido bien.

Gracias por tu aportación.

Un saludo.
  #4 (permalink)  
Antiguo 10/02/2011, 15:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Vector con php

lo que yo no entiendo, es.. ¿porque el uso de dicha condición interna?

ya que la veo completamente inútil, absurda y sin fundamentos lógicos...

¿cual es el argumento de emplear dicha lógica?

me imagino que esto sería lo mismo, o hasta mejor!!
Código PHP:
    $array = array();

    while( 
$row mysql_fetch_array$resMYSQL_ASSOC ) )
    {
            
$array[]=$row['id'];
    } 
osea, si, crear el array de forma inteligente suena bien... ¿pero porque asignarlo al índice 1?
Código PHP:
// MAL
$array = array(=> $row['id']); 

// BIEN
$array = array($row['id']); 
y de ahí en adelante ya tienes todo en un vector bien organizado...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 10/02/2011, 15:16
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Vector con php

Yo leí mal tu problema XD

Pon al principio de tu código:

Código PHP:
Ver original 

hay variables que no se sabe de donde salen, tal vez tu si, pero no se ve la refencia ($nombreEquipo, $user, etc ).
  #6 (permalink)  
Antiguo 10/02/2011, 15:30
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Vector con php

Cita:
Iniciado por pateketrueke Ver Mensaje
lo que yo no entiendo, es.. ¿porque el uso de dicha condición interna?

ya que la veo completamente inútil, absurda y sin fundamentos lógicos...

¿cual es el argumento de emplear dicha lógica?

me imagino que esto sería lo mismo, o hasta mejor!!
Código PHP:
    $array = array();

    while( 
$row mysql_fetch_array$resMYSQL_ASSOC ) )
    {
            
$array[]=$row['id'];
    } 
osea, si, crear el array de forma inteligente suena bien... ¿pero porque asignarlo al índice 1?
Código PHP:
// MAL
$array = array(=> $row['id']); 

// BIEN
$array = array($row['id']); 
y de ahí en adelante ya tienes todo en un vector bien organizado...
Hola paketetrueke, te agradezco tu ayuda.

Bueno, no he practicado mucho los arrays, así que, cuando cree el código no me pareció inútil, absurdo y sin fundamentos lógicos el usar un chivato.

En cualquier caso, he probado el código que me has dejado y, tienes razón, hace exáctamente lo mismo, pero no soluciona mi problema. Me sigue haciendo una sóla inserción en lugar de 2.

Lo de asignarlo al índice 1 es porque copié el código de un compi (no sé si de aquí o de cualquier otra página) pues como bien he dicho no tengo mucha experiencia con arrays (por desgracia).

Muchas gracias por tu ayuda....se te ocurre qué puede estar pasando??

Te dejo lo que tengo ahora mismo:

Código PHP:
$conexion bd();
    
    
/*Aquí tenemos todos los jugadores que son porteros y que no han sido ya dados a otros usuarios de la liga*/
    
    
$sql "SELECT id
            FROM jugadores
            WHERE demarcacion = 'Portero'"

            
    
$res mysql_query($sql);

    
/*Creamos una variable chivato para ver si es la primera vez que entramos en el while, en cuyo caso, lo que haremos será inicializar el array*/
    
    
$array = array();
        
    
/*Iniciamos un while para recorrer todos los porteros que aún están disponibles para ser elegidos*/
    
    
while( $row mysql_fetch_array$resMYSQL_ASSOC ) )
    {
    
        
$array[]=$row['id'];
        
    }
    
    
/*Aquí vamos a elegir 2 elementos de manera aleatoria de entre todos los porteros disponibles para elegir*/
    
    
foreach ($array as $valor) {
   echo 
"Valor: $valor<br>";

    
shuffle($array); // desordena aleatoriamente el array
    
$array array_slice($array,0,2); // coge los 6 primeros elementos desordenados
    
    
foreach ($array as $valor) {
   echo 
"NuevoArray: $valor<br>";

    
    
/*Ahora, insertamos en la base de datos los porteros elegidos al azar*/
    
    
for ($i 0$i 2$i++) 
    {
    
        
$query "INSERT INTO plantillas (id, nombreEquipo, usuario, jugador, liga, tipo)
                  VALUES ('0', '"
.$nombreEquipo."', '".$user."', '".$array[$i]."', '".$nombreLiga."', 'a')";
        
        
$result mysql_query$query );
        
    } 
Gracias!!
  #7 (permalink)  
Antiguo 10/02/2011, 15:33
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Vector con php

Cita:
Iniciado por walterdevel Ver Mensaje
Yo leí mal tu problema XD

Pon al principio de tu código:

Código PHP:
Ver original 

hay variables que no se sabe de donde salen, tal vez tu si, pero no se ve la refencia ($nombreEquipo, $user, etc ).

Todas esas variables son los parámetros de la función. De todos modos, eso está bien, porque la inserción me la hace correctamente, sólo que en lugar de hacer 2, hace sólo 1 (las variables se repiten, pues lo único que cambia en cada fila es el valor de los elementos del vector).

Puse la línea que de dejaste al principio de la función y no ocurre nada, qué debería pasar??

Mil gracias por tu tiempo.

Un saludo!
  #8 (permalink)  
Antiguo 10/02/2011, 15:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Vector con php

a ver, entonces intenta esto:

en lugar de ejecutar la consulta, imprimela... y solo así compruebas lo que sucede... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 10/02/2011, 15:40
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Vector con php

Es para mostrar los errores/warnings/notices que puedas tener:

Probá cambiando esto:

Código PHP:
Ver original
  1. $result = mysql_query( $query );

por esto:

Código PHP:
Ver original
  1. $result = mysql_query( $query ) or die(mysql_error());

Es raro que insertes siempre con id cero, no se como está definida tu db, pero supongo que ese campo es un primary key.
  #10 (permalink)  
Antiguo 10/02/2011, 15:51
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Vector con php

Cita:
Iniciado por walterdevel Ver Mensaje
Es para mostrar los errores/warnings/notices que puedas tener:

Probá cambiando esto:

Código PHP:
Ver original
  1. $result = mysql_query( $query );

por esto:

Código PHP:
Ver original
  1. $result = mysql_query( $query ) or die(mysql_error());

Es raro que insertes siempre con id cero, no se como está definida tu db, pero supongo que ese campo es un primary key.
Hola de nuevo,

Gracias por tu código, ahora me imprime ésto:

Duplicate entry '127' for key 'PRIMARY'

127 es el id de la fila que se corresponde con la primera inserción :S...qué puedo hacer para solucionarlo??

EDITO: El campo id es autoincrementable y primary key sí. Siempre lo he hecho con 0...no es correcto?? :S
  #11 (permalink)  
Antiguo 10/02/2011, 15:55
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Vector con php

Cambia esto:

Código PHP:
Ver original
  1. $query = "INSERT INTO plantillas (id, nombreEquipo, usuario, jugador, liga, tipo)
  2.                  VALUES ('0', '".$nombreEquipo."', '".$user."', '".$array[$i]."', '".$nombreLiga."', 'a')";

por esto:

Código PHP:
Ver original
  1. $query = "INSERT INTO plantillas (nombreEquipo, usuario, jugador, liga, tipo)
  2.                  VALUES ('".$nombreEquipo."', '".$user."', '".$array[$i]."', '".$nombreLiga."', 'a')";

PD: tu campo id, tiene que se auto incremental
  #12 (permalink)  
Antiguo 10/02/2011, 15:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Vector con php

Cita:
Iniciado por walterdevel Ver Mensaje
Cambia esto:

Código PHP:
Ver original
  1. $query = "INSERT INTO plantillas (id, nombreEquipo, usuario, jugador, liga, tipo)
  2.                  VALUES ('0', '".$nombreEquipo."', '".$user."', '".$array[$i]."', '".$nombreLiga."', 'a')";

por esto:

Código PHP:
Ver original
  1. $query = "INSERT INTO plantillas (nombreEquipo, usuario, jugador, liga, tipo)
  2.                  VALUES ('".$nombreEquipo."', '".$user."', '".$array[$i]."', '".$nombreLiga."', 'a')";

PD: tu campo id, tiene que se auto incremental
Me salta el mismo error.

Lo curioso es que siempre es 127 el valor de id :S. Cuando debería ir incrementándose :S. Qué raro...no se te ocurre por qué puede estar pasando???

En serio, muchas gracias por tu tiempo y esfuerzo.
  #13 (permalink)  
Antiguo 10/02/2011, 16:03
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Vector con php

Bueno, acabo de solucionarlo, pero de una manera muuuy rara.

En la tabla plantillas, he eliminado el campo ID y lo he vuelto a crear exactamente igual al que tenía. Funciona a la perfección...

En fin, ver para creer. Si alguien sabe por qué puede ser esto, le agradecería que me sacara de mi asombro.

Muchísimas gracias walterdevel y pateketrueke por vuestra ayuda.

Un saludo!

Etiquetas: vectores
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 18:44.