Pb erreur pages blanche !
Profil bloqué
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Voilà le code de ma page internet : pages de message privé le résultat
<?php session_start(); $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', 'xxx'); if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) { if(isset($_POST['envoi_message'])) { if(isset($_POST['destinataire'],$_POST['message'],$_POST['objet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']) AND !empty($_POST['objet'])) { $destinataire = htmlspecialchars($_POST['destinataire']); $message = htmlspecialchars($_POST['message']); $objet = htmlspecialchars($_POST['objet']); $id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?'); $id_destinataire->execute(array($destinataire)); $dest_exist = $id_destinataire->rowCount(); if($dest_exist == 1) { $id_destinataire = $id_destinataire->fetch(); $id_destinataire = $id_destinataire['id']; $ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message,objet) VALUES (?,?,?,?)'); $ins->execute(array($_SESSION['id'],$id_destinataire,$message,$objet)); $error = "Votre message a bien été envoyé !"; } else { $error = "Cet utilisateur n'existe pas..."; } } else { $error = "Veuillez compléter tous les champs"; } } $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo'); if(isset($_GET['r']) AND !empty($_GET['r'])) { $r = htmlspecialchars($_GET['r']); } if(isset($_GET['o']) AND !empty($_GET['o'])) { $o = urldecode($_GET['o']); $o = htmlspecialchars($_GET['o']); if(substr($o,0,3) != 'RE:') { $o = "RE:".$o; } } ?> <!DOCTYPE html> <html> <head> <title>Envoi de message</title> <meta charset="utf-8" /> </head> <body> <form method="POST"> <!-- <select name="destinataire"> <?php while($d = $destinataires->fetch()) { ?> <option><?= $d['pseudo'] ?></option> <?php } ?> </select> --> <label>Destinataire:</label> <input type="text" name="destinataire" <?php if(isset($r)) { echo 'value="'.$r.'"'; } ?> /> <br /><br /> <label>Objet :</label> <input type="text" name="objet" <?php if(isset($o)) { echo 'value="'.$o.'"'; } ?> /> <br /><br /> <textarea placeholder="Votre message" name="message"></textarea> <br /><br /> <input type="submit" value="Envoyer" name="envoi_message" /> <br /><br /> <?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } ?> </form> <br /> <a href="reception.php" rel="nofollow" target="_blank">Boîte de réception</a> </body> </html> <?php } ?>
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Pb erreur pages blanche !
- Supprimer page blanche word - Guide
- Pages blanches espagne - Forum Mobile
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Feuille blanche boîte aux lettres - Guide
2 réponses
Salut,
Vérifie la valeur de $_SESSION['id'] : si celle-ci est vide ou non définie, ta première condition n'est pas validé et donc tout le reste du code n'est pas exécuté, d'où la page blanche.
Plusieurs remarques sur ton code :
- Active le rapport d'erreur de PDO en développement pour voir les éventuelles erreurs sql : https://www.php.net/manual/fr/pdo.error-handling.php
- la fonction empty() permet de tester si la variable existe et n'est pas vide, il n'est donc pas nécessaire de tester avant si la variable existe avec isset(), empty() suffit.
- htmlspecialchars() ne doit pas être utilisée sur les données utilisées dans une requête sql car elle ne protège en rien contre les injections sql. L'utilisation des requêtes préparées suffit pour contrer les injections sql. htmlspecialchars(), comme son nom l'indique, doit être utilisée lors de l'affichage de données dans le document html pour éviter les failles xss.
- rowCount() fonctionne sur les requêtes de type INSERT, UPDATE ou DELETE et n'est pas garantie pour les requête de type SELECT. La solution est de faire une requête SELECT COUNT(*) puis d'utiliser fetchColumn sur le résultat de cette requête comme expliqué ici : https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1065
- Concernant les opérateurs logiques, on recommande d'utiliser && à la place de AND et || à la place de OR à cause de la précédence des opérateurs : https://www.php.net/manual/fr/language.operators.precedence.php
Bonne journée,
Vérifie la valeur de $_SESSION['id'] : si celle-ci est vide ou non définie, ta première condition n'est pas validé et donc tout le reste du code n'est pas exécuté, d'où la page blanche.
Plusieurs remarques sur ton code :
- Active le rapport d'erreur de PDO en développement pour voir les éventuelles erreurs sql : https://www.php.net/manual/fr/pdo.error-handling.php
- la fonction empty() permet de tester si la variable existe et n'est pas vide, il n'est donc pas nécessaire de tester avant si la variable existe avec isset(), empty() suffit.
- htmlspecialchars() ne doit pas être utilisée sur les données utilisées dans une requête sql car elle ne protège en rien contre les injections sql. L'utilisation des requêtes préparées suffit pour contrer les injections sql. htmlspecialchars(), comme son nom l'indique, doit être utilisée lors de l'affichage de données dans le document html pour éviter les failles xss.
- rowCount() fonctionne sur les requêtes de type INSERT, UPDATE ou DELETE et n'est pas garantie pour les requête de type SELECT. La solution est de faire une requête SELECT COUNT(*) puis d'utiliser fetchColumn sur le résultat de cette requête comme expliqué ici : https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1065
- Concernant les opérateurs logiques, on recommande d'utiliser && à la place de AND et || à la place de OR à cause de la précédence des opérateurs : https://www.php.net/manual/fr/language.operators.precedence.php
Bonne journée,
Profil bloqué
Merci beaucoup du temps passé pour me répondre mais je n'ai pas très bien compris pour session id
Bonjour Player,
Il te suffit de faire un print de la variable $_SESSION['id'] pour voir ce qu'elle contient
Par exemple, place ce bout de code au début de ta page ( sous le session_start(); ):
Et pour ce qui est d'activer les erreurs PDO, je t'invite à lire ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
De plus, pense à placer au début de ton script php la ligne suivante :
Afin d'afficher les erreurs PHP de ta page.
Pour le reste... je valide la réponse de Pitet (A qui je passe un petit bonjour au passage :-) )
je n'ai pas très bien compris pour session id
Il te suffit de faire un print de la variable $_SESSION['id'] pour voir ce qu'elle contient
Par exemple, place ce bout de code au début de ta page ( sous le session_start(); ):
//Affiche le contenu de la variable $_SESSION print_r($_SESSION);
Et pour ce qui est d'activer les erreurs PDO, je t'invite à lire ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
De plus, pense à placer au début de ton script php la ligne suivante :
error_reporting(E_ALL);
Afin d'afficher les erreurs PHP de ta page.
Pour le reste... je valide la réponse de Pitet (A qui je passe un petit bonjour au passage :-) )