IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

bind_result() à la place de get_result() dans une fonction


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut bind_result() à la place de get_result() dans une fonction
    Bonjour,

    Je souhaite utiliser bind_result() à la place de get_result() dans une fonction que j'ai recuperé sur un site ( pour la création d'un panier).
    La fonction marche en local mais sur mon hébergement, y a des message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function getDBResult($query, $params = array())
    {
        $sql_statement = $this->conn->prepare($query);
        if (! empty($params)) {
            $this->bindParams($sql_statement, $params);
        }
       $sql_statement->execute();
        $result = $sql_statement->get_result();      
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $resultset[] = $row;
            }
        }      
        if (! empty($resultset)) {
            return $resultset;
        }
    }
    J'ai essayé de la reecrire mais j'ai toujours une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function getDBResult($query, $params = array())
        {
            $sql_statement = $this->conn->prepare($query);
     
            if (! empty($params)) {
                $this->bindParams($sql_statement, $params);
            }
     
    $sql_statement->execute();
    $resultset = array();
    $sql_statement->bind_result($id, $name, $code, $image, $price ); 
    while ($sql_statement->fetch()) {
                    $resultset[] = = array(
                     'id' => $id,
                    'name' => $name,
                    'code' => $code,
                    'image' => $image,
                    'price' => $price
     
                );
     }
     
    return $resultset;
     
        }
    Quelqu'un peut -il m'aider svp ? Merci d'avance

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Bonsoir,
    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultset[] = = array(
    il y a deux = à la suite. Inattention de copier / coller ou véritable erreur dans le script ?

    De plus, quand un programme donne une erreur, il faut toujours la donner sur le forum ; même si toi tu n’es pas forcément en mesure de comprendre le message, il y aura quelqu’un qui pourra.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonsoir Watilin,

    Merci pour les conseils.
    J'ai repété le == par inattention.

    Voici donc l'erreur affichée

    Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\wamp\www\projet\DBController.php on line 12


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function getDBResult($query, $params = array())
        {
            $sql_statement = $this->conn->prepare($query);
     
            if (! empty($params)) {
                $this->bindParams($sql_statement, $params);
            }
     
    $sql_statement->execute();
    $resultset = array();
    $sql_statement->bind_result($id, $name, $code, $image, $price ); 
    while ($sql_statement->fetch()) {
                    $resultset[] = array(
                     'id' => $id,
                    'name' => $name,
                    'code' => $code,
                    'image' => $image,
                    'price' => $price
     
                );
     }
     
    return $resultset;
     
        }

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Le nombre de variables est inférieur ou supérieur au nombres de colonnes retourné.
    On peux voir la requête sql ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Comme je l'ai dit plus haut, j'ai recupéré le code sur un site pour la création d'un panier que j'essaie d'adapter pour mon projet de panier. Donc je poste tous les codes.

    Le fichier DBController.php contenant les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
     
    class DBController
    {
     
        private $host = "localhost";
     
        private $user = "root";
     
        private $password = "";
     
        private $database = "cart2";
     
        private static $conn;
     
        function __construct()
        {
            $this->conn = mysqli_connect($this->host, $this->user, $this->password, $this->database);
        }
     
        public static function getConnection()
        {
            if (empty($this->conn)) {
                new Database();
            }
        }
     
        function getDBResult($query, $params = array())
        {
            $sql_statement = $this->conn->prepare($query);
            if (! empty($params)) {
                $this->bindParams($sql_statement, $params);
            }
           $sql_statement->execute();
            $result = $sql_statement->get_result();
     
            if ($result->num_rows > 0) {
                while ($row = $result->fetch_assoc()) {
                    $resultset[] = $row;
                }
            }
     
            if (! empty($resultset)) {
                return $resultset;
            }
        }
     
        function updateDB($query, $params = array())
        {
            $sql_statement = $this->conn->prepare($query);
            if (! empty($params)) {
                $this->bindParams($sql_statement, $params);
            }
            $sql_statement->execute();
        }
     
        function bindParams($sql_statement, $params)
        {
            $param_type = "";
            foreach ($params as $query_param) {
                $param_type .= $query_param["param_type"];
            }
     
            $bind_params[] = & $param_type;
            foreach ($params as $k => $query_param) {
                $bind_params[] = & $params[$k]["param_value"];
            }
     
            call_user_func_array(array(
                $sql_statement,
                'bind_param'
            ), $bind_params);
     
        }
    }
    Le fichier ShoppingCart.php contenant les requêtes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    <?php
    require_once "DBController.php";
     
    class ShoppingCart extends DBController
    {
     
        function getAllProduct()
        {
            $query = "SELECT * FROM tbl_product";
     
            $productResult = $this->getDBResult($query);
            return $productResult;
        }
     
        function getMemberCartItem($member_id)
        {
            $query = "SELECT tbl_product.*, tbl_cart.id as cart_id,tbl_cart.quantity FROM tbl_product, tbl_cart WHERE 
                tbl_product.id = tbl_cart.product_id AND tbl_cart.member_id = ?";
     
            $params = array(
                array(
                    "param_type" => "i",
                    "param_value" => $member_id
                )
            );
     
            $cartResult = $this->getDBResult($query, $params);
            return $cartResult;
        }
     
        function getProductByCode($product_code)
        {
            $query = "SELECT * FROM tbl_product WHERE code=?";
     
            $params = array(
                array(
                    "param_type" => "s",
                    "param_value" => $product_code
                )
            );
     
            $productResult = $this->getDBResult($query, $params);
            return $productResult;
        }
     
        function getCartItemByProduct($product_id, $member_id)
        {
            $query = "SELECT * FROM tbl_cart WHERE product_id = ? AND member_id = ?";
     
            $params = array(
                array(
                    "param_type" => "i",
                    "param_value" => $product_id
                ),
                array(
                    "param_type" => "i",
                    "param_value" => $member_id
                )
            );
     
            $cartResult = $this->getDBResult($query, $params);
            return $cartResult;
        }
     
        function addToCart($product_id, $quantity, $member_id)
        {
            $query = "INSERT INTO tbl_cart (product_id,quantity,member_id) VALUES (?, ?, ?)";
     
            $params = array(
                array(
                    "param_type" => "i",
                    "param_value" => $product_id
                ),
                array(
                    "param_type" => "i",
                    "param_value" => $quantity
                ),
                array(
                    "param_type" => "i",
                    "param_value" => $member_id
                )
            );
     
            $this->updateDB($query, $params);
        }
     
        function updateCartQuantity($quantity, $cart_id)
        {
            $query = "UPDATE tbl_cart SET  quantity = ? WHERE id= ?";
     
            $params = array(
                array(
                    "param_type" => "i",
                    "param_value" => $quantity
                ),
                array(
                    "param_type" => "i",
                    "param_value" => $cart_id
                )
            );
     
            $this->updateDB($query, $params);
        }
     
        function deleteCartItem($cart_id)
        {
            $query = "DELETE FROM tbl_cart WHERE id = ?";
     
            $params = array(
                array(
                    "param_type" => "i",
                    "param_value" => $cart_id
                )
            );
     
            $this->updateDB($query, $params);
        }
     
        function emptyCart($member_id)
        {
            $query = "DELETE FROM tbl_cart WHERE member_id = ?";
     
            $params = array(
                array(
                    "param_type" => "i",
                    "param_value" => $member_id
                )
            );
     
            $this->updateDB($query, $params);
        }
    }

    Le fichier index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
     
    <?php
    require_once "ShoppingCart.php";
     
    $member_id = 2; 
     
    $shoppingCart = new ShoppingCart();
    if (! empty($_GET["action"])) {
        switch ($_GET["action"]) {
            case "add":
                if (! empty($_POST["quantity"])) {
     
                    $productResult = $shoppingCart->getProductByCode($_GET["code"]);
     
                    $cartResult = $shoppingCart->getCartItemByProduct($productResult[0]["id"], $member_id);
     
                    if (! empty($cartResult)) {
                        // Update cart item quantity in database
                        $newQuantity = $cartResult[0]["quantity"] + $_POST["quantity"];
                        $shoppingCart->updateCartQuantity($newQuantity, $cartResult[0]["id"]);
                    } else {
                        // Add to cart table
                        $shoppingCart->addToCart($productResult[0]["id"], $_POST["quantity"], $member_id);
                    }
                }
                break;
            case "remove":
                // Delete single entry from the cart
                $shoppingCart->deleteCartItem($_GET["id"]);
                break;
            case "empty":
                // Empty cart
                $shoppingCart->emptyCart($member_id);
                break;
        }
    }
    ?>
    <HTML>
    <HEAD>
    <TITLE>Enriched Responsive Shopping Cart in PHP</TITLE>
    <meta name="viewport" content="width=device-width, initial-scale=1">
     
    <link href="style.css" type="text/css" rel="stylesheet" />
    <script src="jquery-3.2.1.min.js"></script>
    <script>
    function increment_quantity(cart_id, price) {
        var inputQuantityElement = $("#input-quantity-"+cart_id);
        var newQuantity = parseInt($(inputQuantityElement).val())+1;
        var newPrice = newQuantity * price;
        save_to_db(cart_id, newQuantity, newPrice);
    }
     
    function decrement_quantity(cart_id, price) {
        var inputQuantityElement = $("#input-quantity-"+cart_id);
        if($(inputQuantityElement).val() > 1) 
        {
        var newQuantity = parseInt($(inputQuantityElement).val()) - 1;
        var newPrice = newQuantity * price;
        save_to_db(cart_id, newQuantity, newPrice);
        }
    }
     
    function save_to_db(cart_id, new_quantity, newPrice) {
    	var inputQuantityElement = $("#input-quantity-"+cart_id);
    	var priceElement = $("#cart-price-"+cart_id);
        $.ajax({
    		url : "update_cart_quantity.php",
    		data : "cart_id="+cart_id+"&new_quantity="+new_quantity,
    		type : 'post',
    		success : function(response) {
    			$(inputQuantityElement).val(new_quantity);
                $(priceElement).text("$"+newPrice);
                var totalQuantity = 0;
                $("input[id*='input-quantity-']").each(function() {
                    var cart_quantity = $(this).val();
                    totalQuantity = parseInt(totalQuantity) + parseInt(cart_quantity);
                });
                $("#total-quantity").text(totalQuantity);
                var totalItemPrice = 0;
                $("div[id*='cart-price-']").each(function() {
                    var cart_price = $(this).text().replace("$","");
                    totalItemPrice = parseInt(totalItemPrice) + parseInt(cart_price);
                });
                $("#total-price").text(totalItemPrice);
    		}
    	});
    }
    </script>
     
    </HEAD>
    <BODY>
    <?php
    $cartItem = $shoppingCart->getMemberCartItem($member_id);
    $item_quantity = 0;
    $item_price = 0;
    if (! empty($cartItem)) {
        $item_quantity = 0;
        $item_price = 0;
        if (! empty($cartItem)) {
            foreach ($cartItem as $item) {
                $item_quantity = $item_quantity + $item["quantity"];
                $item_price = $item_price + ($item["price"] * $item["quantity"]);
            }
        }
    }
    ?>
        <div id="shopping-cart">
            <div class="txt-heading">
                <div class="txt-heading-label">Shopping Cart</div>
     
                <a id="btnEmpty" href="index.php?action=empty"><img
                    src="empty-cart.png" alt="empty-cart" title="Empty Cart"
                    class="float-right" /></a>
                <div class="cart-status">
                    <div>Total Quantity: <span id="total-quantity"><?php echo @$item_quantity; ?></span></div>
                    <!--<div>Total Price: <span id="total-price"><?php echo @$item_price; ?></span></div>-->
                </div>
            </div>
    <?php
    if (! empty($cartItem)) {
        ?>
    <div class="shopping-cart-table">
                <div class="cart-item-container header">
                    <div class="cart-info title">Title</div>
                    <div class="cart-info">Quantity</div>
                    <div class="cart-info price">Price</div>
                </div>
    <?php
        foreach ($cartItem as $item) {
            ?>
    				<div class="cart-item-container">
                    <div class="cart-info title">
                        <?php echo $item["name"]; ?>
                    </div>
     
                    <div class="cart-info quantity">
                        <div class="btn-increment-decrement" onClick="decrement_quantity(<?php echo $item["cart_id"]; ?>, '<?php echo $item["price"]; ?>')">-</div><input class="input-quantity"
                            id="input-quantity-<?php echo $item["cart_id"]; ?>" value="<?php echo $item["quantity"]; ?>"><div class="btn-increment-decrement"
                            onClick="increment_quantity(<?php echo $item["cart_id"]; ?>, '<?php echo $item["price"]; ?>')">+</div>
                    </div>
     
                    <div class="cart-info price" id="cart-price-<?php echo $item["cart_id"]; ?>">
                            <?php echo "$". ($item["price"] * $item["quantity"]); ?>
                        </div>
     
     
                    <div class="cart-info action">
                        <a
                            href="index.php?action=remove&id=<?php echo $item["cart_id"]; ?>"
                            class="btnRemoveAction"><img
                            src="icon-delete.png" alt="icon-delete"
                            title="Remove Item" /></a>
                    </div>
                </div>
    				<?php
        }
        ?>
    </div>
      <?php
    }
    ?>
    </div>
    <?php require_once "product-list.php"; ?>
     
    </BODY>
    </HTML>
    Merci d'avance.

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Donc voici votre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM tbl_product
    Une requête de ce genre en détermine pas le nombres de colonnes que vous utilisez.
    Il vous faut définir correctement ce dont vous avez besoin et vous aurez l’information de savoir combien de variable vous avez besoin dans votre fonction bind_result()

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai mis modifié la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "SELECT id, name, code, image, price FROM tbl_product WHERE code=?";
    mais j'ai toujours la même erreur

    Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\wamp\www\projet\DBController.php on line 12

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Tout le code est ici.
    Tout marche bien en local mais ya problème quand j'upload sur mon mutu OVH . PHP 5.5

Discussions similaires

  1. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 15h04
  2. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  3. Utilisez MinimizeName() dans une fonction
    Par James_ dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/05/2004, 18h05
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo