Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Uso de Constantes

Estas en el tema de Uso de Constantes en el foro de PHP en Foros del Web. Hola a todos, estoy utilizando constantes para restringir acceso de ciertas páginas, por ejem: lista_usuarios.php Código: <?php define("_INDEXOK_", true); header("Content-Type: text/html;charset=utf-8"); ?> <!DOCTYPE html> <html ...
  #1 (permalink)  
Antiguo 13/10/2013, 13:32
Avatar de osaka80  
Fecha de Ingreso: mayo-2012
Mensajes: 65
Antigüedad: 11 años, 11 meses
Puntos: 0
Uso de Constantes

Hola a todos, estoy utilizando constantes para restringir acceso de ciertas páginas, por ejem:

lista_usuarios.php
Código:
<?php
  define("_INDEXOK_", true); 
  header("Content-Type: text/html;charset=utf-8");
?>
<!DOCTYPE html>
<html >
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="author" content="Joseph" />
  <title>PANEL</title>
    
</head>
<body>       
<?php
     include("base/tabla_usuario.php");
?>
</body>
</html>
tabla_usuario.php
Código:
<?php
//include("conexion.php");
if(!defined('_INDEXOK_')) { 
//Si no se ha definido la constante _INDEXOK_ 
//quiere decir que no se ha llamado a este archivo desde el index.php 
die("no se puede acceder a este file directamente..."); 
} 
include("conexion/conexion.php");

//AQUI VA MI CONSULTA Y DEMAS ROLLO
Bueno el caso es que haciendo uso de Constantes evito que por medio de url no puedan accedar a http://miweb.com/base/tabla_usuario.php.

Hasta ahi todo muy bien, esto es lo que seria un ejemplo básico


Ahora vamos al proyecto que estoy realizando

1. registro-usuario.php (aqui esta incluido un archivo JQuery para validar los diversos campos y activar ciertos campos ->"js/valida_reg.js")

Código:
<?php
//header("Content-Type: text/html;charset=utf-8");
//Acá defines la constante 
define("_INDEXOK_", true); 

  include('conexion/conexion.php');
  // construimos el combo de paises desde la base de datos
  $combo_paises="";
  $combo_carreras="";
  $combo_categoria="";
  $sql1 = "SELECT * FROM lista_country";
  if ($res1 = mysqli_query($con, $sql1)){
     //obtener el array asociativo 
      while($sql_p = mysqli_fetch_row($res1))
      {
       $combo_paises.= "<option value='".$sql_p[0]."'>".utf8_encode($sql_p[1])."</option>";
      }
       //liberar el conjunto de resultados 
       mysqli_free_result($res1);
  }

 
?>
<!DOCTYPE html>
<html lang="en">
	<head>
		<title>Proyecto Web</title>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="chrome=1,IE=9" />
		<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		<meta http-equiv="X-UA-Compatible" content="IE=edge"/> 
    <meta name="author" content="AC" /> 
    <link href='images/logo.ico' rel='icon' type='image/x-icon'/>
		<link rel="stylesheet" href="css/reset.css" type="text/css" media="screen">
		<link rel="stylesheet" href="css/style.css" type="text/css" media="screen">
		<link rel="stylesheet" href="css/grid.css" type="text/css" media="screen">
		<link rel="stylesheet" href="css/smart_wizard.css" type="text/css">
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="js/jquery.smartWizard-2.0.min.js"></script>    
    <script type="text/javascript" src="js/valida_reg.js"></script>



		
	</head>
	<body >
     
      //	AQUI TENGO MI FORMULARIO

	</body>
</html>
2.- Parte del Codigo que utilizo para Cargar los select, como se observa llamo a mi archivo php, para cargar las ciudades ("valida_reg.js")
Código:
$(document).ready(function(){
     
            // Smart Wizard         
            $('#wizard').smartWizard({
              transitionEffect:'slideleft',
              onLeaveStep:leaveAStepCallback,
              onFinish:onFinishCallback,
              enableFinishButton:true});


          function leaveAStepCallback(obj){
            var step_num= obj.attr('rel');
            return validateSteps(step_num);
          }
          
          function onFinishCallback(){
           if(validateAllSteps()){
            $('form').submit();
           }
          }
 
          //Seleccionar Pais y cargar Ciudades
          $("#fpais").change(function (event) {
              var id= $("#fpais").find(':selected').val();
              $("#fciudad").load('base/combo_ciudad.php?id='+id);
              $("#fciudad").removeAttr("disabled");
              $("#fciudad").focus();
            });  
          
     });
3.- Mi archivo base/combo_ciudad.php, y como se observa llamo a la constante definida en registro-usuario.php, pero no se porque diablos cuando llega a este archivo "combo_ciudad.php" no me carga en el select correspondiente

Código:
<?php  
if(!defined('_INDEXOK_')) { 
//Si no se ha definido la constante _INDEXOK_ 
//quiere decir que no se ha llamado a este archivo desde el index.php 
die("no se puede acceder a este file directamente..."); 
} 
?>
<?php
include('conexion/conexion.php');
$salida="";
$id_pais=$_GET["id"];
// construimos el combo de ciudades deacuerdo al pais seleccionado
$combog = "SELECT * FROM lista_city WHERE relacion=$id_pais";

//CONSULTA QUE ME DEVUELVE SEGUN EL ID SELECCIONADO
?>
Es algo asi como si se perdiera el valor de la Constante y no llega a combo_ciudad.php, algún tipo de ayuda, espero haberme explicado muy bien y me echen un cable.

  #2 (permalink)  
Antiguo 13/10/2013, 23:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Uso de Constantes

