Foros del Web » Programando para Internet » PHP »

No sé donde está el error

Estas en el tema de No sé donde está el error en el foro de PHP en Foros del Web. Estoy probando la recarga de página con $PHP_SELF en el siguiente código: <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de bases de ...
  #1 (permalink)  
Antiguo 08/06/2002, 17:55
 
Fecha de Ingreso: junio-2002
Mensajes: 19
Antigüedad: 15 años, 6 meses
Puntos: 0
No sé donde está el error

Estoy probando la recarga de página con $PHP_SELF en el siguiente código:

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<?php
include("conexio.php");
$link=Conectarse();
$result=mysql_query("select * from noticias",$link);
?>
<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR><TD> <B>Campo&lt ;/B> </TD><TD> <B>Fecha</B></TD>
<TD> <B>Noticia</B></TD><TD> <B>Archivo</B></TD>
<TD> <B>Borrar</B> </TD></TR>
<?php
while($row = mysql_fetch_array($result))
{
printf("<tr><td> %s</td><td> %s </td><td> %s </td><td> %s </td><td><a href=\"$PHP_SELF?id=%d\">Borra</a></td></tr>",
$row["ambito"],$row["fecha"],$row["noticia"],$row["archivo"],$row["ID_nots"]);
}
mysql_free_result($result);
mysql_close($link);
if ($id)
{ echo "Se borraría el registro número ".$id; }
else
{ echo "Esto no funciona"; }
?>
</table>
</body>
</html>

Al ejecutarlo en el navegador me aparece lo siguiente:

Ejemplo de uso de bases de datos con PHP y MySQL
Conexión con la base de datos conseguida.
Campo Fecha Noticia Archivo Borrar

Notice: Undefined variable: PHP_SELF in C:\Inetpub\wwwroot\WebPHPdir\ej07.php on line 19
Medioambiente 2001-11-10 Editorial Belladona publica una colección de cuadernos sobre el calàpot CONTRATO1.doc Borra

Notice: Undefined variable: PHP_SELF in C:\Inetpub\wwwroot\WebPHPdir\ej07.php on line 19
Governación 2000-12-30 Presentación del curso a distancia sobre Gobernación ofrecido por EVMed CONTRATO1.wpd Borra

La conexión se realiza, pero no reconoce la variable PHP_SELF, i al pulsar sobre el enlace no hace nada. La variable id no tiene ningún valor al recargar la página. ¿Por qué no coge un valor? o si lo coge, ¿por qué lo pierde al recargarse la página (si es que se recarga)?.
Gracias.
  #2 (permalink)  
Antiguo 08/06/2002, 18:44
Avatar de gomo  
Fecha de Ingreso: mayo-2002
Ubicación: [email protected]
Mensajes: 906
Antigüedad: 15 años, 7 meses
Puntos: 0
Re: No sé donde está el error

Bueno el error que hay en el script se ve a simple vista, no se porque dice undefined variable, pero el problema es que printf() se usa asi:
printf("Hola %s!",$nombre);
%s le dice a la funcion printf() que $nombre salra en caracteres... Si le pones %c saldra en codigo ASCII, etc...
Entonces no podes poner variables en el medio de la cadena de texto, de esta forma:
printf(Hola $nombre!);
este codigo es erroneo.
Cuando usas muchas variables, haces algo asi:
printf("Hola %s,tienes %d años y %d meses",$nombre,$edad,$meses);
la primera cadena de formato (%d) se asocia a la primera variable de la lista: $nombre.
En tu script vos pones $PHP_SELF en la cadena de texto con formatos:
printf("Hola %s, estas en la página $PHP_SELF y tenés %d años",$nombre,$edad);
entonces, cuando se ejecuta, el script busca para %s la primera variable: $nombre, y para %d, la segunda, $edad.
Printf solo aceptara las variables despues de la cadena de formatos.
Sin embargo el error que te da parece ser porque php no tiene habilitado $PHP_SELF...
Saludos

