Foros del Web » Programando para Internet » PHP »

No encuentro el ¡HORROR!

Estas en el tema de No encuentro el ¡HORROR! en el foro de PHP en Foros del Web. Hola, yo de nuevo dando lata, con este archivo pretendo hacer una actualizacion en algunas tablas que estan interrelacionadas, he probado hacer el mismo procedimiento ...
  #1 (permalink)  
Antiguo 14/06/2008, 17:17
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
No encuentro el ¡HORROR!

Hola, yo de nuevo dando lata, con este archivo pretendo hacer una actualizacion en algunas tablas que estan interrelacionadas, he probado hacer el mismo procedimiento en consola con mysql y las mismas instrucciones que tengo en los mysql_query funcionan, obviamente no incluyen variables, son los datos especificos. No entiendo cual es la razon que no funcione al hacerlo desde este archivo PHP. Aca les dejo el codigo, de antemano GRACIAS

Código PHP:
<?php
   
include 'config.php';
   include 
'opendb.php';
   
$enombre=$_POST['enombre'];
    
$div=$_POST['div'];
    
$liga=$_POST['liga'];
    
$rank=$_POST['rank'];
   
$torneo=$_POST['idtorneo'];
   
$idparticipa=$_POST['numero'];
   
$idequipo=$_POST['idequipo'];
   echo 
$enombre.$div.$liga.$rank.$torneo.$idparticipa.$idequipo//verificando que los datos llegan bien desde el formulario

   //CAMBIO numero 1 en BD
   
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   if(
$condicion mysql_fetch_array($vnombre))
       {echo 
"ya estaba en la lista de nombres";}
   else
       {
           
mysql_query("INSERT INTO nombreequipo (nombre) VALUES ('$enombre')");
       }
   
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   while (
$row mysql_fetch_row($vnombre))
        {
            
$idenombre=$row[0];
        }
   
$cambio1 mysql_query("UPDATE participacion SET idnombreequipo='$idenombre' WHERE participacion.idparticipacion='$idparticipa' AND participacion.idequipo='$idequipo' LIMIT 1") or die("Error en query:" .mysql_error());
 
/*Esta es una de las partes donde creo que tengo un error en la manera de ponerlo en PHP
Cuando lo pongo en consola de mysql lo hago de la siguiente manera (ejemplo)
UPDATE participacion SET idnombreequipo=6 WHERE participacion.idparticipacion=7 AND participacion.idequipo=7 LIMIT 1;*/
   
    //CAMBIO numero 2 en BD
   
$vdivliga mysql_query("SELECT * FROM divliga WHERE division='$div' and liga='$liga'");
   if(
$condicion mysql_fetch_array($vdivliga))
       {echo
"ya estaba en division";}
   else
       {
           
mysql_query("INSERT INTO divliga (division,liga) VALUES ('$div','$liga')");
       }
   
$vdivliga mysql_query("SELECT * FROM divliga WHERE division='$div' and liga='$liga'");
      
$row mysql_fetch_row($vdivliga);

      while (
$row mysql_fetch_row($vdivliga))
      {
    
$iddivliga=$row[0];
    }
   
$cambio2 mysql_query("UPDATE participacion SET participacion.iddivliga='$iddivliga', participacion.puntosmz='$rank' WHERE participacion.idparticipacion='$idparticipa' AND participacion.idequipo='$idequipo' LIMIT 1") or die("Error en query:" .mysql_error()); //Este es la segunda donde sospecho que pudiera tener el error
   //header("Location: buser.php"); Esta linea ira descomentada cuando todo lo demas me funcione
   
include 'closedb.php';
?>
  #2 (permalink)  
Antiguo 14/06/2008, 17:46
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

intentalo asi quitando este while,a ver que pasa:

Código PHP:
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'"); 
   
