Foros del Web » Programando para Internet » PHP »

Recibir como parámetro un texto.

Estas en el tema de Recibir como parámetro un texto. en el foro de PHP en Foros del Web. Buenos días a todos, Ayer escribí mi primer post con una consulta sobre include() poniendo un ejemplo y funcionó perfectamente. El código era el siguiente: ...
  #1 (permalink)  
Antiguo 10/05/2006, 03:23
 
Fecha de Ingreso: mayo-2006
Mensajes: 34
Antigüedad: 18 años, 6 meses
Puntos: 0
Recibir como parámetro un texto.

Buenos días a todos,

Ayer escribí mi primer post con una consulta sobre include() poniendo un ejemplo y funcionó perfectamente. El código era el siguiente:

download.php
<?
$extension = ".rar"; // EXTENSION DE ARCHIVOS

if (file_exists("cloudj$extension")) {
header("location: cloudj$extension");
$file = fopen("contador/cloudj.inc","r"); // contador de downloads
$count = fread($file, 100);
$countplus = ($count + 1);
fclose($file);
$fileb = fopen("contador/cloudj.inc","w");
fwrite($fileb, $countplus, 100);
fclose($fileb);
}

else { echo "El archivo <b>$archivo$extension</b> no EXISTE"; }

?>


Esto lo cree para un CONTADOR. El texto que pone "cloudj" es el fichero físico que actualiza. Funciona bien, pero ahora me encuentro con que en una misma carpeta tengo varios ficheros y quiero que este download.php sea genérico y me recoja en una vble el nombre del fichero que le paso. El código quedaría así:

<?
$extension = ".rar"; // EXTENSION DE ARCHIVOS

if (file_exists("$archivo$extension")) {
header("location: $archivo$extension");
$file = fopen("contador/$archivo.inc","r"); // contador de downloads
$count = fread($file, 100);
$countplus = ($count + 1);
fclose($file);
$fileb = fopen("contador/$archivo.inc","w");
fwrite($fileb, $countplus, 100);
fclose($fileb);
}

else { echo "El archivo <b>$archivo$extension</b> no EXISTE"; }

?>


En teoría $archivo debe recibir el nombre del fichero cuando llamo a este .php, pero me sale un mensaje de error con el echo del else. La llamada la hago de la siguiente forma:

<form METHOD="GET" action="vba/download.php?archivo=AñadeGG">
<TD VALIGN=center align=center BGCOLOR=#af9494>
<INPUT type="submit" value="Descargar" class="ButtonDescarga"></TD>
</form>


Como véis paso al download.php el nombre del archivo que es AñadeGG. ¿Al poner ?archivo=AñadeGG este "archivo" es la vble que luego usa download.php en $archivo? En el php se declara una vble $extension donde se guarda el ".rar", pero ¿no debería haber una vble para recoger el nombre del fichero que paso?

Espero que me hayáis entendido y gracias por vuestro tiempo.

Un saludo.
  #2 (permalink)  
Antiguo 10/05/2006, 07:02
 
Fecha de Ingreso: mayo-2006
Mensajes: 34
Antigüedad: 18 años, 6 meses
Puntos: 0
Resuelto

Hola,

Investigando un poquillo he podido comprobar que es un tema seguridad y de variables que están deshabilitadas en el servidor.

He leído que una posible solución es acceder al fihero php.ini y modificar el estado "off" a "on" de register_globals. Ejemplo: register_globals=On. Transcribo info encontrada:

Si las variables que llegan por un formulario se declaran automáticamente en la página podría ocurrir que un visitante "avispado" modificase a mano la lista de variables pasadas por la URL con intención de crear alguna variable necesaria para realizar algún tipo de acción, posiblemente no autorizada, en nuestro sitio web.

No se si la idea queda clara, pero en el supuesto de que nosotros estuviéramos utilizando una variable de sesión, llamada autorizado y con valor “si”, para saber si un usuario se ha autentificado correctamente, un posible atacante podría introducirla a través de la URL.

3w.tudominio.com/pagina.php?autorizado=si

El tema es que, por motivos de seguridad, se recomienda acceder a cada variable de servidor (Variables de sesión, de fomularios, pasadas en la URL, etc.) indicando las vías por las que ha sido declarado, por ejemplo:

HTTP_POST_VARS
HTTP_GET_VARS …

Aunque a partir de determinada versión de PHP se puede acceder también por las abreviaciones:

_GET
_SESSION
_COOKIE
...


Yo, al final, como no tenía ni idea de donde buscar ese php.ini opté por usar _GET, _POST... y quedó de la siguiente forma:

Llamada con paso por parámetros:

<form METHOD="POST" action="vba/download.php?archivo=AñadeGG">
<TD VALIGN=center align=center BGCOLOR=#af9494>
<INPUT type="submit" value="Descargar" class="ButtonDescarga"></TD>
</form>


El fichero download.php que recibe el parámetro:

<?
$extension = ".rar"; // EXTENSION DE ARCHIVOS

if (file_exists("$_POST[archivo]$extension")) {
header("location: $_POST[archivo]$extension");
$file = fopen("contador/$_POST[archivo].inc","r"); // contador de downloads
$count = fread($file, 100);
$countplus = ($count + 1);
fclose($file);
$fileb = fopen("contador/$_POST[archivo].inc","w");
fwrite($fileb, $countplus, 100);
fclose($fileb);
}

