Page 1 sur 2

Afficher les erreurs ( PDO )

Posté : 03 mai 2013, 16:25
par reverb
Bonjour à tous,
Voici mon problème, j'essaye actuellement de créer une pagination pour une galerie d'image ( php mysql (pdo)) et pour cela j'aurais besoin d'afficher mes erreurs.
Je pense être casiment sur qu'il faut que j'utilise la méthode try {} catch{} ( que je sais utiliser pour une connexion ) mais je ne pense pas l'avoir bien placé dans la situation suivante :
<?php
require_once("connexiondessins.inc.php");
  try
{
$imageparpage=12;
$retour = $bdd->prepare('SELECT COUNT(*) AS nb_images FROM dessins');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
$retour->execute();

$dessins = $retour->fetch(PDO::FETCH_ASSOC);
$totaldesimages = $dessins['nb_images'];
 
$nombredepage  = ceil($totaldesimages/$imageparpage);
echo 'Page : ';
for ($i = 1 ; $i <= $nombredepage ; $i++)
{
    echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
}
if (isset($_GET['page']) && !is_numeric($_GET['page']))
{
        $page = intval($_GET['page']);
}
else
{
        $page = 1;
}
  try
{
$premiereimageafficher = $page* $imageparpage - $imageparpage;

$reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
$reponse->bindValue(':category', 'sps');
$reponse->bindParam(':nbimages', $imageparpage);
$reponse->bindParam(':offset', $premiereimageafficher);
 
$reponse->execute();
?>
<?php while ($dessins = $reponse->fetch()) { ?>
<div class="cat1">
  <?php echo '<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>'; ?>
  <br />
  <?php echo '<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>'; ?>
  <br />
  <a href="selectionsps.php?id=<?php echo htmlspecialchars($dessins['id']); ?>"><img src="images/<?php echo htmlspecialchars($dessins['image']);?>" width="200" height="250" /></a>
</div>

<?php } $reponse->closeCursor(); ?> 
Un petit coup de main ne serais pas de refus :/ je suis perdu.
merci pour votre aide.
Sincèrement.

Re: Afficher les erreurs ( PDO )

Posté : 03 mai 2013, 18:06
par moogli
salut,


ajoute les execute, bind ou query dans les try

et ne met pas de die dans les catch, ils sont la pour récupérer l'excection et te permettre d'afficher correctement l'erreur.

dans ton cas, même si c'est pas super, tu peux très bien mettre un try { en première et le }catch .... après le close cursor.

dès que php rencontre une exception va dans le bloc catch sans exécuter le code après la ligne source d'erreur.

tu trouvera des exemple dans la doc http://php.net/manual/fr/language.exceptions.php, ainsi qu'un peu d'info sur le bloc finally qui sera disponible a partir de php 5.5


@+

Re: Afficher les erreurs ( PDO )

Posté : 03 mai 2013, 18:29
par reverb
Re merci pour ton aide moogli,
Je suis retourné sur le lien que tu ma donné, mais même après avoir corriger, les erreurs ne s'affiche toujours pas :/.
<?php
require_once("connexiondessins.inc.php");
  try
{
$imageparpage=12;
$retour = $bdd->prepare('SELECT COUNT(*) AS nb_images FROM dessins');

$retour->execute();
}
catch (Exception $e)
{
        echo 'Erreur : ',  $e->getMessage();
}
$dessins = $retour->fetch(PDO::FETCH_ASSOC);
$totaldesimages = $dessins['nb_images'];
 
$nombredepage  = ceil($totaldesimages/$imageparpage);
echo 'Page : ';
for ($i = 1 ; $i <= $nombredepage ; $i++)
{
    echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
}
if (isset($_GET['page']) && !is_numeric($_GET['page']))
{
        $page = intval($_GET['page']);
}
else
{
        $page = 1;
}
  try
{
$premiereimageafficher = $page* $imageparpage - $imageparpage;

$reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages');

$reponse->bindValue(':category', 'sps');
$reponse->bindParam(':nbimages', $imageparpage);
$reponse->bindParam(':offset', $premiereimageafficher);

$reponse->execute();
 }
catch (Exception $e)
{
        echo 'Erreur : ',  $e->getMessage();
}
?>
<?php while ($dessins = $reponse->fetch()) { ?>
<div class="cat1">
  <?php echo '<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>'; ?>
  <br />
  <?php echo '<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>'; ?>
  <br />
  <a href="selectionsps.php?id=<?php echo htmlspecialchars($dessins['id']); ?>"><img src="images/<?php echo htmlspecialchars($dessins['image']);?>" width="200" height="250" /></a>
</div>

<?php } $reponse->closeCursor(); ?> 
Merci pour ton attention.
Sincèrement.

Re: Afficher les erreurs ( PDO )

Posté : 03 mai 2013, 19:16
par moogli
Et il y a des erreurs ? ;)

Tu peux essayer ce code
<?php
try {
throw new Exception (' exception test ');
}
catch (Exception $e) {
Echo 'erreur : '. $e->getMessage();
}
@+

Re: Afficher les erreurs ( PDO )

Posté : 04 mai 2013, 13:00
par reverb
Bonjour moogli,
Tu peux essayer ce code
<?php
try {
throw new Exception (' exception test ');
}
catch (Exception $e) {
Echo 'erreur : '. $e->getMessage();
}
Ce code fonctionne !!
une erreur s'affiche effectivement ^^, Merci beaucoup pour ton aide moogli :) .
Sincèrement.

Re: [RESOLU] Afficher les erreurs ( PDO )

Posté : 04 mai 2013, 14:36
par moogli
Donc du coup tu a une version de php qui connais le try catch ;)



