Foros del Web » Programando para Internet » PHP »

Error en un script

Estas en el tema de Error en un script en el foro de PHP en Foros del Web. Hola, ya estoy aquí otra vez en busca de ayuda ahora es con un script de php que sirve para meter datos en mysql, en ...
  #1 (permalink)  
Antiguo 05/02/2003, 19:13
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
Pregunta Error en un script

Hola, ya estoy aquí otra vez en busca de ayuda ahora es con un script de php que sirve para meter datos en mysql, en mi servidor de casa funciona (php 4.3), pero online no, espero que me digáis que es lo q está mal.


Código PHP:
<?php
// Introducir Datos en la base
switch ($datos['apartado'])
{
     case 
piniculas:
         
$campo="(fecha_intro,
              titulo,
              titoriginal,
              ano,
              nacionalidad,
              director,
              reparto,
              genero,
              sinopsis,
              coment,
              duracion,
              cds,
              codec_video,
              codec_audio,
              audio1,
              audio2,
              calidad_video,
              calidad_audio,
              calif,
              poseedor)"
;
            
         
$valores="($fecha_intro,
              '{$datos['titulo']}',
              '{$datos['titoriginal']}',
              '{$datos['ano']}',
              '{$datos['nacionalidad']}',
              '{$datos['director']}',
              '{$datos['reparto']}',
              '{$datos['genero']}',
              '{$datos['sinopsis']}',
              '{$datos['coment']}',
              '{$datos['duracion']}',
              '{$datos['cds']}',
              '{$datos['codec_video']}',
              '{$datos['codec_audio']}',
              '{$datos['audio1']}',
              '{$datos['audio2']}',
              '{$datos['calidad_video']}',
              '{$datos['calidad_audio']}',
              '{$datos['calif']}',
              '$nombre')"
;                            
           break;

[...]
    
};

// Sentencia SQL
mysql_db_query("baywatch","insert into {$datos['apartado']} $campo values $valores");

echo 
mysql_error();

?>
-----------------------------
NOTA: tanto $nombre como $fecha_intro son variables q no proceden del array.
-----------------------------

los datos llegan bien, ya que lo he comprobado utilizando esto:

Código PHP:
// Comprobando que recibe bien las variables
foreach ($datos as $indice => $valor){
    echo 
$indice." = ".$valor."<br>";
}; 
------------------------------

Seguro q es un error de principiante, q es lo q soy al fin y al cabo... pero me gustaría saber pq no funciona.
Bueno, gracias por vuestro tiempo, espero vuestras respuestas.

------------------------------

PD: Pues mucho mejor así es verdad
__________________
Saludos, Mich

Última edición por Mich Buchanan; 06/02/2003 a las 16:45
  #2 (permalink)  
Antiguo 05/02/2003, 19:43
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
Bueno, creo q me he equivocado los datos no llegan bien, pero me extraña que funcione con el php 4.3 y con la version 4.1.2 del servidor no.