Recuerda que PHP es un lenguaje de scripts y no se mantiene ejecutándose en memoria, la llamada AJAX es una nueva ejecución de PHP donde ingresas directamente por URL a combo_ciudad.php y, por tanto, la constante no está definida.

Las opciones que tienes son:
- Dejar de verificar la constante en ese script
- Crear un script alterno, digamos ajax.php donde definas la constante y controles todas las llamadas AJAX con sus respectivos includes.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 14/10/2013, 11:49
Avatar de osaka80  
Fecha de Ingreso: mayo-2012
Mensajes: 65
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Uso de Constantes

Hola gracias por la respuesta, pero no lo tengo del todo claro.
Ese script "ajax.php" me dices que contenga la CONSTANTE, pero no pillo lo de controlar las llamadas ajax, tendria que alterar mi archivo valida_reg.js??

Algun breve ejemplo, y perdón por las molestias.

Un Saludo.
  #4 (permalink)  
Antiguo 14/10/2013, 12:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Uso de Constantes

Un ejemplo:
Código Javascript:
Ver original
  1. // En lugar de:
  2.          //Seleccionar Pais y cargar Ciudades
  3.           $("#fpais").change(function (event) {
  4.               var id= $("#fpais").find(':selected').val();
  5.               $("#fciudad").load('base/combo_ciudad.php?id='+id);
  6.               $("#fciudad").removeAttr("disabled");
  7.               $("#fciudad").focus();
  8.             });  
  9.  
  10. // Tendrías:
  11.          //Seleccionar Pais y cargar Ciudades
  12.           $("#fpais").change(function (event) {
  13.               var id= $("#fpais").find(':selected').val();
  14.               $("#fciudad").load('base/ajax.php?a=combo_ciudad&id='+id);
  15.               $("#fciudad").removeAttr("disabled");
  16.               $("#fciudad").focus();
  17.             });

Creas un ajax.php que va a controlar todas las llamadas AJAX y, entonces:
Código PHP:
Ver original
  1. <?php
  2. define("_INDEXOK_", true);
  3. // Scripts que cargarás de acuerdo a la acción seleccionada
  4. $scripts = array(
  5.     'combo_ciudad' => 'combo_ciudad.php',
  6.     // Aquí agregas otros que sean necesarios
  7. );
  8.  
  9. // Tomas la variable proveniente de la URL
  10. $accion = (isset($_GET['a'])) ? $_GET['a'] : '';
  11.  
  12. // Verificas que sea una acción válida
  13. if(!isset($scripts[$accion])) {
  14.      die('Acción inválida');
  15. }
  16.  
  17. // Incluyes el script que ejecuta el código correspondiente
  18. // Se supone que están en la misma carpeta, cierto?
  19. include $scripts[$accion];

Con esto, para combo_ciudad.php ya estará definida la constante requierida.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 14/10/2013, 15:42
Avatar de osaka80  
Fecha de Ingreso: mayo-2012
Mensajes: 65
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Uso de Constantes

Ya he podido solventar los problemas anteriores, muchas gracias.

Antes de poder dar por finalizado este tema, me surge una duda

Quiero mostrar un formulario de registro(registro.php), cuando el usuario active el código, un ejemplo:

"registro.php" -> contiene todo el diseño(css,js)

1- Se registra en web, le envió email a su correo para que active cuenta.
2- Cuando active cuenta, se le muestra el formulario para rellenar datos personales.

Ahora bien lo que quiero es que "registro.php" sera accesible cuando pase por activar su cuenta, no podran acceder mediante la URL miweb.com/registro.php

"activar.php" -> header('Location: registro.php');


PD: en lo anterior que me explicaste, se puede controlar ya que hago llamadas mediante includes, y asi evito acceder a ese tipo de archivos, pero ahora que realizo una redireccion no se si funciona (lo he probado y no me funciona).

Un Saludo.
  #6 (permalink)  
Antiguo 14/10/2013, 17:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Uso de Constantes

La redirección es una nueva petición y, si vas directo al script que comprueba la constante, esta no estará definida.

Debes hacerlo con include, como en el ejemplo que te sugerí; o bien, con variables de sesión, al ingresar en activar.php creas una variable $_SESSION['registro'] = time() + 3600; con lo que el usuario tendrá límite de 1 hora para registrarse y la verificación en registro.php es sencilla:

Código PHP:
Ver original
  1. if(!isset($_SESSION['registro']) || $_SESSION['registro'] < time()) {
  2.     die('Acceso no permitido');
  3. }

Estoy suponiendo que ya estás familiarizado con las sesiones, aunque realmente no es muy complicado manejarlas.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 15/10/2013, 02:07
Avatar de osaka80  
Fecha de Ingreso: mayo-2012
Mensajes: 65
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Uso de Constantes

Lo de sesiones lo llevo bien, pero en vez de darle un tiempo de 1hora para que se registre puedo tratar de cambiar el valor de sesión una vez finalizado el registro.


Ejemplo

activar.php -> inicio de sesiones $_SESSION['registro']='inicio';

registro.php -> uso de sesiones $_SESSION['registro']='inicio';
y cuando termine su registro cambiar el valor de la sesion a
$_SESSION['registro']='fin';

Con lo cual para acceder a registro.php
if($_SESSION['registro']='inicio')
{
////MOSTRAR FORMULARIO
}
else{
//no puedes acceder aqui
}

En si, mi idea es que una vez terminado el formulario de 'registro.php', no puedan a tener acceso por URL "miweb.com/registro.php"
  #8 (permalink)  
Antiguo 15/10/2013, 18:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Uso de Constantes

Sí, está bien, solo no olvides usar isset() o empty() antes de comparar el contenido, así evitas errores o advertencias de índice no definido en ...
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: constantes, formulario, html, mysql, registro, select, sql, tabla
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 05:49.