Si rien ne s'affiche c'est que tu n'as pas de données ?


@+

Re: [RESOLU] Afficher les erreurs ( PDO )

Posté : 04 mai 2013, 16:32
par reverb
Re,
Pourtant si il y a bien des données ^^, pour te donner la visualisation des données que je souhaite mettre (12 par 12 en pagination) voici mon une page de mon site contenant des les infos : http://crobara2bal.com/politique.php ( de la catégorie selection ) au total il y a 9 catégorie, je travail sur la page (catégorie) sps pour ne pas tout chambouler ^^.

Re: Afficher les erreurs ( PDO )

Posté : 05 mai 2013, 17:36
par moogli
ton code semble fonctionnel.

Perso je ferais plutot ainsi afin de limiter le code utilisé en cas d'erreur
<?php
require_once("connexiondessins.inc.php");
try {
	$imageparpage=12;
	$retour = $bdd->prepare('SELECT COUNT(*) AS nb_images FROM dessins');

	$retour->execute();

	$dessins = $retour->fetch(PDO::FETCH_ASSOC);
	$totaldesimages = $dessins['nb_images'];

	$nombredepage  = ceil($totaldesimages/$imageparpage);
	echo 'Page : ';
	for ($i = 1 ; $i <= $nombredepage ; $i++) {
		echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
	}
	if (isset($_GET['page']) && !is_numeric($_GET['page'])) {
		$page = intval($_GET['page']);
	}
	else {
		$page = 1;
	}

	$premiereimageafficher = $page* $imageparpage - $imageparpage;

	$reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie= :category ORDER BY id DESC LIMIT <img src="http://forum.phpfrance.com/images/smilies/icon_surprised.gif" alt=":o" title="Surprised" />ffset, :nbimages');

	$reponse->bindValue(':category', 'sps');
	$reponse->bindParam(':nbimages', $imageparpage);
	$reponse->bindParam(':offset', $premiereimageafficher);

	$reponse->execute();

	while ($dessins = $reponse->fetch()) {

		echo '<div class="cat1">
		<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>
		<br />
		<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>
		<br /> <a
		href="selectionsps.php?id='.htmlspecialchars($dessins['id']).'">
		<img src="images/'. htmlspecialchars($dessins['image']).' " width="200" height="250" /> </a>
		</div>';

	}
	$reponse->closeCursor();

}
catch (Exception $e) {
	echo 'Erreur : ',  $e->getMessage();
}
@+

Re: Afficher les erreurs ( PDO )

Posté : 05 mai 2013, 19:53
par reverb
re,

