8768 sujets

Développement web côté serveur, CMS

Bonjour, je viens à vous car j'ai un petit problème et avec toute mes recherches je n'ai rien trouvé pour pouvoir résoudre mon problème ou du moins l'implémenter à mon code. J'ai réalisé un tableau avec pour objectif de récupérer mes données de ma base de données et de les affichés dans mon tableau selon leur section et j'ai essayé de mettre en place une pagination sauf que j'ai une erreur :

Fatal error: Call to a member function fetch() on boolean in C:\wamp64\www\Jeux\index.php on line 54


??Voici mon code entier :

Code à la connexion de la base de donnée :

<?php

$username = "root";
$password = "";
$hostname = "localhost";
$namebase = "jeux";
// on tente la connexion à la base de donnée
try
{
    $db = new PDO('mysql:host='.$hostname.';dbname='.$namebase.'', $username, $password);
}
catch (Exception $e)
{
    // En cas d'erreur, on affiche un message et on arrête tout
    die('Erreur : ' . $e->getMessage());
}
// Si tout va bien, on peut continuer
echo "la connexion a reussie.";


?>



Mon script :

<?php
if(isset($_GET['pp']) && !empty($_GET['pp']) && ctype_digit($_GET['pp']) == 1){
    $page = $_GET['pp'];

}else{

    $page = 5;
}

$req = $db->query("SELECT COUNT(*) AS total FROM items_hippique");
$resultat = $req -> fetch();
$total = $resultat['total'];


$nbPage = ceil($total/$page);

echo $nbPage;

if (isset($_GET['p']) && !empty($_GET['p']) && ctype_digit($_GET['p']) == 1){
    if($_GET['p'] > $nbPage){
        $current=$nbPage;
    }else{
        $current=$_GET['p'];
    }
}else{
    $current=1;
}

$page1 = ($current-1)*$page;

$reqItem = $db->query("SELECT * FROM items_hippique ORDER BY id ASC LIMIT $page1, $page");

var_dump($reqItem);
?>




Et voici mon code index.php où j'ai l'erreur à la ligne 54 ainsi j'ai aussi d'autre erreur $reqItem et $current me dit que c'est des variables qui ne sont pas définis alors que j'inclus mes fichiers php.

<?php

include ("connection.php");
include ("script.php");

?>

<meta charset="utf-8">

<!DOCTYPE html>
<html lang="fr">
<head>
    <title>Bootstrap Example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<form method="get">

    <label>Nombre d'item par page:</label>
    <select name="pp">
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
    </select>
    <input type="hidden" name="p" value="<?php echo $current ?>">
    <button class ="btn btn-primary btn-xs" type="submit">Appliquer</button>




</form>
<div class="container">
    <h2>Bordered Table</h2>
    <p>The .table-bordered class adds borders to a table:</p>
    <table class="table table-bordered">
        <thead>
        <tr>
            <th>#</th>
            <th>Article</th>
            <th>Prix</th>
        </tr>
        </thead>
        <tbody>

        <?php

        while ($items = $reqItem->fetch()){
        ?>
        <tr>
            <td> <?php echo $items['nom']; ?></td>
            <td> <?php echo $items['type']; ?></td>
            <td> <?php echo $items['prix']; ?></td>
        </tr>

        <?php
        }
        ?>
        </tbody>
    </table>
</div>

    <ul class="pagination">

        <li> class="<?php if($current == '1'){ echo "disabled"; } ?>" <a href="?p=<?php if($current != '1'){ echo $current-1; }else{ echo $current; }?>&&pp=<?php echo $_GET['pp']; ?>">&laquo;</a> </li>

        <?php
        for ($i=1; $i<=$nbPage; $i++){

            if ($i == $current){
                ?>
                    <li class="active"><a href="?p=<?php echo $i?>&&pp=<?php echo $_GET['pp'];?>"<?php echo $i ?></a></li>
                <?php
            } else {
                ?>
                    <li><a href="?p=<?php echo $i ?>&&pp=<?php echo $_GET['pp'];?>"<?php echo $i ?></a></li>
                <?php
            }
        }
        ?>

        <li> class="<?php if($current == $nbPage){ echo "disabled"; } ?>" <a href="?p=<?php if($current != $nbPage){ echo $current+1; }else{ echo $current; }?>&&pp=<?php echo $_GET['pp'];?>">&raquo;</a> </li>


    </ul>


</body>
</html>




Merci beaucoup de votre aide !!
Bonsoir.

Curieux de mettre des variables dans une requête avec la méthode 'query'... Enfin, si ça marche... Smiley sweatdrop

Je ne peux que vous conseiller d'utiliser les requêtes préparées : la situation est plus claire... et plus sûre.

Cette page pourra peut-être vous aider...

Smiley smile
Salut,
Tu es certain du nom de ta table, de tes champs ? Car si ta requête renvoie false, c'est une erreur de ce type sans doute.
Bonjour, j'ai réglé moi même le problème, du coup j'ai fais des requêtes préparés et cela marche beaucoup mieux, par contre maintenant je m'oppose à un différent problème car maintenant j'ai réussi à afficher une table, mais maintenant je veux paginer tous les items de chaque table exemple : récupérer les item de la table cheval, de la table hippique etc et ensuite les afficher et les paginer tous ce joue au niveau des requêtes il me semble, mais j'ai aucune idée de comment je peux le faire

Voici mon code :

<?php


if (isset($_GET['pp']) && !empty($_GET['pp']) && ctype_digit($_GET['pp']) == 1){
    $page= $_GET['pp'];
}else{
    $page=intval($_GET['pp']);
}

$total = $db->query('SELECT COUNT(*) FROM items_hippique')->fetchColumn();

$nbPage = ceil($total+$total/$page);



if (isset($_GET['p']) && !empty($_GET['p']) && ctype_digit($_GET['p']) == 1){
    if($_GET['p'] > $nbPage){
        $current=$nbPage;
    }else{
        $current=$_GET['p'];
    }
}else{
    $current=1;
}

$page1 = ($current-1)*$page;

try{
    $db = new PDO('mysql:host='.$hostname.';dbname='.$namebase.'', $username, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Échec lors de la connexion : ' . $e->getMessage();
}



$reqItem = $db->prepare("SELECT * FROM items_hippique ORDER BY id_items_hippique ASC LIMIT :start, :count");
$reqItem->bindValue('start', $page1, PDO::PARAM_INT);
$reqItem->bindValue('count', intval($page), PDO::PARAM_INT);
$reqItem->execute();

?>