entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Evitar Auto Reenvio de formulario

como evito que al hacer un submit al refrescar la pagina no se envie de nuevo y gracias

<?php 
session_start();
require_once ('../php/connection.php');
include("index.php");

if(isset($_SESSION['usuario'])){
    if($_SESSION['usuario']['perfil'] != "administrador"){
        header("Location: ../usuario/");
    }
}else {
    header('Location : ../');
}

?>

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='refresh' CONTENT='600'>
    <meta charset="utf-8">
    <title>Ordenes de Salida</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/dataTables.bootstrap4.min.css">

</head>
<!--Navbar-->

  <body>
    <br>

<div class="container" style="margin-top: 90px;">
    <div class="row justify-content-center">
        <div class="col-md-10 text-center">
            <?php
            if(isset($_POST['submit'])){
                $fecha_salida = $_POST['salida'];

                $id_usuario = $_POST['usuario'];
                $ruta = "../archivos/";
                opendir($ruta);
                $destino = $ruta.$_FILES['archivo']['name'];
                copy($_FILES['archivo']['tmp_name'],$destino);
                $archivo=$_FILES['archivo']['name'];

                $Query =mysqli_query($connect, "INSERT INTO ordenes (fecha_salida,archivo,id_usuario) 
                    VALUES ('$fecha_salida','$archivo', '$id_usuario')");
                if($Query){
                    echo "<script>alert('Guardado!')</script>";

                }else{
                    echo "<script>alert('Error al Guardar!')</script>";
                }

            }

            ?>
        </div>
    </div>
</div>

<!-- Button trigger modal -->
<center><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
    Nueva Orden
</button></center>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Registrar Nueva Orden</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <form method="POST" action="" enctype="multipart/form-data">

                    <!-- form-group -->
                    <div class="form-group">
                        <label for="fecha_salida">Fecha de Salida</label>
                        <input type="date" name="salida" class="form-control" required="">
                    </div>
                    <!--form-group -->
                    <div class="form-group">
                        <label for="archivo">Archivo</label>
                        <input type="file" name="archivo" class="form-control" required="" >
                    </div>
                    <!-- form-group -->
                    <div class="form-group">
                        <label for="id_usuario">Usuario</label>
                        <select style="width:450px" id="usuario" name="usuario" required="">

                            <option>Seleccione</option>
                            <?php 
                            $query = "SELECT * FROM usuario ORDER BY nombre_apellido";
                            $usuario=$connect->query($query);

                            while($row = mysqli_fetch_assoc($usuario)) { ?>
                                <option value="<?php echo $row['id_usuario']; ?>"><?php echo $row['nombre_apellido']; ?></option>
                            <?php } ?>
                        </select>
                    </div>
                    <div class="form-group">
                        <input type="submit" name="submit" class="btn btn-info" value="Agregar">
                    </div><!-- form-group -->

                </form><!-- form -->
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>

            </div>
        </div>
    </div>
</div>
<table id="example" class="table table-striped table-bordered" width="100%" cellspacing="0">
    <thead>
        <tr>
            <th>#Orden</th>
            <th>Fecha de Salida</th>
            <th>Usuario</th>
            <th>Archivo</th>

        </tr>
    </thead>
    <tbody>
        <?php
        $Show = mysqli_query($connect,  $sql = "SELECT o.id_orden,o.fecha_salida,o.archivo,u.*
            FROM ordenes AS o
            INNER JOIN usuario AS u
            ON o.id_usuario=u.id_usuario
            WHERE u.correo='" . $_SESSION['usuario']['correo'] . "'" );
            while($r = mysqli_fetch_array($Show)): ?>
                <tr>
                    <td><?php echo $r['id_orden'];?></td>
                    <td><?php echo $r['fecha_salida']; ?></td>
                    <td><?php echo $r['nombre_apellido']; ?></td>
                    <td><a  href="../archivos/<?php echo $r['archivo'];?>"><button type="button" class="btn btn-secondary" data-dismiss="modal" >Ver</button ></a></td>
                </tr>

            <?php endwhile; ?>
        </tbody>
    </table>
</div><!-- col -->
</div><!-- row -->
</div><!-- container -->

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('#example').DataTable();
    } );
</script>
</body>

</html>

0voto

daviks007 comentado

¿Y si en lugar de actualizar se le da a "atras" en el navegador no volvería a reenviar los datos?

2 Respuestas

1voto

Umarumm Puntos1640

Ya lo solucione el header funciona bien de manera local al tener el proyecto montado en 000webhost necesitaba agregar esta linea al .htaccess "php_value output_buffering on"

sin las comillas y asi pude arreglar el problema por si alguien tiene pensado montar un proyecto en linea y tiene ese problema ya saben que hacer .

0voto

Peter comentado

Gracias por compartir la solución.

1voto

magarzon Puntos30650

La forma más sencilla es que al hacer el post (submit), la respuesta no sea un HTML, si no una redirección, por ejemplo a la misma página del formulario (guardando en sesión algún tipo de mensaje, si quieres mostrarlo), o a otra página que muestre el resultado. De esta forma, al refrescar, como se ha hecho una redirección (GET), solo va a recargar la página.

Otras formas implican el hacer el submit vía AJAX, o utilizar javascript, por ejemplo poniendo este código al final de la página:

<script>
if ( window.history.replaceState ) {
  window.history.replaceState( null, null, window.location.href );
}
</script>

Y hay más soluciones, pero todo depende de lo que quieras hacer, y para algo sencillo, recomiendo la primera.

1voto

Umarumm comentado

Muchas gracias por tu respuesta copio y pego tal y como esta o hay que editar algo? Por ejemplo termina en href hay que agregar algo como href="archivo.php");

1voto

magarzon comentado

No, copia el script tal y como está. Aunque sigo recomendando mejor la primera opción, hacer una redirección como respuesta.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta