Foros del Web » Programando para Internet » PHP »

denegar acceso a enviar.php

Estas en el tema de denegar acceso a enviar.php en el foro de PHP en Foros del Web. Hola a tod@s, tengo un problema con un formulario y es el siguiente: tengo un formulario html que al ejecutarlo hace actuar un archivo php ...
  #1 (permalink)  
Antiguo 01/02/2012, 08:57
 
Fecha de Ingreso: enero-2012
Mensajes: 10
Antigüedad: 12 años, 9 meses
Puntos: 0
denegar acceso a enviar.php

Hola a tod@s, tengo un problema con un formulario y es el siguiente:

tengo un formulario html que al ejecutarlo hace actuar un archivo php (enviar.php)
una vez que el php ha realizado su trabajo, éste muestra una pagina de confirmacion de mensaje enviado.Pues bien los tres archivo estan en la misma carpeta de un servidor web.

El acceso normal para el envio del formulario es:

www.mipaginaweb/micarpeta/formulario.thml

El tema es que si pongo en la barra de navegacion:

www.mipaginaweb/micarpeta/enviar.php

aparece la página de confirmación del formulario enviado, y éste me envia un e-mail con los campos vacios diciendo que se me han enviado unos datos.

Puedo bloquear el acceso para que cuando vayan a la dirección del php,éste no se ejecute?

Muchisimas gracias





enviar.php

<?php
$fecha = date("d/m/Y H:i:s");
$nombre = $_REQUEST['nombre'] ;
$apellidos = $_REQUEST['apellidos'] ;
$email = $_REQUEST['email'] ;
$confirmacion = "Estos son los datos que has introducido. Muchas gracias por tu participación:<br /><br />Nombre: $nombre <br />Apellidos: $apellidos";
mysql_connect ('servidor', 'usuario', 'contraseña') or die ('Error: ' . mysql_error());
mysql_select_db ('nombre_bd');
$query="INSERT INTO prueba (fecha, nombre, apellidos, email) VALUES ('$fecha', '$nombre', '$apellidos', '$email')";
mysql_query($query) or die ('Error en la carga de datos');
mail($email, "Asunto del mensaje", $confirmacion, "From: [email protected]");
header("location:http://www.tudominio.es/respuesta.html")
?>
  #2 (permalink)  
Antiguo 01/02/2012, 09:42
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: denegar acceso a enviar.php

1 - no use $_RESQUEST, use $_POST o $_GET según el caso

2 - verifique si se ha enviado datos:

