Comunidad de diseño web y desarrollo en internet online

Caducar un formulario

Citar            
MensajeEscrito el 18 Mar 2012 04:02 pm
Que tal, que podria usar para lo siguiente:

Tengo un formulario y al enviarlo necesito caducar la pagina para que no lo reenvien de nuevo?...

Gracias

Por logoys

Claber

104 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Mar 2012 07:52 pm
No se a qué te refieres con caducar la página, pero puedes usar JavaScript para evitar que presionen dos veces el botón de envío.

Código Javascript :

document.getElementByName('nombreDelBoton').onClick= 
function{
     this.disabled=true;
};

Por Lexas

1207 de clabLevel

7 tutoriales

Genero:Femenino   Desarrollador de GAIA Premio_Secretos

Ilustración y desarrollo de software

firefox
Citar            
MensajeEscrito el 18 Mar 2012 08:10 pm
Tengo un formulario divido en 3 pasos, el primero llena la informacion personal y la segunda una serie de datos, el tercero es solo para mostrar todo lo que llené en los dos pasos anteriores y me da la posibilidad de imprimir esos datos, lo que no quiero es que cuando estén en el paso 2 puedan darle al botón de atras del navegador y reenviar esos datos me explico?...

gracias

Por logoys

Claber

104 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Mar 2012 08:33 pm
Por cuestiones de integridad de la información, no veo conveniente que se escriban los datos si no están completos. Te sugeriría mejor que en la primera parte, al presionar "siguiente" usaras el método "post" para capturar esos datos y guardarlos en una sesión. Una vez terminados los 3 pasos del formulario, ahora sí al presionar "enviar" escribiría la información de los tres formularios en el servidor y luego destruiría la sesión donde se guardaba. Así si el usuario retrocede y vuelve a enviar, solo se sobreescribirían los datos de la sesión sin ninguna consecuencia importante.
Para guardar la información enviada por el formulario en la siguiente parte:

Código PHP :

if (isset($_POST['submit'])){   //si se llegó presionando el botón
   session_start();
   $_SESSION['dato1']=$_POST['dato1'];
} else {
    echo "error"; //si escribieron directamente la URL sin pasar por el primer formulario
}

Los datos de POST son muy volátiles, solo sirven en la página inmediata a la que lleva el formulario, pero la sesión dura hasta que se cierra la ventana del navegador o hasta que se borran manualmente sus datos (usando $_SESSION = array(); ).

Por Lexas

1207 de clabLevel

7 tutoriales

Genero:Femenino   Desarrollador de GAIA Premio_Secretos

Ilustración y desarrollo de software

firefox
Citar            
MensajeEscrito el 19 Mar 2012 02:23 am
algo asi pensé al principio... el asunto es ....

Es un sistema para un hotel... entonces me han pedido que sin importar que terminen el registro los datos del huesped potencial se guarden sin importar que termine los pasos, esto segun para saber cuantos han tenido el interés de hospedarse y por x motivo se arrepintieron etc... por esa razon lo hago de esa manera... lo que he pensado es mostrar el formulario en un div e irlo mostrando segun se de click en siguiente...

Por logoys

Claber

104 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Mar 2012 02:38 am
Veo que es una situación más complicada, quizá puedas manejar un campo oculto con un identificador aleatorio que genere el php antes de comenzar el formulario. Luego cuando llena el formulario pasa con $_POST el identificador que guardaría en la sesión, si el usuario presiona retroceder, el primer formulario tendría una parte donde validara que el identificador no sea el mismo que el guardado en la sesión. Si quiere volver a intentar tendrá que volver al inicio a obtener otro identificador de sesión. Pero hacer esto tendría penalización ya que el usuario perdería la posibilidad de corregir la parte anterior.

Sé que es incorrecto querer cambiar los procesos de la empresa pero, no podrían mejor permitir que el usuario intente las veces que quiera y consultar en una base de datos separando por cliente o algo así?.

Por Lexas

1207 de clabLevel

7 tutoriales

Genero:Femenino   Desarrollador de GAIA Premio_Secretos

Ilustración y desarrollo de software

firefox
Citar            
MensajeEscrito el 19 Mar 2012 03:04 am
Entiendo que es algo fuera de lo común... lo que hago es lo siguiente:

1.- Muestro el formulario de datos personales
2.- Al presionar siguiente creo un objeto donde trabajo con un array que contiene a $_POST
3.- Inserto los datos y guardo el id en un campo oculto para usarlo en caso de que sigan con la reservacion.

el codigo es el siguiente:

MySQL.php

Código PHP :

<?php
require_once 'interfacedb.php';

class MySQL implements interfacedb
{
    const SERVIDOR = 'localhost';
    const USUARIO = 'root';
    const PASS = '';
    const DB = 'savoy';
    
    private $_conexion;
    
    public function conect()
    {
        $this->_conexion = mysql_connect(self::SERVIDOR, self::USUARIO, self::PASS) or die ("Error");
        $conect = mysql_select_db(self::DB,$this->_conexion);
        
        return $this->_conexion;
    }
    public function insert(Sql $query)
    {
        mysql_query($query);
        //echo $query;
    }
    public function lastId()
    {
        return mysql_insert_id();
    }
    public function close()
    {
        mysql_close($this->_conexion);
    }
}


reservacion.php

Código PHP :

