Activation des erreur PDO

Résolu/Fermé
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - Modifié par flo39400 le 19/10/2016 à 15:19
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 20 oct. 2016 à 15:50
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.

<?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:

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 oct. 2016 à 15:25
Plusieurs choses :

Que contient ton fichier include("CObdd.php"); ?

Pense aussi à ajouter les bloc TRY/CATCH à chaque requête

et surtout .....

N'utilise pas rowCount()

--
Cordialement, 
Jordane                                                                 
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
19 oct. 2016 à 15:31
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();
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 oct. 2016 à 15:34
sûrement...
Mais tu n'as pas répondu (pris en compte) mes autres questions/remarques ...
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
19 oct. 2016 à 15:38
Si mais j'ai répondu avant de voir votre réponse... désolé :/
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié par flo39400 le 19/10/2016 à 15:36
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.

<?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());
}

?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 oct. 2016 à 15:43

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/
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié par flo39400 le 19/10/2016 à 16:17
J'arrive a utiliser if et else.
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 .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
19 oct. 2016 à 15:44
Donc si j'ai bien compris le rowCount() je le remplace par fetchColumn() et avant je met un query(SELECT COUNT(*)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 oct. 2016 à 15:48
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);


0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
19 oct. 2016 à 16:08
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 :/
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 oct. 2016 à 14:40
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();
?>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
20 oct. 2016 à 15:02
tu n'es pas obligé de modifier le nom des variable $e dans les catch.
Tu peux laisser tout le temps le même ce n'est pas un souci.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 oct. 2016 à 15:07
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

<?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.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 oct. 2016 à 15:16
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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021
20 oct. 2016 à 15:25
Il suffisait de le modifier ici (dans la connexion à ta BDD)
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ)

par :
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC)
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
20 oct. 2016 à 15:47
je vais tester ça bon je me heurte a un autre problème... :/
0