Detalles: las variables se reciben bien en el sript principal (comprobado de la forma q puse arriba, y desde este se procesan y reenvian al mismo script pero cambiando una variable de valor utilizando

header("location:insertar.php?envia_datos=$url")

como creo que Cluster me dijo q hiciera ( gracias ) pero ese $envia_datos no llega como debería.

Bueno, siento ser tan lechón, pero espero haber aclarado el camino un poco más.
__________________
Saludos, Mich

Última edición por Mich Buchanan; 05/02/2003 a las 19:47
  #3 (permalink)  
Antiguo 05/02/2003, 22:06
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Creo que este tipo de referencia a variables dentro de una sentencia solo es válidad desde cierta version de PHP...

Cita:
","insert into {$datos['apartado']} $campo
Por que no tratas con algo así:

$apartado=$datos['apartado'];

"insert into $apartado $campo..."
__________________
Manoloweb
  #4 (permalink)  
Antiguo 06/02/2003, 04:33
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
La sentencia está bien (creo) además estoy llamando a datos {$datos['apartado']} pq 'apartado' es una variable del array $datos y $apartado por si sólo, no tiene ningún valor, a no ser que hiciera:

{$datos['apartado']}=$apartado;

Además en ese mismo script hay otra sentencia similar pero con un update y funciona perfectamente, la única diferencia entre ambas es lo que ya comenté antes que en la que no funciona está esta sentencia por el medio:

header("location: insertar.php?envia_datos=$url");

y parece que el array $envia_datos no está llegando a su destino (y por lo tanto no hay datos que introducir en la BD), quizás esta forma de pasar variables sólo sea válida a partir de cierta versión del php, (o si ).

De todos modos probaré lo que dices, y muchas gracias por responder, ya postearé si esa era la solución.
__________________
Saludos, Mich
  #5 (permalink)  
Antiguo 06/02/2003, 11:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm .. Dices q el código tal cual funciona en uno y en otro no ..

Como trabaja register_globals cada sevidor? (en php.ini . .. o en un phpinfo() lo puedes ver)

Y como recoges ese envia_datos par luego asignarlo a $datos ...?

Podrias poner el código completo de los scripts implicados .. Si pones código aquí usa el boton PHP a la hora de poner el código (se verá mejor) .. Y si es muy largo publicalo en algun servidor con extensión .phps o .txt para verlo en su contexto.

Un saludo,
  #6 (permalink)  
Antiguo 06/02/2003, 12:34
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
Pues aquí están los links:

phpinfo del servidor web:

phpinfo1

el de mi servidor de pruebas en casa:

phpinfo2

y estos son los links a los scripts (espero que nadie se ria demasiado si son cutres desordenados y mal programados):

este es el formulario:
formulario.php


Este es el que añade definitivamente los registros:
add.php

Este es el q digo q funciona bien:
actualizar.php

este es q decide q hacer con los datos y el problemático a la vez
insertar.php

Y este es una copia del q envia funciones de las FAQ:
funciones.php

Gracias por tu ayuda, espero q esto sea suficiente.

NOTA: La web no está en IESPANA, pero es la q más a mano tengo ahora.
__________________
Saludos, Mich
  #7 (permalink)  
Antiguo 06/02/2003, 13:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm se ve una pequeña diferencia en ambos servidores:

magic_quotes_gpc
En el de tu casa lo trabajas a OFF y en el servidor a ON.

Ese magic_quotes_gpc hace que el servidor añada automaticamente \ slashes cuando envias variables con comillas dobles o simples o \ .. y algun q otro caracter mas.

Las funciones de serializar y "des"serializar el array .. SOLO quitan "slashes" cuando recibe el URL (funcion recibe_url() ) .. asumiendo en cierta manera que se usa esa directiva de php.ini a ON ...

De todas formas .. tu mismo dices q en Casa (a OFF esa directiva) .. te va bien .. y en el servidor de la web .. no te va .. cuando debería ser al reves . en tu casa no funcionase correctamente y en el de internet si ...

Prueba a añadir esas "slashes" en el servidor en internet .. (aunque no creo q sea esto ..)

Código PHP:
function envia_url($array
{
                
$tmp=addslashes($array);
       
$tmp=serialize($tmp);
       
$tmp=urlencode($tmp);
       return 
$tmp;
}; 
Un saludo,
  #8 (permalink)  
Antiguo 06/02/2003, 16:43
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
Pos no va a ser eso , me voy a volver loco!!!, es más os voy a volver locos a todos.

Bueno voy a insistir en la parte conflictiva, al script insertar.php le llega perfectamente el array, y al llegar a la condicion "ins" de un switch se reenvía a si mismo con esta sentencia.

Código PHP:
$datos['do']="add";
$url=envia_url($datos);
header("location: insertar.php?envia_datos=$url"); 
creo que esta parte, pq en el mismo script en la parte "act" en el switch lo q hace actualizar e incluir directamente otro script y funciona bien, vamos q la única diferencia es el paso del header intermedio.
__________________
Saludos, Mich
  #9 (permalink)  
Antiguo 06/02/2003, 16:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Creo q ya localicé el error:

Te faltan los exit; despues de todos los header() q haces ...

El exit; detiene la ejecución del script .. cosa q es lógico q tengas q hacer si haces un redireccionamiento.

El header("location: ...."); .. lo único que hace PHP es decirle al navegador "cambia la página de ese cliente" (pero el sigue con el flujo del programa ...)

Es probable q al no terminar .. se comporte de forma extraña tu script segun se cumplan o no condiciones ..

Un saludo,
  #10 (permalink)  
Antiguo 06/02/2003, 17:27
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
Pues tampoco va a ser eso, lo único q hace es parar el script y no redirige el header, quizás sea ese el fallo, pero no entiendo pq no lo envía,si quieres verlo es el link q pone arriba insertar.php y la sentencia es la de antes:

Código PHP:
header("location: insertar.php?envia_datos=$url"); 
Bueno, creo q si aquí no dais con el fallo más me vale reescribirlo todo de nuevo...

@Cluster: te he enviado un privado con la direccion de la web y te explico los pasos a seguir hasta llegar al error por si quisieras ver el 'problema' en vivo, pero no te sientas obligado ni mucho menos a visitarlo.

No pongo el link aquí pq no me gusta dar publicidad a algo tan cutre...

PD: Siento dar tanto el coñazo, pero es q no se donde más preguntar...
__________________
Saludos, Mich
  #11 (permalink)  
Antiguo 07/02/2003, 07:43
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 21 años, 2 meses
Puntos: 0
Esto me ha respondido Cluster en un privado:

Cita:
Ya he entrado a probar el insertar.php ..

Vero q recoge bien las variables ..
La variables deberían de aparecer 2 veces, no sólo una.

la 1ª en el script llega al header (aparece el array) y se redirecciona a si mismo, por lo tanto después del header deberían de aparecer de nuevo una 1ª vez.

y la 2ª cuando recarga otra vez el insertar.php cambia de acción en el switch y en esta está un include al scrip add.php que denuevo muestra el array ( ya se q es algo redundante ) y por eso deberían de aparecer 2 veces.


Cita:
Cuando pusistes el exit; .. hicieste esto?:

header("location: tal.tal?variables=tal");
exit;

o donde pusistes el exit; .. ¿lo pusistes antes del header()? ..

debe ser en ese orden .. toda lógica q caiga bajo el exit; (siempre q este por tus condicionales llegue a ejecutarse) NO se va a ejecutar ..
El exit lo he puesto después del header() por supuesto, el problema está en que no sigue ese header, sencillamente no lo ejecuta, pero no se pq.
__________________
Saludos, Mich
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 03:37.