Bonjour,
Voila je rencontre un petit problème avec mon code.

Ce que je fais

je refait l'exemple du tutoriel sur PDO et je galère un peut.

<?php
$pdo = new PDO('mysql:host=localhost;dbname=maBase-de-donne;port=3306', user, password,[
    PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
]);
$error = null;

try{
    if (isset($_POST['nom'],$_POST['prenom'])){
        $query=prepare('UPDATE agents SET nom = :nom, prenom = :prenom WHERE id = :id');
        $query->execute([
            'nom' => $_POST['nom'],
            'prenom' => $_POST['prenom'],
            'id' => $_POST['id']
        ]);
    }
    $query = $pdo->prepare('SELECT * FROM agents WHERE id = :id');
    $query->execute([
        'id'=> $_GET['id']
    ]);
    $agents = $query->fetch();

}catch(PDOException $e){
    $error = $e->getMessage();
}
?>

<?php if($error):?>
    <div class="alert alert-danger"><?= $error ?></div>
<?php else: ?>
<!-- le formulaire-->
<form action="" method="post">
<div class="form-group">
<input type="text" class="form-control" name="nom" value="<?= htmlentities($agents->nom) ?>">
</div>
<div class="form-group">
<input type="text" class="form-control" name="prenom" value="<?= htmlentities($agents->prenom) ?>">
</div>
<button class="btn">sauvegarder</button>
</form>

<?php endif ?>

Ce que je veux

J'aimerais qu'il me parle, car j'ai creu comprendre que si j'avais une erreur elle s'afficherais.
Ou une exception.

Ce que j'obtiens

J'obtien une page blanche avec rien. Alors je devrais obtenir un message.
Et bien sur je ne comprend pas ou je me suis trompé.

Voilà, si quelqu'un à un peut de temps à consacrer à ce qui pour vous est un petit problème et pour moi une montagne à gravir.
Merci.

6 réponses


Soundboy39
Réponse acceptée

Bonjour

"J'obtien une page blanche avec rien. "

Comme çà je dirais que ton script est interrompu par une FATAL ERROR qui ne s'affiche pas parce que l'affichage des erreurs est désactivé (voir ERROR REPORTING), c'est pour cela que tu a une page blanche.

En relisant bien ton code, l'erreur tu trouvera ;)

Salut,

L'erreur est ici $query=prepare, faute de frappe, c'est $query->prepare à la place.

Si tu utilises l'outil intégré à php pour faire tourner un serveur ajoute les option -d error_reporting=1 -d display_errors=1 afin d'afficher les erreurs php dans ton navigateur.

Bonsoir.

@Balsakup: Tu te trompe, ce n'est pas $query->prepare mais $pdo->prepare. :P
Par contre ali13, pour les données postées, tu vérifies pour nom et prenom, jusque là pas de problème, par contre dans la méthode execute tu utilise id sur la variable _POST, sauf que cet index n'existe pas dans le tableau de la variable, je pense que tu voulais utiliser la variable _GET, sauf que tu t'es loupé.

Au passage, tu devrais vérifier que le paramètre id est bien présent et non vide dans l'url, car tout ton script en dépend, penses donc à faire cette vérification en premier avant tout autre code, de plus que tu devrais vérifier si un enregistrement coorrespond bien dans la table de la base de données et faire une redirection dans le cas contraire.

Donc, ton code devrait se présenter comme ceci :

  1. Tu vérifies que le paramètre existe bien dans l'url (cas contraire, redirection)
  2. Tu vérifies sa valeur (qu'elle ne soit donc pas vide)
  3. Tu vérifies si un enregistrement correspond bien
  4. Si aucune correspondance trouvée, tu rediriges l'utilisateur
  5. Dans le cas contraire, tu continues le reste du traitement

Pour les points 1 et 2, tu peux le faire en une seule fois (avec empty).
En code, ça pourrait donner ça :

if (empty($_GET['id'])) {
    header("Location: ...");
}
/** Connexion à la BDD **/
$req = $pdo->prepare('SELECT * FROM agents WHERE id = :id');
$req->execute(['id' => $_GET['id']]);
$agent = $req->fetch();
if (!$agent) {
    header("Location: ...");
}
/** Suite du script **/

Exemple simplifié bien sûr.

ali13
Auteur

Merci pour les réponses.
je vérifie maintenant.

ali13
Auteur

@soundboy39
Je viens de vérifier ces paramètres
error_reporting est fixé sur E_ALL ~ E_strict ~ E_DEPRECATED
J'ai compris que c'était la position par défaut.
Parcontre sur ma config le display_errors était sur off .
Il semble bien que ce soit là l'erreur

Merci bien

ali13
Auteur

Merci à tous.
Chacuns à trouvè mes petites erreurs, fallais il qu'ils remonte et sur la page blanche sans rien difficile de faire quelques chose.
A+