Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/03/2011, 09:31
Avatar de bandolera
bandolera
 
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Sonrisa Respuesta: Evitar registros duplicados-Clase

Cita:
Iniciado por RodrigoG Ver Mensaje
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 :)
Probaré entre hoy y manaña. En realidad lo que quiero es que antes de ingresr los datos de un producto, el sistema verifique si ya existe el código del articulo que voy a ingresar, si existe mostrará el código y sabré que ya existe y si no se ingresa el resto de sus datos.
Por eso primero quiero que verifique el código y luego pida los demás datos en el formulario.
Y quiero hacerlo con php. Por eso me compliqué un poco. Se entiende mi requerimiento??
Tu código creo que me va a ayudar, pero en este momento no estoy en la PC donde está mi sistema.