Refrescar una página php
Resuelto
Usuario anónimo
-
Usuario anónimo -
Usuario anónimo -
Hola,
deseo entender cómo refrescar una página después de enviar un <form type="post">
sí, conozco el método:
o también
sin embargo, en mi caso no corresponde a lo que quiero.
me explico con código:
admin.php:
admin.php comprende 2 formularios:
- la autenticación
- la carga de documentos
Cuando me autentico en admin.php, puedo cargar mis documentos.
como podrás entender, una vez que la carga ha terminado, la página se refresca.
pero me encuentro de nuevo teniendo que escribir mi contraseña .... por cada nuevo archivo ... es agotador a la larga.
SIN EMBARGO:
cuando refresco manualmente esta página con el botón del navegador, funciona correctamente.
mi imagen se añade a la colección y no necesito una segunda autenticación..
¿tienes algún método?
he probado pasando mi formulario en GET y usando
pero es el mismo problema, extrañamente.
y además, GET... no es terrible a nivel de discreción.
una vez más, gracias por tu ayuda.
Configuración: Linux / Firefox 69.0
deseo entender cómo refrescar una página después de enviar un <form type="post">
sí, conozco el método:
header('Location: admin.php'); o también
header("Refresh: 0;url=admin.php"); sin embargo, en mi caso no corresponde a lo que quiero.
me explico con código:
admin.php:
<?php if (!isset($_POST['mdp']) OR $_POST['mdp'] != "CHOCOLAT") { ?> <div class="Authentification master"> <form class="slave" action="admin.php" method="post"> <p> <label for="mdp">Contraseña de Admin</label><br> <input type="password" name="mdp" /> <input type="submit" value="Validar" /> </p> </form> [...] admin.php comprende 2 formularios:
- la autenticación
- la carga de documentos
Cuando me autentico en admin.php, puedo cargar mis documentos.
if ($fileSize > 100000) { $fileNameNew = uniqid('', true). "." . $fileActualExt; $fileDestination = 'uploads/'. $fileNameNew; move_uploaded_file($fileTmpName, $fileDestination); $sql = "INSERT INTO OC (PicturePath, PictureName, titre, instruction) VALUES ('$fileDestination', '$fileName', '$fileTitle', '$instruction')"; if ($conn->query($sql) === TRUE) { header("Refresh: 0;url=admin.php"); } else { echo "Error: " . $sql . "<br>" . $conn->error; } }else { echo "Tu archivo es demasiado grande !! -> " . $fileSize . " > 100000"; } como podrás entender, una vez que la carga ha terminado, la página se refresca.
pero me encuentro de nuevo teniendo que escribir mi contraseña .... por cada nuevo archivo ... es agotador a la larga.
SIN EMBARGO:
cuando refresco manualmente esta página con el botón del navegador, funciona correctamente.
mi imagen se añade a la colección y no necesito una segunda autenticación..
¿tienes algún método?
he probado pasando mi formulario en GET y usando
header('Location: admin.php?mdp=CHOCOLAT'); pero es el mismo problema, extrañamente.
y además, GET... no es terrible a nivel de discreción.
una vez más, gracias por tu ayuda.
Configuración: Linux / Firefox 69.0
3 respuestas
Hola,
Para empezar... te invito a leer y aplicar el contenido de este enlace
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Luego... regresa a vernos con tu código COMPLETO.
Porque ahora... con solo algunos fragmentos... es difícil decir qué está mal.
(pero vuelve solo después de haber aplicado los consejos dados en el enlace que te acabo de dar... ¡sino no hace falta!)
--
Atentamente,
Jordane
Para empezar... te invito a leer y aplicar el contenido de este enlace
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Luego... regresa a vernos con tu código COMPLETO.
Porque ahora... con solo algunos fragmentos... es difícil decir qué está mal.
(pero vuelve solo después de haber aplicado los consejos dados en el enlace que te acabo de dar... ¡sino no hace falta!)
--
Atentamente,
Jordane
Lo recuerdo -
Después de autenticarme una primera vez y haber utilizado el formulario de carga (admin.php línea 49)
actualizo esta misma página PERO no deseo volver a caer en el formulario de autenticación (admin.php línea 30).
Funciona cuando hago clic en actualizar a través de mi navegador pero no cuando lo pido (collector.php línea 35) con
admin.php :
Collector.php (llamado por el formulario de carga)
Espero que esto sea más explícito así.
Disculpen por la ortografía y si sienten que estoy abusando del foro.
Después de autenticarme una primera vez y haber utilizado el formulario de carga (admin.php línea 49)
actualizo esta misma página PERO no deseo volver a caer en el formulario de autenticación (admin.php línea 30).
Funciona cuando hago clic en actualizar a través de mi navegador pero no cuando lo pido (collector.php línea 35) con
header('Location: admin.php'); o header("Refresh: 0;url=admin.php"); admin.php :
<!doctype html> <html> <head> <meta charset="utf-8"> <title>OC | Panel de administración</title> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="css/master.css"> <title>website | Admin</title> </head> <body> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=OpinionCollector;charset=utf8', 'root', ''); } catch(Exception $e) { die('Error: '.$e->getMessage()); } ?> <?php if (!isset($_POST['mdp']) OR $_POST['mdp'] != "666-999") { ?> <div class="nav-bar"> <h1>título</h1> <a href="index.php">VOLVER</a> </div> <div class="Autenticación maestro"> <form class="slave" action="admin.php" method="post"> <p> <label for="mdp">Contraseña de Admin</label><br> <input type="password" name="mdp" /> <input type="submit" value="Validar" /> </p> </form> </div> <?php } else { ?> <div class="nav-bar"> <h1>título</h1> <a href="index.php">VOLVER</a> </div> <div class="container-fluid Administración"> <div class="row"> <div class="col-lg-6 split maestro"> <div class="slave"> <form class="slave" action="back/collector.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileUpload" required><br> <input type="text" name="title" placeholder="dale un título" required><br> <input type="text" name="instruction" placeholder="da algunas instrucciones" required><br> <button type="submit" name="submit">CARGAR</button> </form> </div> </div> <div class="col-lg-6 split"> <div class="row"> <div class="col-lg-12 pictureCol"> <div class="row"> <?php $reponse = $bdd->query('SELECT PicturePath, titulo, NbrLikes, NbrDislikes FROM OC ORDER BY ID DESC LIMIT 0, 50'); while ($donnees = $reponse->fetch()) { ?> <div class="slave picture" style="background-image: url( <?php echo( htmlspecialchars($donnees['PicturePath']) ) ?> )"> <div class="stats"> <div class="row"> <div class="col-lg-12 maestro"> <h2 class="slave"> <?php echo( htmlspecialchars($donnees['titulo'])) ?> </h2> </div> </div> <div class="row"> <div class="col-md-6"> <img src="media/details/like.png" title="me gusta"> <h2 class="count"> <?php echo( htmlspecialchars($donnees['NbrLikes']) ) ?> </h2> </div> <div class="col-md-6"> <img src="media/details/dislike.png" title="no me gusta"> <h2 class="count"> <?php echo( htmlspecialchars($donnees['NbrDislikes']) ) ?> </h2> </div> </div> <div class="row"> <div class="col-lg-12"> <button type="button">comentario(s)</button> </div> </div> <div class="row"> <div class="col-lg-12"> <a> <img src="media/details/cross.png" title="¿eliminar esta imagen?" class="button"> </a> </div> </div> </div> </div> <?php } $reponse->closeCursor(); ?> </div> </div> </div> </div> </div> </div> <?php } ?> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html> Collector.php (llamado por el formulario de carga)
<?php $conn = new mysqli("localhost", "root", "", "OpinionCollector"); if ($conn->connect_error) { die("Fallo en la conexión: " . $conn->connect_error); } if (isset($_POST['submit'])) { $file = $_FILES['fileUpload']; $fileTmpName = $_FILES['fileUpload']['tmp_name']; $fileSize = $_FILES['fileUpload']['size']; $fileError = $_FILES['fileUpload']['error']; $fileType = $_FILES['fileUpload']['type']; $allowed = array('jpg', 'png', 'jpeg', 'pdf'); $fileName = $_FILES['fileUpload']['name']; $fileTitle = $_POST['title']; $instruction = $_POST['instruction']; $fileExt = explode('.', $fileName); $fileActualExt = mb_strtolower(end($fileExt)); if (in_array($fileActualExt, $allowed)) { if ($fileError === 0) { if ($fileSize > 100000) { $fileNameNew = uniqid('', true). "." . $fileActualExt; $filePath = 'uploads/'. $fileNameNew; $fileDestination = '../uploads/'. $fileNameNew; move_uploaded_file($fileTmpName, $fileDestination); $sql = "INSERT INTO OC (PicturePath, PictureName, titulo, instruction) VALUES ('$filePath', '$fileName', '$fileTitle', '$instruction')"; if ($conn->query($sql) === TRUE) { header("Refresh: 0;url=../admin.php"); } else { echo "Error: " . $sql . "<br>" . $conn->error; } }else { echo "¡Tu archivo es demasiado grande!! -> " . $fileSize . " > 100000"; } }else { echo "¡Hay un error al cargar tu archivo!!"; } }else { echo "¡No puedes cargar archivos de tipo [ " . $fileExt . " ]!!"; } } $conn->close(); ?> Espero que esto sea más explícito así.
Disculpen por la ortografía y si sienten que estoy abusando del foro.
Buenas noches,
no, hay las variables de sesión para eso. De hecho, no veo la relación entre las cookies del navegador y una sesión PHP que por definición existe únicamente del lado de PHP.
En cuanto al título de su pregunta/tema, por mucho que indague, no entiendo qué quiere decir "refrescar una página PHP". Lo que se actualiza es la visualización HTML, PHP funciona antes de que la página exista (preprocesador como dice el nombre del lenguaje), por lo que no hay nada que refrescar de ese lado: el programa se ejecuta, recupera los datos de la base para pasarlos al HTML o viceversa.
Lo contrario, sin embargo, es cierto y muy común, también muy útil: no hacer llamadas al servidor (como PHP y el de la base de datos) para que las páginas tarden menos en cargar y mostrar algo. Esto se puede hacer con AJAX, así que el principio es guardar en "memoria" (metadatos) resultados de consultas probables en la base para poder proporcionarlos sin tener que ejecutar de nuevo el script PHP y SQL; así la página HTML puede actualizarse sin los pocos milisegundos necesarios para las consultas y para proporcionarlas.
Así que no, no intente refrescar PHP, PHP se ejecuta (se interpreta más bien) del lado del servidor para proporcionar contenido a la página HTML y automatizar ciertas tareas sobre todo seriales y relacionadas con un SGBD relacional.
no, hay las variables de sesión para eso. De hecho, no veo la relación entre las cookies del navegador y una sesión PHP que por definición existe únicamente del lado de PHP.
En cuanto al título de su pregunta/tema, por mucho que indague, no entiendo qué quiere decir "refrescar una página PHP". Lo que se actualiza es la visualización HTML, PHP funciona antes de que la página exista (preprocesador como dice el nombre del lenguaje), por lo que no hay nada que refrescar de ese lado: el programa se ejecuta, recupera los datos de la base para pasarlos al HTML o viceversa.
Lo contrario, sin embargo, es cierto y muy común, también muy útil: no hacer llamadas al servidor (como PHP y el de la base de datos) para que las páginas tarden menos en cargar y mostrar algo. Esto se puede hacer con AJAX, así que el principio es guardar en "memoria" (metadatos) resultados de consultas probables en la base para poder proporcionarlos sin tener que ejecutar de nuevo el script PHP y SQL; así la página HTML puede actualizarse sin los pocos milisegundos necesarios para las consultas y para proporcionarlas.
Así que no, no intente refrescar PHP, PHP se ejecuta (se interpreta más bien) del lado del servidor para proporcionar contenido a la página HTML y automatizar ciertas tareas sobre todo seriales y relacionadas con un SGBD relacional.
mejor que yo existen un montón de recursos en línea para que aprendan y encuentren lo que necesitan cuando lo necesitan.
Por supuesto, hay que profundizar; Roma no se hizo en un día y un desarrollador experimentado tampoco.
Buscar en "variables de sesión PHP" me da un montón de respuestas, aquí hay una entre otras (noten el session_start() 'ver enlace' que indica una creación o renovación de sesión).
https://www.php.net/manual/es/reserved.variables.session.php
Por supuesto, hay que profundizar; Roma no se hizo en un día y un desarrollador experimentado tampoco.
Buscar en "variables de sesión PHP" me da un montón de respuestas, aquí hay una entre otras (noten el session_start() 'ver enlace' que indica una creación o renovación de sesión).
https://www.php.net/manual/es/reserved.variables.session.php
sí, sí, te aseguro que lo he leído.
mostrar las variables es depuración a mis ojos si no está destinado a quedarse.
A veces me pregunto si la gente sabe leer...
No te hablo de depuración... ni de mostrar tus variables... te hablo de RECUPERAR CORRECTAMENTE LAS VARIABLES ANTES DE USARLAS....
El enlace también explica dónde escribir tu código... en concreto... colocar la máxima cantidad de php FUERA del html para facilitar su lectura y su evolución y mantenimiento...
En fin...
En las cosas extrañas de tu código... se puede ver, por ejemplo, que usas mysqli por un lado... y PDO por el otro.... a lo que preguntaría... ¿POR QUÉ?
Luego
Después de autenticarme una primera vez y haber usado el formulario de subida (admin.php línea 49)
refresco esta misma página PERO no deseo volver a caer de nuevo en el formulario de autenticación (admin.php línea 30).
Normal... dado que tu formulario de autenticación reacciona en función de las variables POST...
Sin embargo... cuando haces tu redirección mediante el header... las variables PHP no se retransmiten...
Como dice tihuboueux ... hay que usar las variables de sesión...
Aquí es cómo debería lucir tu código... (si hubieras leído los enlaces que te di...)
Archivo cnxBdd.php
<?php //conexión a la bdd Y activación de errores PDO try{ $bdd =new PDO('mysql:host=localhost; dbname=OpinionCollector; charset=utf8', 'root', ''); // Activación de errores PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // modo de fetch por defecto : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Error : ' . $e->getMessage()); } ?> Archivo Admin.php
<?php //Inicio de sesiones session_start(); //mostrar errores PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //conexión a la bdd require_once "cnxBdd.php"; //recuperación CORRECTA de las variables ANTES de usarlas ! $isLoged = !empty($_SESSION['isLogued']) ? $_SESSION['isLogued'] : NULL; $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL; //verificamos la conexión if(!$isLoged && $mdp){ $isLoged = $mdp == "666-999" ? true : false; $_SESSION['isLogued'] = $isLoged; //ejecución de la consulta $sql = 'SELECT PicturePath, titre, NbrLikes, NbrDislikes FROM OC ORDER BY ID DESC LIMIT 0, 50'; try{ $reponse = $bdd->query($sql); }catch(Exception $e){ echo "Error en la consulta : ".$sql; die($e->getMessage()); } }else{ unset($_SESSION['isLogued']); } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>OC | Panel de administración</title> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="css/master.css"> <title>sitio web | Admin</title> </head> <body> <div class="nav-bar"> <h1>titulo</h1> <a href="index.php">VOLVER</a> </div> <?php if (!$isLoged){ ?> <div class="Autenticación master"> <form class="slave" action="admin.php" method="post"> <p> <label for="mdp">Contraseña Admin</label><br> <input type="password" name="mdp" /> <input type="submit" value="Validar" /> </p> </form> </div> <?php } else { ?> <div class="container-fluid Administración"> <div class="row"> <div class="col-lg-6 split master"> <div class="slave"> <form class="slave" action="back/collector.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileUpload" required><br> <input type="text" name="title" placeholder="da un título" required><br> <input type="text" name="instruction" placeholder="da algunas instrucciones" required><br> <button type="submit" name="submit">SUBIR</button> </form> </div> </div> <div class="col-lg-6 split"> <div class="row"> <div class="col-lg-12 pictureCol"> <div class="row"> <?php while ($donnees = $reponse->fetch()) { ?> <div class="slave picture" style="background-image: url( <?php echo( htmlspecialchars($donnees['PicturePath']) ) ?> )"> <div class="stats"> <div class="row"> <div class="col-lg-12 master"> <h2 class="slave"> <?php echo( htmlspecialchars($donnees['titre'])) ?> </h2> </div> </div> <div class="row"> <div class="col-md-6"> <img src="media/details/like.png" title="me gusta"> <h2 class="count"> <?php echo( htmlspecialchars($donnees['NbrLikes']) ) ?> </h2> </div> <div class="col-md-6"> <img src="media/details/dislike.png" title="no me gusta"> <h2 class="count"> <?php echo( htmlspecialchars($donnees['NbrDislikes']) ) ?> </h2> </div> </div> <div class="row"> <div class="col-lg-12"> <button type="button">comentario(s)</button> </div> </div> <div class="row"> <div class="col-lg-12"> <a> <img src="media/details/cross.png" title="¿eliminar esta imagen?" class="button"> </a> </div> </div> </div> </div> <?php } $reponse->closeCursor(); ?> </div> </div> </div> </div> </div> </div> <?php } ?> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html> Collector.php
<?php //Inicio de sesiones (para que continúen vivas entre cada página;..) session_start(); //mostrar errores PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //conexión a la bdd require_once "cnxBdd.php"; //recuperación correcta de las variables ANTES de usarlas... $file = !empty($_FILES['fileUpload']) ? $_FILES['fileUpload'] : NULL; $fileTitle = !empty($_POST['title']) ? $_POST['title'] : NULL; $instruction = !empty($_POST['instruction']) ? $_POST['instruction'] : NULL; if (isset($_POST['submit']) && $file) { $fileTmpName = $file['tmp_name']; $fileSize = $file['size']; $fileError = $file['error']; $fileType = $file['type']; $allowed = array('jpg', 'png', 'jpeg', 'pdf'); $fileName = $file['name']; $fileExt = explode('.', $fileName); $fileActualExt = mb_strtolower(end($fileExt)); if (in_array($fileActualExt, $allowed)) { if ($fileError === 0) { if ($fileSize > 100000) { $fileNameNew = uniqid('', true). "." . $fileActualExt; $filePath = 'uploads/'. $fileNameNew; $fileDestination = '../uploads/'. $fileNameNew; if(move_uploaded_file($fileTmpName, $fileDestination)){ $sql = "INSERT INTO OC (PicturePath, PictureName, titre, instruction) VALUES (:filePath, :fileName, :fileTitle, :instruction)"; $datas = array(':filePath'=>$filePath, ':fileName'=>$fileName, ':fileTitle'=>$fileTitle, ':instruction'=>$instruction); //Ejecución de la consulta try{ $requete = $bdd -> prepare($sql) ; $res = $requete->execute($datas) ; if($res){ header("Refresh: 0;url=../admin.php"); exit();//siempre poner un exit después de una redirección } }catch(Exception $e){ // en caso de error : echo " Error ! ".$e->getMessage(); echo " Los datos : " ; print_r($datas); } }else{ echo " Error al mover el archivo !"; } }else { echo "¡Tu archivo es demasiado grande !! -> " . $fileSize . " > 100000"; } }else { echo "¡Hay un error subiendo tu archivo !!"; } }else { echo "no puedes subir archivos del tipo [ " . $fileExt . " ] !!"; } } ?> --
Atentamente,
Jordane
Hola Jordane,
muchas gracias por tu respuesta tan completa, me ahorra mucho tiempo.
Y disculpa el tiempo de respuesta.
He encontrado algunos errores de descuido que he corregido.
como:
falta de punto y coma en (admin.php línea 21)
errores tipográficos <isLogued> en lugar de <isLogged> (admin.php líneas 15, 21, 33)
por lo demás, el código funciona, no hay más redirección en la autenticación después de subir una imagen.
sin embargo, ha aparecido un nuevo problema...
mi página admin.php ofrece un formulario de subida y muestra las imágenes ya subidas.
cuando subo una nueva imagen, soy redirigido correctamente a esta misma página (como estaba previsto sin tener que volver a autenticarme) pero no se muestra ninguna imagen.
en su lugar, tengo este error:
Uncaught Error: Call to a member function fetch() on null in /opt/lampp/htdocs/projet/admin.php:89 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/projet/admin.php on line 89
lo que corresponde a esta línea (admin.php línea 89):
buscaré cómo resolverlo, pero estoy atento si crees que sabes por qué.
muchas gracias por tu respuesta tan completa, me ahorra mucho tiempo.
Y disculpa el tiempo de respuesta.
He encontrado algunos errores de descuido que he corregido.
como:
falta de punto y coma en (admin.php línea 21)
$_SESSION['isLogued'] = $isLogued
errores tipográficos <isLogued> en lugar de <isLogged> (admin.php líneas 15, 21, 33)
$isLoged = !empty($_SESSION['isLogued']) ? $_SESSION['isLogued'] : NULL;
por lo demás, el código funciona, no hay más redirección en la autenticación después de subir una imagen.
sin embargo, ha aparecido un nuevo problema...
mi página admin.php ofrece un formulario de subida y muestra las imágenes ya subidas.
cuando subo una nueva imagen, soy redirigido correctamente a esta misma página (como estaba previsto sin tener que volver a autenticarme) pero no se muestra ninguna imagen.
en su lugar, tengo este error:
Uncaught Error: Call to a member function fetch() on null in /opt/lampp/htdocs/projet/admin.php:89 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/projet/admin.php on line 89
lo que corresponde a esta línea (admin.php línea 89):
while ($donnees = $reponse->fetch())
buscaré cómo resolverlo, pero estoy atento si crees que sabes por qué.
Pensé que este problema estaba relacionado con este post, era preferible dejarlo en el mismo.
pero entiendo, el objetivo de este foro es principalmente recopilar un problema específico con una solución.
así que no mezclar varios problemas para hacer que la solución sea más fácil de encontrar para otros.
pero entiendo, el objetivo de este foro es principalmente recopilar un problema específico con una solución.
así que no mezclar varios problemas para hacer que la solución sea más fácil de encontrar para otros.
Fichero Admin.php
<?php //Inicio de las sesiones session_start(); //mostrar errores PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //conexión a la bdd require_once "cnxBdd.php"; //recuperación LIMPIA de las variables ANTES de usarlas ! $isLoged = !empty($_SESSION['isLogued']) ? $_SESSION['isLogued'] : NULL; $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL; //verificamos la conexión if(!$isLoged && $mdp){ $isLoged = $mdp == "666-999" ? true : false; $_SESSION['isLogued'] = $isLoged; }else{ unset($_SESSION['isLogued']); } if($isLoged){ //ejecución de la consulta $sql = 'SELECT PicturePath, titre, NbrLikes, NbrDislikes FROM OC ORDER BY ID DESC LIMIT 0, 50'; //Ejecución de la consulta try{ $requete = $bdd->prepare($sql) ; $requete->execute(); $response = $requete->fetchAll(); // almacenamos el resultado en un array. }catch(Exception $e){ // en caso de error : echo " Error ! ".$e->getMessage(); echo " Los datos : " ; print_r($datas); } } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>OC | Panel de administración</title> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="css/master.css"> <title>sitio web | Admin</title> </head> <body> <div class="nav-bar"> <h1>título</h1> <a href="index.php">VOLVER</a> </div> <?php if (!$isLoged){ ?> <div class="Autenticación master"> <form class="slave" action="admin.php" method="post"> <p> <label for="mdp">Contraseña Admin</label><br> <input type="password" name="mdp" /> <input type="submit" value="Validar" /> </p> </form> </div> <?php } else { ?> <div class="container-fluid Administración"> <div class="row"> <div class="col-lg-6 split master"> <div class="slave"> <form class="slave" action="back/collector.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileUpload" required><br> <input type="text" name="title" placeholder="dar un título" required><br> <input type="text" name="instruction" placeholder="dar algunas instrucciones" required><br> <button type="submit" name="submit">SUBIR</button> </form> </div> </div> <div class="col-lg-6 split"> <div class="row"> <div class="col-lg-12 pictureCol"> <div class="row"> <?php if(!empty($response)){ foreach($response as $donnees){ ?> <div class="slave picture" style="background-image: url( <?php echo( htmlspecialchars($donnees['PicturePath']) ) ?> )"> <div class="stats"> <div class="row"> <div class="col-lg-12 master"> <h2 class="slave"> <?php echo( htmlspecialchars($donnees['titre'])) ?> </h2> </div> </div> <div class="row"> <div class="col-md-6"> <img src="media/details/like.png" title="me gusta"> <h2 class="count"> <?php echo( htmlspecialchars($donnees['NbrLikes']) ) ?> </h2> </div> <div class="col-md-6"> <img src="media/details/dislike.png" title="no me gusta"> <h2 class="count"> <?php echo( htmlspecialchars($donnees['NbrDislikes']) ) ?> </h2> </div> </div> <div class="row"> <div class="col-lg-12"> <button type="button">comentario(s)</button> </div> </div> <div class="row"> <div class="col-lg-12"> <a> <img src="media/details/cross.png" title="eliminar esta imagen ?" class="button"> </a> </div> </div> </div> </div> <?php } } ?> </div> </div> </div> </div> </div> </div> <?php } ?> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>
hola Jordane45,
Por una razón que desconozco, tu última respuesta no ha desencadenado notificaciones de mi parte.
Así que he seguido tu consejo creando un nuevo post para mi nuevo problema sin saber que me ofrecías una solución aquí... así que lamento el "duplicado".
Dicho esto, la solución que me propones me hace retroceder a mi primer problema... estoy probando modificaciones para corregir eso, ya que es cierto que el código proporcionado aquí parece más optimizado y legible que la solución que recuperé de mi último post duplicado.
Desafortunadamente, sin erradicar de nuevo mi primer problema no puedo asegurarme de que el segundo esté corregido.
Les mantendré informados aquí si encuentro una solución.
Que tengan un buen día.
EDIT: acabo de entender tus modificaciones, de hecho los 2 problemas se resuelven en lo que respecta a la carga de imágenes sin modificar tu código. Hice mis pruebas actualizando la página sin cargar (por eso pensaba que tenía de nuevo el primer problema). También era algo que deseaba, pero que finalmente no resulta esencial.
Por una razón que desconozco, tu última respuesta no ha desencadenado notificaciones de mi parte.
Así que he seguido tu consejo creando un nuevo post para mi nuevo problema sin saber que me ofrecías una solución aquí... así que lamento el "duplicado".
Dicho esto, la solución que me propones me hace retroceder a mi primer problema... estoy probando modificaciones para corregir eso, ya que es cierto que el código proporcionado aquí parece más optimizado y legible que la solución que recuperé de mi último post duplicado.
Desafortunadamente, sin erradicar de nuevo mi primer problema no puedo asegurarme de que el segundo esté corregido.
Les mantendré informados aquí si encuentro una solución.
Que tengan un buen día.
EDIT: acabo de entender tus modificaciones, de hecho los 2 problemas se resuelven en lo que respecta a la carga de imágenes sin modificar tu código. Hice mis pruebas actualizando la página sin cargar (por eso pensaba que tenía de nuevo el primer problema). También era algo que deseaba, pero que finalmente no resulta esencial.
de hecho, no se trata de un bug... mi código funciona muy bien.
Pero incluso después de numerosas búsquedas en internet y en foros dedicados, no consigo encontrar el zapato que me adapte.
(Te aseguro que el paso "hacer mi pregunta en CCM" llega solo después de "depuradores" y "búsqueda en internet" y "pedir a un amigo", empecé a programar en php hace 3 días pero tengo 5 años de experiencia de codificación detrás de mí.)
No solo se trata de depuración... sino también de recuperación adecuada de las variables... de activación de los errores de PHP... del desglose del código...
Pero visiblemente no lo has leído...
Inténtalo de nuevo... verás que ayuda bastante...
Luego muéstranos tu código completo y modificado...
Mostrar las variables es depuración a mis ojos si no está destinado a quedarse.
Y ya he activado la visualización de errores de PHP, al igual que de SQL, por cierto.
Estimo que mi código es bastante legible, pero si no es el caso, estoy abierto a consejos o críticas.
¿Pero quizás deseas que deje mis depuraciones cuando publique en el foro? ¿Por lo general, elimino todo por miedo a sobrecargar el código y a abrumarles con lo que no es esencial?