<div align="center"><img src="http://cablemodem.fibertel.com.ar/sainztrapaga/images/firma.jpg" width="435" height="70" border="0">
</div>
  #3 (permalink)  
Antiguo 08/06/2002, 19:08
 
Fecha de Ingreso: junio-2002
Mensajes: 19
Antigüedad: 15 años, 6 meses
Puntos: 0
Re: No sé donde está el error

Muchas gracias, gomo. No sabía muy bien cómo funcionaba printf() y ahora ya sé cómo manejarla un poco. El problema parece ser con las variables. Se me ha ocurrido editar el php.ini (trabajo con win98SE, PWS 4.0 y php4) y he cambiado la instancia register_globals=Off por register_globals=On, y he vuelto a ejecutar el código tal cual está en mensaje. Mi sorpresa ha sido mayúscula cuando he visto que funcionaba perfectamente. Lo que me da a pensar que con register_globals=Off, tiene que haber alguna forma de transmitir el valor de la variable id sin que se pierda por el camino. ¿Alguna sugerencia?
Saludos, Llorenç.
  #4 (permalink)  
Antiguo 08/06/2002, 19:15
Avatar de gomo  
Fecha de Ingreso: mayo-2002
Ubicación: [email protected]
Mensajes: 906
Antigüedad: 15 años, 7 meses
Puntos: 0
Re: No sé donde está el error

Bueno register_globals() lo que hace es que las variables recibidas desde get sean tomadas como globales en los programas, o sea que funcionen como cualquier variable.
Sin embargo es mas seguro que esto este desactivado, ya que si hay alguna vulnerabilidad en el script con esto ON es mas facil de explotar.
Entonces hay dos soluciones:
usar $HTTP_GET_VARS[tuvariable] en lugar de $tuvariable,
o hacer $tuvariable = $HTTP_GET_VARS[tuvariable]
De todas formas yo lo tengo ON es mas rapido para programar ;)
Saludos

<div align="center"><img src="http://cablemodem.fibertel.com.ar/sainztrapaga/images/firma.jpg" width="435" height="70" border="0">
</div>
  #5 (permalink)  
Antiguo 08/06/2002, 19:25
 
Fecha de Ingreso: junio-2002
Mensajes: 19
Antigüedad: 15 años, 6 meses
Puntos: 0
Re: No sé donde está el error

Bueno, si es más rápido para programar seguiré tu consejo y trabajaré en ON. Si quisiera trabajar en OFF, ¿cómo quedarían entonces las líneas referentes a la variable id?

Yo pondría el print() tal como está y:

if($HTTP_GET_VARS['id'])

en la condición. ¿Debería funcionar bien así?. Mañana haré una prueba. Hoy es muy tarde aquí en España (son las 1:20 am hora local) y mañana debo madrugar. Gracias por tu ayuda, Llorenç.
  #6 (permalink)  
Antiguo 08/06/2002, 19:58
Avatar de gomo  
Fecha de Ingreso: mayo-2002
Ubicación: [email protected]
Mensajes: 906
Antigüedad: 15 años, 7 meses
Puntos: 0
Re: No sé donde está el error

Exacto, asi deberia funcionar, cualkiera de los 2 ejemplos que te puse en el mensaje anterior...
Saludos

<div align="center"><img src="http://cablemodem.fibertel.com.ar/sainztrapaga/images/firma.jpg" width="435" height="70" border="0">
</div>
  #7 (permalink)  
Antiguo 08/06/2002, 22:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Re: No sé donde está el error

Comentario:

printf() consume mas recursos del servidor que echo() y hacen lo mismo en el ejemplo dado .. es decir .. para dar salida simple a HTML (como es el caso mas tipico) .. sobra el echo() ademas tiene menos elementos en la sintaxis (no parentesis ...)

Ahora si, si deseas Formatear la salida (de ahi el f al final de print), como por ejemplo .. formatear un numero .. etc .. debes usar printf.

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 22:12.