<?php //header("Cache-Control: no-store, no-cache, must-revalidate");  ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <link href="style.css" rel="stylesheet" type="text/css" media="all" />
        <script type="text/javascript" src="./js/jquery.js"></script>
        <script type="text/javascript" src="./js/vanadium.js"></script>
    </head>
    <body>
        <form name="reservacion" method="POST" action="step2.php"/>
        <div id="reservaciones">
            <fieldset id=""><legend>Reservar Habitaciones</legend>

                <fieldset id=""><legend>Datos personales</legend>
                    Nombre: <input type="text" name="nombre" id="nombre" size="36" class=":required"/><br/>
                    Apellidos: <input type="text" name="apellidos" class=":required"/><br/>
                    Procedencia: <input type="text" name="procedencia" class=":required"><br/>
                    E-mail: <input type="text" name="email" class=":email :required"><br/>
                    Telefono: <input type="text" name="numero" class=":integer :required"><br/>
                </fieldset>
                <input type="submit" name="reservar" value="Siguiente"/>
                <input type="reset" name="restore"/>
            </fieldset>
        </div>
    </body>
</html>


step2.php

Código PHP :

<?php

/*
 * Captura la informacion de un posible huesped
 * 
 */

require_once 'checkData.php';
require_once 'database.php';
require_once 'MySQL.php';
require_once 'Sql.php';

abstract class step2
{
    static public function run($array)
    {
        $sql = new Sql($array);
        $sql->prepareToinsert();
        
        $db = new database(new MySQL());
        return $db->ejecutar($sql);
    }
}
$array = $_POST;
?>
<?php //header("Cache-Control: no-store, no-cache, must-revalidate");  ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <link href="style.css" rel="stylesheet" type="text/css" media="all" />
        <script type="text/javascript" src="./js/jquery.js"></script>
        <script type="text/javascript" src="./js/vanadium.js"></script>
    </head>
    <body>
        <form name="reservacion" method="POST" action="step3.php"/>
        <div id="reservaciones">
                <fieldset><legend>Estancia</legend>
                    <input type="hidden" name="id" value="<? echo step2::run($array); ?>"/>
                    <label for="Entrada" accesskey="e">Entrada:</label> <input type="text" name="entrada" class=":required"/><br/>
                    <label for="Salida">Salida: </label><input type="text" name="salida" class=":required"/><br/>
                    <label for="No. de Habitaciones">No. de Habitaciones</label>
                    <select name="habitaciones">
                        <option value="1">1</option>
                        <option value="1">2</option>
                        <option value="1">3</option>
                        <option value="1">4</option>
                        <option value="1">5</option>
                        <option value="1">6</option>
                        <option value="1">7</option>
                        <option value="1">8</option>
                        <option value="1">9</option>
                        <option value="1">10</option>
                    </select>
                    <br/>
                    <fieldset><legend>Habitacion 1</legend>
                        <select name="hab_1">
                            <option value="1">Sencilla</option>
                            <option value="2">Doble</option>
                            <option value="1">Ejecutiva</option>
                        </select> -> Precio: <input type="text" value="" name="precio_hab_1"/>
                    </fieldset>
                    <fieldset><legend>Habitacion 2</legend>
                        <select name="hab_2">
                            <option value="1">Sencilla</option>
                            <option value="2">Doble</option>
                            <option value="1">Ejecutiva</option>
                        </select> -> Precio: <input type="text" value="" name="precio_hab_2"/>
                    </fieldset>
                    <br/>
                    <label for="Adultos">No. de personas:</label> <input type="text" name="personas" class=":integer :required" size="2" maxlength="2"/><br/>
                  
                </fieldset>
                <input type="submit" name="reservar" value="Siguiente"/>
                <input type="reset" name="restore"/>
            </fieldset>
        </div>
    </body>
</html>



database.php

Código PHP :

<?php
require_once 'interfacedb.php';
require_once 'Sql.php';

class database
{
    private $_manejador;
    
    public function __construct(interfacedb $manejador)
    {
        $this->_manejador = $manejador;
    }
    public function ejecutar(Sql $query)
    {
        $this->_manejador->conect();
        $this->_manejador->insert($query);
        $id = $this->_manejador->lastId(); 
        $this->_manejador->close();
        return $id;
    }    
}


interbasedb.php

Código PHP :

<?php

interface interfacedb
{
    public function conect();
    public function insert(Sql $query);
    public function lastId();
    public function close();
}


sql.php

Código PHP :

<?php
require_once 'checkData.php';
require_once 'database.php';
require_once 'MySQL.php';


class Sql extends checkData
{
    private $_arrayForm, $_query;
    
    public function __construct($array)
    {
        $this->_arrayForm = $array;
        parent::__construct($this->_arrayForm);
        //if(is_array($this->_arrayForm)){ echo "OK"; }else{ echo "NO"; }
    }
    public function prepareToInsert()
    {
        if(is_array($this->prepareData())){
            ////En caso de ser un array
            $fields = '';
            $values = '';            

            foreach($this->prepareData() as $clave => $valor){
                $fields .= "`".$clave."`,";
                $values .= "'".$valor."',";
            }
            $fields = rtrim($fields,",");
            $values = rtrim($values,",");
            $this->_query = "INSERT INTO `huespedes` (".$fields.") VALUES (".$values.")";
            //echo "Si soy array :)<br/>";
        }else{
            //No es array
            $this->_query = "No es array :(";
        }
        //print_r($this->prepareData());
        return $this->_query;
    }
    public function __toString()
    {
        //$this->prepareToInsert();
        return $this->_query;
    }
}

/*
//Iniciar

$array = $_POST;

$other = new Sql($array);

$other->prepareToinsert();

$db = new database(new MySQL());

$db->ejectuar($other);
 
 */



para la inserccion de datos con las clases hice lo siguiente:

Una clase de coneccion
Una para prepara la sentencia sql
Otra que ejecuta la sentencia y hace la interfaz entre Mysql y la sentencia

Por logoys

Claber

104 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.