Effectivement je pensais aussi au début utiliser try { une seul fois, mais il n'y à aucune erreur qui s'affiche, pourtant mes informations provenant de ma bdd ne s'affiche pas, je pense que s'en ai une :/( d'erreur ^^ ).

Merci pour ton soutien moogli,
Sincèrement.

Re: Afficher les erreurs ( PDO )

Posté : 05 mai 2013, 20:46
par moogli
Ton code semble bon :/


Si tu me donne les structures des tables et un jeux de données minimal je pourrais tester.

Est ce que la barre de navigation s'affiche ? (Le nombre de page et les liens).


@+

Re: Afficher les erreurs ( PDO )

Posté : 06 mai 2013, 16:46
par reverb
Bonjour moogli :),
Est ce que la barre de navigation s'affiche ? (Le nombre de page et les liens).
Oui, voici le lien de la page concerné : http://crobara2bal.com/sps.php?page=1 la pagination s'affiche sous la forme suivante : " Page : 123 ".
Si tu me donne les structures des tables et un jeux de données minimal je pourrais tester.
Voici la structure de ma tables dessins :
Structure de la table `dessins`
--

CREATE TABLE IF NOT EXISTS `dessins` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `categorie` varchar(100) NOT NULL,
  `titre` varchar(100) NOT NULL,
  `image` varchar(100) NOT NULL DEFAULT 'formationspsv.jpg',
  `description` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=119 ;
Concernant le code de ma page, j'ai repéré quelque petite erreur que j'ai corrigé, comme ['nb_images'] qui ne correspondait pas avec la seconde requête ['nbimage']

Voici mon code actuelle :
<?php
require_once("connexiondessins.inc.php");
try {

$retour=$bdd->prepare('SELECT COUNT(*) AS nbimages FROM dessins WHERE categorie="sps"');

$retour->execute();
$imageparpage=12;
$dess=$retour->fetch(PDO::FETCH_ASSOC);
$totaldesimages=$dess['nbimages'];
$nombredepage=ceil($totaldesimages/$imageparpage);

echo 'Page : ';
for ($i=1;$i<= $nombredepage;$i++)
{
    echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
}
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page']>0 && $_GET['page']<= $nombredepage)
{
        $page=intval($_GET['page']);
}
else
{
        $page=1;
}

$premiereimageafficher=$page*$imageparpage-$imageparpage;

$reponse=$bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages');

$reponse->bindValue(':category', 'sps');
$reponse->bindParam(':nbimages', $imageparpage);
$reponse->bindParam(':offset', $premiereimageafficher);

$reponse->execute();

?>
<?php while ($dessins=$reponse->fetch()) { ?>
<div class="cat1">
  <?php echo '<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>'; ?>
  <br />
  <?php echo '<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>'; ?>
  <br />
  <a href="selectionsps.php?id=<?php echo htmlspecialchars($dessins['id']); ?>"><img src="images/<?php echo htmlspecialchars($dessins['image']);?>" width="200" height="250" /></a>
</div>

<?php  
}
        $reponse->closeCursor();

}
catch (Exception $e) {
        echo 'Erreur : ',  $e->getMessage();
} 
?>
Merci pour ton attention et de ton aide.
Sincèrement.

Re: Afficher les erreurs ( PDO )

Posté : 07 mai 2013, 16:25
par reverb
Bonjour,
Pour ma connexion, j'ai rajouter :
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
Ce qui ma déclenché une nouvelle erreur : Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '12'' at line 1

Ma ligne 1 dans ma page de code correspond au <!DOCTYPEHTML> :/ sauf si la ligne 1 correspond à ma premiere ligne de code php, c'est ma : require_one(connexiondessins.ini.php); qui est l'erreur :/.

Voici sa structure actuelle :
<?php
try
{
	$dns = 'mysql:host=localhost;dbname=dbname';
  $utilisateur = 'nomusers';
  $motDePasse = 'mdp';
  $bdd = new PDO( $dns, $utilisateur, $motDePasse, array (PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8',PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
?> 
Merci pour l'aide.
Sincèrement.

Re: Afficher les erreurs ( PDO )

Posté : 08 mai 2013, 15:18
par reverb
Bonjour à tous.
Je pense que l'erreur du coté code pagination suite à ce qu'il m'affiche sur la page : ''0', '12'' au lieu de '0,12' :/ un peu d'aide ne serais pas de refus ^^.
Merci pour votre attention et votre aide.

Re: Afficher les erreurs ( PDO )

Posté : 08 mai 2013, 16:11
par moogli
tu as un problème dû a l'utilisation intempestive des requêtes préparées.

dans ton code tu as
<?php
 $sql = 'SELECT id,categorie,titre,image,description FROM dessins
    WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages';
    $reponse = $bdd->prepare($sql);

    $reponse->bindValue(':category', 'sps');
    $reponse->bindParam(':nbimages', $imageparpage);
    $reponse->bindParam(':offset', $premiereimageafficher);

    $reponse->execute();
or par défaut PDO bind des chaines de caractères donc le bindParam utilise '0' et '12' pour les paramètres de la limite qui n'accepte que des entiers du coup il y a une erreur.

J'ai juste ajouté une ligne dans le catch histoire d'avoir un peu plus d'info. mais le message d'erreur indiqué une erreur SQL.
<?php
 $sql = 'SELECT id,categorie,titre,image,description FROM dessins
    WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages';
    $reponse = $bdd->prepare($sql);

    $reponse->bindValue(':category', 'sps');
    $reponse->bindParam(':nbimages', $imageparpage, \PDO::PARAM_INT);
    $reponse->bindParam(':offset', $premiereimageafficher, \PDO::PARAM_INT);

    $reponse->execute();
tu peux utiliser bindValue pour les 3 paramètres.

pour la première requête utilise query() directement plutôt qu'une requête préparée.

par exemple
<?php
require_once("connexiondessins.inc.php");
try {
    $dns = 'mysql:host=localhost;dbname=test';
    $utilisateur = 'test';
    $motDePasse = 'test';
    $bdd = new PDO($dns, $utilisateur, $motDePasse, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $retour = $bdd->query('SELECT COUNT(*) AS nbimages FROM dessins WHERE categorie="sps"');
    $imageparpage = 12;
    $dess = $retour->fetch(PDO::FETCH_ASSOC);
    $totaldesimages = $dess['nbimages'];
    $nombredepage = ceil($totaldesimages / $imageparpage);

    echo 'Page : ';
    for ($i = 1; $i <= $nombredepage; $i++) {
        echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
    }
    if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nombredepage) {
        $page = intval($_GET['page']);
    } else {
        $page = 1;
    }

    $premiereimageafficher = $page * $imageparpage - $imageparpage;
    $sql = 'SELECT id,categorie,titre,image,description FROM dessins
    WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages';
    $reponse = $bdd->prepare($sql);

    $reponse->bindValue(':category', 'sps');
    $reponse->bindParam(':nbimages', $imageparpage, \PDO::PARAM_INT);
    $reponse->bindParam(':offset', $premiereimageafficher, \PDO::PARAM_INT);

    $reponse->execute();
    while ($dessins = $reponse->fetch()) {
        echo '
        <div class="cat1">
            <span class="classtext1v">' . htmlspecialchars($dessins['categorie']) . '</span>';
        echo '<br/>';
        echo '<span class="classtext2v">' . htmlspecialchars($dessins['titre']) . '</span>';
        echo '<br/>
            <a href="selectionsps.php?id=' . htmlspecialchars($dessins['id']) . '"><img
                    src="images/' . htmlspecialchars($dessins['image']) . '" width="200" height="250"/></a>
        </div>';

    }
    $reponse->closeCursor();

} catch (Exception $e) {
    echo 'Erreur : ', $e->getMessage();
    echo '<br />';
    echo $e->getTraceAsString();
}
?>
 
@+

Re: Afficher les erreurs ( PDO )

Posté : 08 mai 2013, 18:02
par reverb
Moogli comment te dire..., ça fait 3 semaines que je galère là dessus,et la deuxième fois que tu interviens, et me trouve une solution :).
Dommage qu'on ne puisse pas noter les réponses. +1 ^^
Un grand Merci encore une fois !!
Sincèrement.