Código PHP:
if (! isset($_POST['nombre']) {
    echo 
'no se han enviado datos';
    exit;

__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 01/02/2012, 11:46
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 126
Antigüedad: 14 años, 1 mes
Puntos: 11
Respuesta: denegar acceso a enviar.php

Bien, como dijo maycolalvarez, usa $_POST o $_GET, no $_RESQUEST.
Son errores comunes que uno comete cuando se esta iniciando a programar y los tutoriales que uno esta siguiendo son malos o antiguos.
Con respecto al mensaje, te recomendaria que la validacion del form la hagas en la misma pagina del formulario y tambien controles si se hizo click en submit o no con la funcion que te paso maycolalvarez... saludos!
  #4 (permalink)  
Antiguo 01/02/2012, 16:16
 
Fecha de Ingreso: enero-2012
Mensajes: 10
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: denegar acceso a enviar.php

donde tendria que colocar exactamente esto?:



if (! isset($_POST['nombre']) {
echo 'no se han enviado datos';
exit;
}




Muchas gracias a los dos, lo pruebo y os comento

Última edición por juankardj; 01/02/2012 a las 16:40
  #5 (permalink)  
Antiguo 01/02/2012, 21:28
Avatar de mitcheldaza  
Fecha de Ingreso: junio-2011
Ubicación: Colombia
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: denegar acceso a enviar.php

Alguna vez vi un problema parecido, incluso algo aplique para la solucion .. soy bien novato.

Segu entiendo deseas que no se pueda acceder a enviar.php si antes no se ha logeado una persona. Cualquier intento de entrar por url debe ser redirigido.

Use esa vez variables de sesion de esta forma:

En el formulario de acceso, cuando ya se ha dado acceso al usuario (la autenticacion ha terminado satisfactoriamente) declaro una variable de sesion.

Código PHP:
$_SESSION['autenticado']="si"

El script que me validara la existencia de la variable de sesion y de no existir redirigira seria algo asi como este seguridad.php

Código PHP:
session_start();

//comprueba que esta autenticado

if($_SESSION['autenticado']!="si"){
    
//no existe autenticacion de usuario
    
Header("Location:index.php")
    
    exit();

Es posible hacer la redireccion con Header tambien.

Por ultimo En las paginas donde necesito que no se de acceso a una persona a menos que esta este autenticada coloco (enviar.php). Antes que cualquier sentencia y etiqueta html.

Código PHP:
include ("seguridad.php"); 

Asi cualquiera que intente entrar a enviar.php y no se haya logeado sera redirigido a index.php.


Es una solucion sencilla pero funcional
  #6 (permalink)  
Antiguo 01/02/2012, 23:24
Avatar de luis_h_1  
Fecha de Ingreso: octubre-2010
Ubicación: México
Mensajes: 42
Antigüedad: 14 años
Puntos: 4
Respuesta: denegar acceso a enviar.php

Hola puedes utilizar la funcion isset para determinar que las variable esten definidias y despues con la empty para que no se envie el correo con campos vacios

algo asi:
Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST['nombre']) && isset($_POST['apellidos']) && isset($_POST['email')]){
  3. if(!empty($_POST['nombre']) && !empty($_POST['apellidos']) && !empty($_POST['email'])){
  4.  
  5. $fecha = date("d/m/Y H:i:s");
  6. $nombre = $_REQUEST['nombre'] ;
  7. $apellidos = $_REQUEST['apellidos'] ;
  8. $email = $_REQUEST['email'] ;
  9. $confirmacion = "Estos son los datos que has introducido. Muchas gracias por tu participación:<br /><br />Nombre: $nombre <br />Apellidos: $apellidos";
  10. mysql_connect ('servidor', 'usuario', 'contraseña') or die ('Error: ' . mysql_error());
  11. mysql_select_db ('nombre_bd');
  12. $query="INSERT INTO prueba (fecha, nombre, apellidos, email) VALUES ('$fecha', '$nombre', '$apellidos', '$email')";
  13. mysql_query($query) or die ('Error en la carga de datos');
  14. mail($email, "Asunto del mensaje", $confirmacion, "From: [email protected]");
  15. header("location:http://www.tudominio.es/respuesta.html")
  16. }
  17. }
  18. ?>

saludos
  #7 (permalink)  
Antiguo 01/02/2012, 23:38
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años, 6 meses
Puntos: 322
Respuesta: denegar acceso a enviar.php

Hay que hacer notar que si vas a hacer uso de empty, no es necesario el uso de isset, ya que la primera checa que la variable exista además de que no esté vacía.

Saludos
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 01/02/2012, 23:59
Avatar de luis_h_1  
Fecha de Ingreso: octubre-2010
Ubicación: México
Mensajes: 42
Antigüedad: 14 años
Puntos: 4
Respuesta: denegar acceso a enviar.php

Cita:
Iniciado por Sourcegeek Ver Mensaje
Hay que hacer notar que si vas a hacer uso de empty, no es necesario el uso de isset, ya que la primera checa que la variable exista además de que no esté vacía.

Saludos
Cierto ^^
  #9 (permalink)  
Antiguo 02/02/2012, 08:17
 
Fecha de Ingreso: enero-2012
Mensajes: 10
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: denegar acceso a enviar.php

Cita:
Iniciado por mitcheldaza Ver Mensaje
Alguna vez vi un problema parecido, incluso algo aplique para la solucion .. soy bien novato.

Segu entiendo deseas que no se pueda acceder a enviar.php si antes no se ha logeado una persona. Cualquier intento de entrar por url debe ser redirigido.

Use esa vez variables de sesion de esta forma:

En el formulario de acceso, cuando ya se ha dado acceso al usuario (la autenticacion ha terminado satisfactoriamente) declaro una variable de sesion.

Código PHP:
$_SESSION['autenticado']="si"

El script que me validara la existencia de la variable de sesion y de no existir redirigira seria algo asi como este seguridad.php

Código PHP:
session_start();

//comprueba que esta autenticado

if($_SESSION['autenticado']!="si"){
    
//no existe autenticacion de usuario
    
Header("Location:index.php")
    
    exit();

Es posible hacer la redireccion con Header tambien.

Por ultimo En las paginas donde necesito que no se de acceso a una persona a menos que esta este autenticada coloco (enviar.php). Antes que cualquier sentencia y etiqueta html.

Código PHP:
include ("seguridad.php"); 

Asi cualquiera que intente entrar a enviar.php y no se haya logeado sera redirigido a index.php.


Es una solucion sencilla pero funcional



El formulario precisamente es para registrar usuarios, con lo cual no se va a cumplir la funcion:

$_SESSION['autenticado']="si";

tiene que haber alguna otra forma...
de todas formas muchas gracias por tu tiempo
  #10 (permalink)  
Antiguo 02/02/2012, 08:19
 
Fecha de Ingreso: enero-2012
Mensajes: 10
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: denegar acceso a enviar.php

Cita:
Iniciado por luis_h_1 Ver Mensaje
Hola puedes utilizar la funcion isset para determinar que las variable esten definidias y despues con la empty para que no se envie el correo con campos vacios

algo asi:
Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST['nombre']) && isset($_POST['apellidos']) && isset($_POST['email')]){
  3. if(!empty($_POST['nombre']) && !empty($_POST['apellidos']) && !empty($_POST['email'])){
  4.  
  5. $fecha = date("d/m/Y H:i:s");
  6. $nombre = $_REQUEST['nombre'] ;
  7. $apellidos = $_REQUEST['apellidos'] ;
  8. $email = $_REQUEST['email'] ;
  9. $confirmacion = "Estos son los datos que has introducido. Muchas gracias por tu participación:<br /><br />Nombre: $nombre <br />Apellidos: $apellidos";
  10. mysql_connect ('servidor', 'usuario', 'contraseña') or die ('Error: ' . mysql_error());
  11. mysql_select_db ('nombre_bd');
  12. $query="INSERT INTO prueba (fecha, nombre, apellidos, email) VALUES ('$fecha', '$nombre', '$apellidos', '$email')";
  13. mysql_query($query) or die ('Error en la carga de datos');
  14. mail($email, "Asunto del mensaje", $confirmacion, "From: [email protected]");
  15. header("location:http://www.tudominio.es/respuesta.html")
  16. }
  17. }
  18. ?>

saludos




Hola luis, he puesto este codigo y no me funciona...
me da este error:
Parse error: syntax error, unexpected ')', expecting ']' in ////enviar.php on line 2
  #11 (permalink)  
Antiguo 02/02/2012, 09:34
 
Fecha de Ingreso: enero-2012
Mensajes: 10
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: denegar acceso a enviar.php

Bueno la verdad es que era facil...es que no tengo ni idea de php jejeje

He puesto ésto y funciona bien,ahora si alquien accede a enviar.php, le aparece el mensage "los campos no pueden estar vacios" y lo mas importante, no se registran datos vacios en la base de datos.

if(empty($_POST['nombre']) && empty($_POST['apellidos']) && empty($_POST['email'])) // comprueba que los campos no se envien vacios
{
echo 'Los campos no pueden estar vacios';
exit;
}


no se que diferencia hay entre estas dos funciones:

(!empty($_POST['nombre'])

(empty($_POST['nombre'])


la primera con el símbolo ! no me funciona.

ahora me queda otra cosa, y es esto:

al rellenar el formulario, me envia los datos y despues me aparece una pagina diciendome que el registro ha sido enviado correctamente, pues bien ahora si clico en el flecha (pagina anterior del explorador) para retroceder a la web del formulario, me aparecen los datos ya rellenados como antes los tenia,y si le doy a enviar me registra dos veces los mismos datos.

necesito que cuando se envien los datos,se borren del formulario...have que encuentro por ahi


Muchas gracias

Etiquetas: denegar, formulario, html
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 12:36.