Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/03/2011, 23:51
RodrigoG
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: Evitar registros duplicados-Clase

Hola, deja ver si te entiendo :)

Situación 1:
I Acto: Un formulario pide un código.
II Acto: Se ingresa un código que si existe y se presiona enviar.
III Acto: Aparece otro formulario y al costado se ve el mismo código que se puso en el II Acto.
fin.

Situación 2:
I Acto: Un formulario pide un código.
II Acto: Se ingresa un código que no existe y se presiona enviar.
III Acto: Se visualiza el mismo formulario.
fin.

En el fondo lo que deseas es hacer un control de acceso cierto? es decir, que sólo quienes sepan el código tengan acceso al siguiente formulario.

Sobre pasar ese código a una clase podrías hacer lo siguiente:

Control.php
===========

Código PHP:
Ver original
  1. class ModeloControl {
  2.  
  3.         public function existe($codigo) {
  4.                
  5.                 // Conectar a la base de datos
  6.                 mysql_connect("servidor", "usuario", "contraseña");
  7.                 mysql_select_db("nombre_dela_BD");
  8.                
  9.                 // Hacer la consulta
  10.                 $resultado = mysql_query("SELECT codigo FROM tabla WHERE codigo='$codigo'");
  11.                
  12.                 // Retornar true si es que existe el código (una o más veces).
  13.                 return mysql_num_rows($resultado) > 0;
  14.         }
  15.  
  16. }

Luego tu formulario que sólo recoge el código:
vistaFormularioControl.tpl.php
================

Código HTML:
Ver original
  1. <form name="fvalida" method="post" action="controlador.php" >
  2.         <label for="codigo">Codigo:</label>
  3.         <input type="text" id="codigo" name="codigo">
  4.         <input class="btnchk" type="submit" name="submit" value="Check">
  5. </form>

Y el otro formulario que quieres que le aparezca sólo a quienes saben el código.
vistaFormularioSeguro.tpl.php
=======================

Código HTML:
Ver original
  1. <!--Algun formulario -->
  2. <form name="fvalida" method="post" action="algun_script.php" >
  3.         <label for="nom">Nombre:</label>
  4.         <input type="text" id="nom" name="nom">
  5.         <label for="edad">Edad:</label>
  6.         <input type="text" id="edad" name="edad">
  7.         <input class="btnchk" type="submit" name="submit" value="Cambiar">
  8. </form>
  9. <div>
  10.         <h2>Felicidades! tu código era</h2>
  11.         <p><?php echo $codigo ?></p>
  12. </div>

Y finalmente el controlador que dirá que formulario mostrar.
controlador.php
=========

Código PHP:
Ver original
  1. inlude 'ModeloControl.php';
  2.  
  3. // instancear la clase
  4. $control = new ModeloControl();
  5.  
  6. // Recoger el código.
  7. $codigo = $_POST['codigo'];
  8.  
  9. // En el caso de que exista, mostrar el formulario seguro, caso contrario
  10. // mostrar el mismo formulario.
  11. if($control->existe()) {
  12.         include 'vistaFormularioSeguro.tpl.php';
  13. } else {
  14.         include 'vistaFormularioControl.tpl.php';
  15. }

No tengo idea de cómo funciona Smarty :) pero quizás te ayude a ordenar un poco lo que necesitas.

La clase que te puse tiene varias falencias, por ejemplo, es insegura a ataques de inyección SQL. Podrías solucionar eso poniendo un is_int($codigo) antes de hacer la consulta, en el caso de que el código tenga letras necesitarás conectarte por MySqli o PDO.

Otra cosa a mejorar es el rendimiento, no tiene sentido abrir una conexión a la base de datos para saber sólo si un dato existe o no.

Bueno, cualquier cosa sólo pregunta, saludos :)
__________________
Estreno blog ~ DesarrolladorWeb.cl :)