$row mysql_fetch_row($vnombre)
         
   
$idenombre=$row[0]; 
        
   
$cambio1 mysql_query("UPDATE participacion SET idnombreequipo= 
  #3 (permalink)  
Antiguo 14/06/2008, 17:48
 
Fecha de Ingreso: junio-2007
Mensajes: 42
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

y en que linea ocurre el error ?

en las funciones de mysql (mysql_query) no veo que le pases la conexion de la base de datos
  #4 (permalink)  
Antiguo 14/06/2008, 18:27
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Cita:
Iniciado por Davisoftx Ver Mensaje
y en que linea ocurre el error ?

en las funciones de mysql (mysql_query) no veo que le pases la conexion de la base de datos
La conexion y seleccion de la BD las realizo con las 2 primeras linea del codigo que coloque. No es problema de conexion ni uso de la base de datos porque utilizo el mismo metodo con otros archivos. No me sale error en el codigo es por lo que creo que es en las lineas donde actualizo las tablas, es decir, en $cambio1 y $cambio2.

Cita:
Iniciado por jaronu Ver Mensaje
intentalo asi quitando este while,a ver que pasa:

Código PHP:
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'"); 
   
$row mysql_fetch_row($vnombre)
         
   
$idenombre=$row[0]; 
        
   
$cambio1 mysql_query("UPDATE participacion SET idnombreequipo= 
Al hacer ese cambio me marca error en la linea de donde se encuentra
Código PHP:
$idenombre=$row1[0]; 
El error que me muestra es el siguiente
Código:
Parse error: syntax error, unexpected T_VARIABLE in /var/www/bd/sedituser.php on line 22
  #5 (permalink)  
Antiguo 14/06/2008, 18:32
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

prueba asi

Cita:

$vnombre = mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
$row = mysql_fetch_array($vnombre)

$idenombre=$row['el_nombre_del_campo_BD'];

$cambio1 = mysql_query("UPDATE participacion SET idnombreequipo=
  #6 (permalink)  
Antiguo 14/06/2008, 18:40
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Lo intente de dos formas y no funciono

Código PHP:
$idenombre=$row1['nombreequipo.idnombreequipo'];

$idenombre=$row1['idnombreequipo']; 
  #7 (permalink)  
Antiguo 14/06/2008, 18:53
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

ahora porque

$row1??

y no $row??

es que no es $idenombre=$row1[0];

es

$idenombre=$row[0];
  #8 (permalink)  
Antiguo 14/06/2008, 18:55
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

pero no con mysql_fetch_row

sino con

mysql_fetch_array
  #9 (permalink)  
Antiguo 14/06/2008, 18:57
 
Fecha de Ingreso: junio-2007
Mensajes: 42
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

veo que estas usando 2 veces esta variable $vnombre , trata de usar otra variable para la segunda o libera la variable con mysql_free_result para volver a usarla.

antes de enviar la consulta a mysql, asignale a una variable la consulta que envias e imprela con un echo, para verificar que la consulta sql este correcto
  #10 (permalink)  
Antiguo 14/06/2008, 19:11
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Las variables $vnombre y $vdivliga las repito porque siempre que verifico que una consulta no este vacia con el siguiente metodo

Código PHP:
if($condicion mysql_fetch_array($vnombre)) 
Al utilizar nuevamente la variable de consulta en este ejemplo $vnombre queda inservible porque de los resultados siempre elimina una fila completa del resultado de la consulta, es decir, si los resultados de la consulta $vnombre originalmente son 16 despues de verificar que sea no vacia y utilizarla posteriormente solo mostrara 15 resultados.

Hasta ahora todos los archivos de php que he realizado contienen esa repeticion de variable y no he tenido problema. Por el contrario si elimino la reiteracion de la variable no tendre los datos completos por la eliminacion de fila que dije antes. Si puedes decirme porque se elimina la fila al ver que la consulta sea no vacia te lo agradesco.

Volviendo a lo importante que es la duda de este hilo del foro voy a intentar tu solucion a ver si es el problema pero lo dudo.
  #11 (permalink)  
Antiguo 14/06/2008, 19:16
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Cita:
Iniciado por jaronu Ver Mensaje
ahora porque

$row1??

y no $row??

es que no es $idenombre=$row1[0];

es

$idenombre=$row[0];
Hice el cambio para diferenciarlo con el de $vnombre y $vdivliga para que cada row sea distinto. Y si le cambie por mysql_fetch_array
  #12 (permalink)  
Antiguo 14/06/2008, 19:21
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

y como te quedo el codigo?
  #13 (permalink)  
Antiguo 14/06/2008, 19:24
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Aca dejo el codigo que obtuve con las sugerencias que me han dado y aun sigue sin funcionar y marcando error en la linea 22 y supongo que tambien marcara error en la linea 34 porque es similar
Código PHP:
<?php
   
include 'config.php';
   include 
'opendb.php';
   
$enombre=$_POST['enombre'];
    
$div=$_POST['div'];
    
$liga=$_POST['liga'];
    
$rank=$_POST['rank'];
   
$torneo=$_POST['idtorneo'];
   
$idparticipa=$_POST['numero'];
   
$idequipo=$_POST['idequipo'];
   echo 
$enombre.$div.$liga.$rank.$torneo.$idparticipa.$idequipo//verificando que los datos llegan bien desde el formulario
   //CAMBIO numero 1 en BD
   
$vnombre1 mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   if(
$condicion mysql_fetch_array($vnombre1))
       {echo 
"ya estaba en la lista de nombres";}
   else
       {
           
mysql_query("INSERT INTO nombreequipo (nombre) VALUES ('$enombre')");
       }
   
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   
$row1 mysql_fetch_array($vnombre)
    
$idenombre=$row1['idnombreequipo'];    
   
$cambio1 mysql_query("UPDATE participacion SET idnombreequipo='$idenombre' WHERE participacion.idparticipacion='$idparticipa' AND participacion.idequipo='$idequipo' LIMIT 1") or die("Error en query:" .mysql_error());
   
    
//CAMBIO numero 2 en BD
   
$vdivliga1 mysql_query("SELECT * FROM divliga WHERE division='$div' and liga='$liga'");
   if(
$condicion mysql_fetch_array($vdivliga1))
       {echo
"ya estaba en division";}
   else
       {
           
mysql_query("INSERT INTO divliga (division,liga) VALUES ('$div','$liga')");
       }
   
$vdivliga mysql_query("SELECT * FROM divliga WHERE division='$div' and liga='$liga'");
    
$row2 mysql_fetch_array($vdivliga)
    
$iddivliga=$row2['iddivliga'];
   
$cambio2 mysql_query("UPDATE participacion SET participacion.iddivliga='$iddivliga', participacion.puntosmz='$rank' WHERE participacion.idparticipacion='$idparticipa' AND participacion.idequipo='$idequipo' LIMIT 1") or die("Error en query:" .mysql_error());
   
//header("Location: buser.php");
   
include 'closedb.php';
?>
  #14 (permalink)  
Antiguo 14/06/2008, 19:28
 
Fecha de Ingreso: junio-2007
Mensajes: 42
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

tienes que usar otra variable o liberarla con mysql_free_result , y eso no afectara en nada tu logica, solo es evitar usar 2 veces la misma variable

solo agregale ese mysql_free_result , y prueba ok

Código PHP:
   //CAMBIO numero 1 en BD
   
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   if(
$condicion mysql_fetch_array($vnombre))
       {echo 
"ya estaba en la lista de nombres";
   } else   {
           
mysql_query("INSERT INTO nombreequipo (nombre) VALUES ('$enombre')");
   }


    
mysql_free_result($vnombre);


   
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   while (
$row mysql_fetch_row($vnombre))
       {
              
$idenombre=$row[0];
        } 
  #15 (permalink)  
Antiguo 14/06/2008, 19:59
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

pero $vnombre lo utiliza en un query, que no va ha usar despues, a si que da lo mismo que cambie el valor de esa variable,

PD

mysql_free_result se utiliza para liberar memoria del script, por si procesa mucha informacion el codigo, vaya liberando memoria, para optimizar el script, pero no vacia el resultado del query

manual de php mysql_free_result
  #16 (permalink)  
Antiguo 14/06/2008, 20:08
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

y los puntos y comas

Cita:
$row1 = mysql_fetch_array($vnombre)


no tendras deshabilitados los mensajes de error de php

po esto al principio del script

error_reporting (E_ALL);
  #17 (permalink)  
Antiguo 15/06/2008, 02:30
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Aparentemente todo el codigo que ustedes me han ayudado a refinar, cosa que AGRADESCO MUCHISIMO, funciona bien con excepcion de los UPDATE. He agregado unos "echo" para ver que devuelve $cambio1 y $cambio2, ambos imprimen 1. Todo lo demas aparentemente trabaja a la perfeccion, aca dejo el codigo actualizado, corregido y aumentado.

Código PHP:
<?php
   
include 'config.php';
   include 
'opendb.php';
   
error_reporting (E_ALL);
   
$enombre=$_POST['enombre'];
    
$div=$_POST['div'];
    
$liga=$_POST['liga'];
    
$rank=$_POST['rank'];
   
$torneo=$_POST['idtorneo'];
   
$idparticipa=$_POST['numero'];
   
$idequipo=$_POST['idequipo'];
   echo 
$enombre.$div.$liga.$rank.$torneo.$idparticipa.$idequipo//verificando que los datos llegan bien desde el formulario
   //CAMBIO numero 1 en BD
   
$vnombre1 mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   if(
$condicion mysql_fetch_array($vnombre1))
       {echo 
"ya estaba en la lista de nombres";}
   else
       {
           
mysql_query("INSERT INTO nombreequipo (nombre) VALUES ('$enombre')");
       }
   
$vnombre mysql_query("SELECT * FROM nombreequipo WHERE nombre='$enombre'");
   
$row1 mysql_fetch_array($vnombre);
    
$idenombre=$row1['idnombreequipo'];
    echo 
"<br> $idenombre \n";    
   
$cambio1 mysql_query("UPDATE participacion SET participacion.idnombreequipo='$idenombre' WHERE participacion.idcparticipacion='$idparticipa' AND participacion.idequipo='$idequipo' LIMIT 1") or die("Error en query:" .mysql_error());
   echo 
"<p>$cambio1</p> \n";//revisando que devuelve el cambio1
   
    //CAMBIO numero 2 en BD
   
$vdivliga1 mysql_query("SELECT * FROM divliga WHERE division='$div' and liga='$liga'");
   if(
$condicion mysql_fetch_array($vdivliga1))
       {echo
"ya estaba en division";}
   else
       {
           
mysql_query("INSERT INTO divliga (division,liga) VALUES ('$div','$liga')");
       }
   
$vdivliga mysql_query("SELECT * FROM divliga WHERE division='$div' and liga='$liga'");
    
$row2 mysql_fetch_array($vdivliga);
    
$iddivliga=$row2['iddivliga'];
    echo 
"<br> $iddivliga \n";
   
$cambio2 mysql_query("UPDATE participacion SET participacion.iddivliga='$iddivliga', participacion.puntosmz='$rank' WHERE participacion.participacion='$idparticipa' AND participacion.idequipo='$idequipo' LIMIT 1") or die("Error en query:" .mysql_error());
   echo 
"<p>$cambio2</p> \n"//revisando que devuelve el cambio2
   //header("Location: buser.php");
   
include 'closedb.php';
?>
  #18 (permalink)  
Antiguo 15/06/2008, 03:54
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

estas son las variables que has de imprimir, las que usas para el update, a ver que imprimen

$idenombre;

$iddivliga;

Y tambien estos IF´s que haces, no les das condiciones, siempre se cumplen, supongo

Cita:
if($condicion = mysql_fetch_array($vdivliga1))


{echo"ya estaba en division";}
else
{
mysql_query("INSERT INTO divliga (division,liga) VALUES ('$div','$liga')");
}
aqui dices que SI a variable $condicion le asignamos el valor de mysql_fetch_array($vdivliga1)
cuando el codigo llega a este punto ?que hace? inserta en la BD o te aparece el mensaje
"Ya estaba en division"

con un = asignas valor

con dos == comparas si son iguales

con tres === si son identicos
  #19 (permalink)  
Antiguo 15/06/2008, 04:47
 
Fecha de Ingreso: junio-2007
Mensajes: 42
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

todavia siguen sin solucion ?

mejor seria que nos enviaras, tus archivos php, las estructuras de mysql , solo lo esencial para instalar y verificar que esta mal
  #20 (permalink)  
Antiguo 15/06/2008, 09:49
 
Fecha de Ingreso: junio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: No encuentro el ¡HORROR!

Cita:
Iniciado por jaronu Ver Mensaje
estas son las variables que has de imprimir, las que usas para el update, a ver que imprimen

$idenombre;

$iddivliga;

Y tambien estos IF´s que haces, no les das condiciones, siempre se cumplen, supongo



aqui dices que SI a variable $condicion le asignamos el valor de mysql_fetch_array($vdivliga1)
cuando el codigo llega a este punto ?que hace? inserta en la BD o te aparece el mensaje
"Ya estaba en division"

con un = asignas valor

con dos == comparas si son iguales

con tres === si son identicos
Que tal jaronu!

Si te fijas he puesto las impresiones que me sugieres y se encuentra justo arriba de $cambio1 y $cambio2, yo tambien dudaba que llegaran correctamente los datos hasta ese punto, pero he visto que llegan mas que bien los valores de $idenombre y $divliga.

Con respecto al if, en su condicion solo me fijo que las consultas sean no vacias, me informe y el mysql_fetch_array devuelve FALSE si no contiene registros, entonces si contiene registros imprime que ya existen en caso contrario los agrega a la tabla correspondiente y continua. Posiblemente me sobre codigo y deberia ponerlo mas ELEGANTEMENTE de la siguientemanera pero de las 2 formas funciona.

if(mysql_fetch_array($vdivliga1))

jaronu, te noto mas desesperado que yo con este codigo jajaja (haciendo humor de mi desgracia para llevar el rato mejor) y eso que yo ya me doy de topes contra la pared revisandolo y volviendolo a revisar.
  #21 (permalink)  
Antiguo 15/06/2008, 11:19
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: No encuentro el ¡HORROR!

para eso intentalo mejor con isset

Un saludo
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 17:52.