else { echo "El archivo <b>$archivo$extension</b> no EXISTE"; }
?>


Un saludo a todos.

Última edición por josealh; 11/05/2006 a las 00:23
  #3 (permalink)  
Antiguo 11/05/2006, 02:09
 
Fecha de Ingreso: mayo-2006
Mensajes: 34
Antigüedad: 18 años, 6 meses
Puntos: 0
Mi gozo en un pozo.

Hola,

Resolví el problema que no pasaba parámetros al .php como comenté en el anterior post. Pero ahora resulta que me muestra un mensaje (el echo que puse) diciéndome que no encuentra el archivo. El archivo está en su carpeta. Lo que me extraña es que la primera vez que lo ejecuté si funcionó.

Por otra parte, si en el código cambio "$_POST[fichero]" por el nombre del fichero a buscar si funciona.

¿Alguna sugerencia?

Gracias y un saludo.
  #4 (permalink)  
Antiguo 11/05/2006, 02:53
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Estás pasando parámetros por URL, esos se recojen con $_GET.

Estás haciendo mal la concatenación de variables, se debe hacer mediante un punto ($var1.$var2).

www.php.net/variables.external



PD: Es mejor utilizes las etiquetas del foro para iluminar código. Para PHP tienes "[ PHP] código [ /PHP]" (sin espacios), así será coloreada la sintaxis y se lee mejor que con los colores que utilizaste ( Algunos somos sensibles de vista ).
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 11/05/2006, 03:46
 
Fecha de Ingreso: mayo-2006
Mensajes: 34
Antigüedad: 18 años, 6 meses
Puntos: 0
Sigue igual

Hola jam1138,

Gracias por responder. Te cuento.

He cambiado el POST por GET:

Código PHP:
<form METHOD="GET" action="vba/download.php?archivo=AñadeGG">
<
TD VALIGN=center align=center BGCOLOR=#af9494>
<INPUT type="submit" value="Descargar" class="ButtonDescarga"></TD>
</
form
y en he puesto los GET y el "." para concatenar:

Código PHP:
<?
$extension 
".rar"// EXTENSION DE ARCHIVOS

if (file_exists("$_GET[archivo].$extension")) {
header("location: $_GET[archivo].$extension");
$file fopen("contador/$_GET[archivo].inc","r"); // contador de downloads
$count fread($file100);
$countplus = ($count 1);
fclose($file);
$fileb fopen("contador/$_GET[archivo].inc","w");
fwrite($fileb$countplus100);
fclose($fileb);
}

else { echo 
"El archivo <b>$archivo$extension</b> no EXISTE"; }
?>
Pues de esta forma no pasa nada al php en la línea
Código PHP:
action="vba/download.php?archivo=AñadeGG" 
. Si cambio en el FORM GET y pongo POST si pasa "AñadeGG", pero me sigue saliendo el mensaje de
"El archivo AñadeGG.rar no EXISTE". Si pongo POST en los dos lados hace lo mismo.

He leído en el artículo que me dices y comenta que el $_GET['var'] parece que lo recoge entre comillas simples, pero a mi me da error. Lo de poner el "." como concatenador de cadenas parece que le da igual porque el mensaje es el mismo en ambos casos.

También he mirado tema de permisos en el fichero y está OK.

Gracias por tu respuesta y a ver si le damos salida.
  #6 (permalink)  
Antiguo 11/05/2006, 23:49
 
Fecha de Ingreso: mayo-2006
Mensajes: 34
Antigüedad: 18 años, 6 meses
Puntos: 0
Ya funciona

Al final, probando y probando lo dejé como al principio pero cambiado una cosa en el form:

Aquí lo dejé como lo tenía al principio y sin usar _GET ni el concatenador "." entre vbles.

Código PHP:
<?
$extension 
".rar"// EXTENSION DE ARCHIVOS

if (file_exists("$archivo$extension")) {
header("location: $archivo$extension");
$file fopen("contador/$archivo.inc","r"); // contador de downloads
$count fread($file100);
$countplus = ($count 1);
fclose($file);
$fileb fopen("contador/$archivo.inc","w");
fwrite($fileb$countplus100);
fclose($fileb);
}

else { echo 
"El archivo <b>$archivo$extension</b> no EXISTE"; }

?>
Y en la parte del FORM cambié
Código PHP:
METHOD="GET" 
por:
Código PHP:
METHOD="POST" 
Código PHP:
<form METHOD="POST" action="vba/download.php?archivo=AñadeGG">
<
TD VALIGN=center align=center BGCOLOR=#af9494>
<INPUT type="submit" value="Descargar" class="ButtonDescarga"></TD>
</
form
Un saludo y gracias por vuestra ayuda.
  #7 (permalink)  
Antiguo 16/05/2006, 05:27
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
... $_GET recoje parámetros pasados por URL, no importa cómo sean "generados".

Tú estás poniendo ya los parámetros en el action del formulario... pero tu formulario no hace nada, esta demás, bien puede ser sustituido por un simple enlace.

La concatenación debería de ser: file_exists($archivo.$extension)

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 21:24.