Activation des erreur PDO
Résolu
flo39400
Messages postés
596
Date d'inscription
Statut
Membre
Dernière intervention
-
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
flo39400 Messages postés 596 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je viens d'activé les erreur PDO mais la je bloque je sais pas pourquoi sa bloque la dessus.
Merci d'avance de votre réponse.
Code afficher: Fatal error: Cannot use object of type stdClass as array in C:\wamp64\www\2017\index.php on line 17
Donc surement la variable $statut['statut_ip'] donc voila le ficher qui définie celle-ci:
Je viens d'activé les erreur PDO mais la je bloque je sais pas pourquoi sa bloque la dessus.
Merci d'avance de votre réponse.
<?php include("CObdd.php"); include_once('cookieconnect.php'); include('/ban_site/bann_ip.php'); $message_site = $bdd->query("SELECT * FROM site WHERE id = 1"); $mess = $message_site->fetch(); ?> <!DOCTYPE html> <html> <head> <title>Bienvenue <?php if(!empty($_SESSION['id'])) { echo $_SESSION['pseudo']; } else {?> uttilisateur <?php } ?></title> <link rel="stylesheet" type="text/css" href="style.css"> <meta charset="utf-8"> </head> <?php if($statut['statut_ip'] == 1) { include("menu.php"); ?> <body> <header class="message"> <h1><?= $mess['sujet'] ?></h1> </header> <?php include('baspage.php'); ?> <?php } else { ?> <p align="center"><br/><br/>L'adresse <a href="https://fr.wikipedia.org/wiki/Adresse_IP" rel="nofollow noopener noreferrer" target="_blank">IP</a> de votre <a href="https://fr.wikipedia.org/wiki/Fournisseur_d%27acc%C3%A8s_%C3%A0_Internet" rel="nofollow noopener noreferrer" target="_blank">FAI</a> a était bloquer,<br/> a cause d'un problème grave contre notre site internet.<br/><br/><br/> Si cela vous semble être une erreur veuilliez contacter l'administrateur a cette adresse:<br/> <a href="mailto:?to=xxxxx@gmail.com" rel="nofollow noopener noreferrer" target="_blank" />xxxxx@gmail.com</a></p> <?php } ?> </body> </html>
Code afficher: Fatal error: Cannot use object of type stdClass as array in C:\wamp64\www\2017\index.php on line 17
Donc surement la variable $statut['statut_ip'] donc voila le ficher qui définie celle-ci:
<?php $user_ip = $_SERVER['REMOTE_ADDR']; $req_ip_exist = $bdd->prepare('SELECT * FROM bann_ip WHERE uttilisateur_ip = ?'); $req_ip_exist->execute(array($user_ip)); $ip_existe = $req_ip_exist->rowCount(); if($ip_existe == 0) { $add_ip = $bdd->prepare('INSERT INTO bann_ip(uttilisateur_ip, date_time_co) VALUES(?, NOW())'); $add_ip->execute(array($user_ip)); } else { $update_ip = $bdd->prepare('UPDATE bann_ip SET date_time_co = NOW() WHERE uttilisateur_ip = ?'); $update_ip->execute(array($_SERVER['REMOTE_ADDR'])); } $req_statut = $bdd->prepare('SELECT statut_ip FROM bann_ip WHERE uttilisateur_ip = ?'); $req_statut->execute(array($user_ip)); $statut = $req_statut->fetch(); /* if($statut['statut_ip'] == 1) { echo "Adresse IP normal"; } else { echo "Votre IP est banni ! Contacter l'administrateur !"; } */ ?>
A voir également:
- Activation des erreur PDO
- Clé d'activation windows 10 - Guide
- Clé activation office 2010 gratuit - Télécharger - Sécurité
- Mas activation - Accueil - Windows
- Activation office - Accueil - Bureautique
- Telecharger windows 10 gratuit avec clé d'activation - Accueil - Mise à jour
6 réponses
D'après ce que je voie je me dit que l'erreur viens de la:
$req_statut = $bdd->prepare('SELECT statut_ip FROM bann_ip WHERE uttilisateur_ip = ?'); $req_statut->execute(array($user_ip)); $statut = $req_statut->fetch();
Try/Catch ? J'ai jamais utiliser ça.
J'ai utiliser rowCount() car sur les tuto que je regarde il l’utilise voila pourquoi vu que le code fonctionner je me suis dit super ça marche.
Alors j'ai mis pleins de truc comme ça partout...
La galère alors...
CObdd.php donc la je me connecte a ma base de données.
J'ai utiliser rowCount() car sur les tuto que je regarde il l’utilise voila pourquoi vu que le code fonctionner je me suis dit super ça marche.
Alors j'ai mis pleins de truc comme ça partout...
La galère alors...
CObdd.php donc la je me connecte a ma base de données.
<?php session_start(); try{ $bdd = new PDO('mysql:host=127.0.0.1;dbname=ma_base_news; charset=utf8', 'root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
J'ai utiliser rowCount() car sur les tuto que je regarde il l’utilise voila pourquoi vu que le code fonctionner je me suis dit super ça marche.
Alors j'ai mis pleins de truc comme ça partout...
... dans ta question précédente... (que nous venons de traiter....) il était déjà question de ça.
https://forums.commentcamarche.net/forum/affich-34010808-compte-le-nombre-de-commentaire#1
Ce n'est pas parce-que certaines personnes ne savent pas lire le manuel PHP et marquent n'importe quoi dans leurs pseudo tutos qu'il faut bêtement faire les mêmes erreurs....
Try/Catch ? J'ai jamais utiliser ça.
C'est dans le lien sur l'activation des erreurs PDO que je t'ai donné...
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
et puis... si il y a quelque chose que tu ne sais pas faire (ou ne comprend pas).. tu as la possibilité de trouver les infos dans le manuel php :
Par exemple : http://php.net/manual/fr/language.exceptions.php
Vu qu'on en est aux bonnes pratiques.... un bloc IF / ELSE .. la norme PSR2 propose de l'écrire comme ceci :
if(condition){ //action si vrai }else{ //action si faux }
Ce n'est pas une obligation bien sûr... mais je trouve ça plus lisible...
Lien vers la norme PS2 : https://www.php-fig.org/psr/psr-2/
J'arrive a utiliser if et else.
Mais je les écrit souvent comme ça:
Après si vous me dites que sais mieux de faire comme ça bas je le ferrai.
Donc TRY/CATCH sert a traquer les erreur dans le code.
Si un des bloque pose problème ça m'indiquera un message associé, comme ça je saurai d’où vient l'erreur directement .
Mais je les écrit souvent comme ça:
if(condition) { // action si vrai } else { //action si faux }
Après si vous me dites que sais mieux de faire comme ça bas je le ferrai.
Donc TRY/CATCH sert a traquer les erreur dans le code.
Si un des bloque pose problème ça m'indiquera un message associé, comme ça je saurai d’où vient l'erreur directement .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Donc si j'ai bien compris le rowCount() je le remplace par fetchColumn() et avant je met un query(SELECT COUNT(*)
par exemple.
Tu peux aussi faire un fetchAll
puis faire un COUNT dessus
par exemple :
Tu peux aussi faire un fetchAll
puis faire un COUNT dessus
par exemple :
$sql = "SELECT * FROM tatable WHERE tesconditions.."; try{ $prep = $bdd->prepare($sql); $prep->execute(); }catch(Exception $e){ echo "Erreur : ".$e->getMessage(); } $result = $prep->fetchAll(); $nbRows = count($result);
Merci pour tous cela, mais je doit me documenté sur l’utilisation des prepare, query et les requêtes associé car je sais pas quand les utiliser.
Et aussi savoir quand utiliser fetch, fetchAll, fetchColumn(), execute,.....
Car vraiment c'est handicapent de devoir a chaque fois demander de l'aide et comme sais compliquer de trouver des choses a jours.
Le manuel Php le problème sais que je comprend pas les exemple données donc je suis souvent a la rue :/
Et aussi savoir quand utiliser fetch, fetchAll, fetchColumn(), execute,.....
Car vraiment c'est handicapent de devoir a chaque fois demander de l'aide et comme sais compliquer de trouver des choses a jours.
Le manuel Php le problème sais que je comprend pas les exemple données donc je suis souvent a la rue :/
Bonjour, voila je viens de travailler sur mon code voici les modifications apporter:
<?php $user_ip = $_SERVER['REMOTE_ADDR']; $sql1 = "SELECT * FROM bann_ip WHERE uttilisateur_ip = ?"; try{ $prep1 = $bdd->prepare($sql1); $prep1->execute(array($user_ip)); }catch(Exception $e1){ echo "Erreur : ".$e1->getMessage(); } $result1 = $prep1->fetchAll(); $ip_existe = count($result1); if($ip_existe == 0) { $sql2 = "INSERT INTO bann_ip(uttilisateur_ip, date_time_co) VALUES(?, NOW())"; try{ $prep2 = $bdd->prepare($sql2); $prep2->execute(array($user_ip)); }catch(Exception $e2){ echo "Erreur : ".$e2->getMessage(); } } else { $update_ip = "UPDATE bann_ip SET date_time_co = NOW() WHERE uttilisateur_ip = ?"; try{ $update_ip_prep = $bdd->prepare($update_ip); $update_ip_prep->execute(array($_SERVER['REMOTE_ADDR'])); }catch(Exception $e3){ echo "Erreur : ".$e3->getMessage(); } } $req_statut = "SELECT statut_ip FROM bann_ip WHERE uttilisateur_ip = ?"; try{ $prep_req_statut = $bdd->prepare($req_statut); $prep_req_statut->execute(array($user_ip)); }catch(Exception $e4){ echo "Erreur : ".$e4->getMessage(); } $statut = $prep_req_statut->fetch(); ?>
A ok merci, euh sais bon j'ai trouvé le problème ça vient de fetch, la je suis trop contant car j'ai trouvé en cherchant tout seul :D
Donc faut ajouter ça: PDO::FETCH_ASSOC a la méthode fetch je sais pas ce que sais mais ça fonctionne mieux car pu de message d'erreur.
<?php $user_ip = $_SERVER['REMOTE_ADDR']; $sql1 = "SELECT * FROM bann_ip WHERE uttilisateur_ip = ?"; try{ $prep1 = $bdd->prepare($sql1); $prep1->execute(array($user_ip)); }catch(Exception $e1){ echo "Erreur : ".$e1->getMessage(); } $result1 = $prep1->fetchAll(); $ip_existe = count($result1); if($ip_existe == 0) { $sql2 = "INSERT INTO bann_ip(uttilisateur_ip, date_time_co) VALUES(?, NOW())"; try{ $prep2 = $bdd->prepare($sql2); $prep2->execute(array($user_ip)); }catch(Exception $e2){ echo "Erreur : ".$e2->getMessage(); } } else { $update_ip = "UPDATE bann_ip SET date_time_co = NOW() WHERE uttilisateur_ip = ?"; try{ $update_ip_prep = $bdd->prepare($update_ip); $update_ip_prep->execute(array($_SERVER['REMOTE_ADDR'])); }catch(Exception $e3){ echo "Erreur : ".$e3->getMessage(); } } $req_statut = "SELECT statut_ip FROM bann_ip WHERE uttilisateur_ip = ?"; try{ $prep_req_statut = $bdd->prepare($req_statut); $prep_req_statut->execute(array($user_ip)); }catch(Exception $e4){ echo "Erreur : ".$e4->getMessage(); } $statut = $prep_req_statut->fetch(PDO::FETCH_ASSOC); ?>
Donc faut ajouter ça: PDO::FETCH_ASSOC a la méthode fetch je sais pas ce que sais mais ça fonctionne mieux car pu de message d'erreur.
Pour info:
PDO::FETCH_BOTH (mode par défaut) équivaut à mysql_fetch_array : chaque valeur d'une ligne est présente deux fois sous deux clés différentes : le nom de la colonne correspondante et son index dans le jeu de résultat (0 pour la première, 1 pour la seconde, etc)
PDO::FETCH_ASSOC équivaut à mysql_fetch_assoc : chaque valeur d'une ligne n'est présente qu'une fois via le nom de la colonne correspondante
PDO::FETCH_NUM équivaut à mysql_fetch_row : les valeurs d'une ligne ne sont que numériquement indexées
PDO::FETCH_BOTH (mode par défaut) équivaut à mysql_fetch_array : chaque valeur d'une ligne est présente deux fois sous deux clés différentes : le nom de la colonne correspondante et son index dans le jeu de résultat (0 pour la première, 1 pour la seconde, etc)
PDO::FETCH_ASSOC équivaut à mysql_fetch_assoc : chaque valeur d'une ligne n'est présente qu'une fois via le nom de la colonne correspondante
PDO::FETCH_NUM équivaut à mysql_fetch_row : les valeurs d'une ligne ne sont que numériquement indexées