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

PHP & Base de données Discussion :

Utilisation de array_keys


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 275
    Par défaut Utilisation de array_keys
    Bonjour, je suis entrain d'essayé de créé un panier depuis ma base de donnée, les données sont récupéré mais n'arrive pas a s'affiché sur la page panier et l'erreur qu'il m'affiche c'est : Warning: array_keys() expects parameter 1 to be array, string given in D:\Site\panierPHP\panier.php on line 27. pour moi il récupère l'id 0,1,2,3 etc... non!? et quand je fait un $search_array il me la trouve
    voici le code
    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
    <?php require 'header.php'; ?>
    <div class="checkout">
    	<div class="title">
    		<div class="wrap">
    		<h2 class="first">Shopping Cart</h2>
    		</div>
    	</div>
    	<form method="post" action="panier.php">
    	<div class="table">
    		<div class="wrap">
     
    			<div class="rowtitle">
    				<span class="name">Product name</span>
    				<span class="price">Price</span>
    				<span class="quantity">Quantity</span>
    				<span class="subtotal">Prix avec TVA</span>
    				<span class="action">Actions</span>
    			</div>
     
    			<?php
     
    $search_array = array('premier' => 1, 'second' => 4);
    if (array_key_exists('premier', $search_array)) {
        echo "L'élément 'premier' existe dans le tableau";
    }
     
    			$ids = array_keys($_SESSION['panier']);
    			if(empty($ids)){
    				$products = array();
    			}else{
    				$products = $DB->query('SELECT * FROM accesoires WHERE id IN ('.implode(',',$ids).')');
    			}
    			foreach($products as $product):
    			?>
    			<div class="row">
    				<a href="#" class="img"> <img src="img/<?= $product->id; ?>.jpg" height="53"></a>
    				<span class="name"><?= $product->Articles; ?></span>
    				<span class="price"><?= number_format($product->Prix_site,2,',',' '); ?> €</span>
    				<span class="quantity"><input type="text" name="panier[quantity][<?= $product->id; ?>]" value="<?= $_SESSION['panier'][$product->id]; ?>"></span>
    				<span class="subtotal"><?= number_format($product->Prix_site * 1.196,2,',',' '); ?> €</span>
    				<span class="action">
    					<a href="panier.php?delPanier=<?= $product->id; ?>" class="del"><img src="img/del.png"></a>
    				</span>
    			</div>
    			<?php endforeach; ?>
    			<div class="rowtotal">
    				Grand Total : <span class="total"><?= number_format($panier->total() * 1.196,2,',',' '); ?> € </span>
    			</div>
    			<input type="submit" value="Recalculer">
    		</div>
    	</div>
    	</form>
    </div>
    <?php require 'footer.php'; ?>
    et voici les classe panier
    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
    <?php
    class panier{
     
    	private $DB;
     
    	public function __construct($DB){
    		if(!isset($_SESSION)){
    			session_start();
    		}
    		if(!isset($_SESSION['panier'])){
    			$_SESSION['panier'] = array();
    		}
    		$this->DB = $DB;
     
    		if(isset($_GET['delPanier'])){
    			$this->del($_GET['delPanier']);
    		}
    		if(isset($_POST['panier']['quantity'])){
    			$this->recalc();
    		}
    	}
     
    	public function recalc(){
    		foreach($_SESSION['panier'] as $product_id => $quantity){
    			if(isset($_POST['panier']['quantity'][$product_id])){
    				$_SESSION['panier'][$product_id] = $_POST['panier']['quantity'][$product_id];
    			}
    		}
    	}
     
    	public function count(){
    		return array_sum($_SESSION['panier']);
    	}
     
    	public function total(){
    		$total = 0;
    		$ids = array_keys($_SESSION['panier']);
    		if(empty($ids)){
    			$products = array();
    		}else{
    			$products = $this->DB->query('SELECT id, Prix_site FROM accesoires WHERE id IN ('.implode(',',$ids).')');
    		}
    		foreach( $products as $product ) {
    			$total += $product->Prix_site * $_SESSION['panier'][$product->id];
    		}
    		return $total;
    	}
     
    	public function add($product_id){
    		if(isset($_SESSION['panier'][$product_id])){
    			$_SESSION['panier'][$product_id]++;
    		}else{
    			$_SESSION['panier'][$product_id] = 1;
    		}
    	}
     
    	public function del($product_id){
    		unset($_SESSION['panier'][$product_id]);
    	}
     
    }
    si quelqu'un pourait m'expliquer mes erreurs
    merci,

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Ton $_SESSION['panier'] n'est pas un tableau, c'est ce que dit le message d'erreur.
    Fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($_SESSION['panier']);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 275
    Par défaut
    Merci pour ta précision mais a quel niveau je dois le mettre dans le foreach ou après?
    Merci,

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Ni l'un ni l'autre.
    Dans ton premier script, pour voir ce que ta variable contient. Pas dans une fonction.
    Tu n'en es pas à régler le problème, tu en es à le diagnostiquer.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 275
    Par défaut
    Excuse moi je ne vois pas comment le mettre a chaque fois j'ai une erreur.

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Quelle erreur ? Que dit-elle ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 275
    Par défaut
    il m'affiche :
    Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting variable (T_VARIABLE) or '{' or '$' in D:\Site\panierPHP\panier.php on line 29

  8. #8
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Et tu ne me montres pas ton code ligne 29 ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Et tu ne me montres pas ton code ligne 28, 29 et 30 ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 275
    Par défaut
    excuse moi
    voici le code
    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
    <?php require 'header.php'; ?>
    <div class="checkout">
    	<div class="title">
    		<div class="wrap">
    		<h2 class="first">Shopping Cart</h2>
    		</div>
    	</div>
    	<form method="post" action="panier.php">
    	<div class="table">
    		<div class="wrap">
     
    			<div class="rowtitle">
    				<span class="name">Product name</span>
    				<span class="price">Price</span>
    				<span class="quantity">Quantity</span>
    				<span class="subtotal">Prix avec TVA</span>
    				<span class="action">Actions</span>
    			</div>
     
    			<?php
     
    			$ids = array_keys($_SESSION['panier']);
    			if(empty($ids)){
    				$products = array();
    			}else{
    				$products = $DB->query('SELECT * FROM accesoires WHERE id IN ('.implode(',',$ids).')');
    			}
    			foreach($products as $product):$
    				echo '<pre>';
    print_r($_SESSION['panier']);
    echo '</pre>';
    			?>
    			<div class="row">
    				<a href="#" class="img"> <img src="img/<?= $product->id; ?>.jpg" height="53"></a>
    				<span class="name"><?= $product->Articles; ?></span>
    				<span class="price"><?= number_format($product->Prix_site,2,',',' '); ?> €</span>
    				<span class="quantity"><input type="text" name="panier[quantity][<?= $product->id; ?>]" value="<?= $_SESSION['panier'][$product->id]; ?>"></span>
    				<span class="subtotal"><?= number_format($product->Prix_site * 1.196,2,',',' '); ?> €</span>
    				<span class="action">
    					<a href="panier.php?delPanier=<?= $product->id; ?>" class="del"><img src="img/del.png"></a>
    				</span>
    			</div><?php
     
     endforeach; ?>
    			<div class="rowtotal">
    				Grand Total : <span class="total"><?= number_format($panier->total() * 1.196,2,',',' '); ?> € </span>
    			</div>
    			<input type="submit" value="Recalculer">
    		</div>
    	</div>
    	</form>
    </div>
    <?php require 'footer.php'; 
    ?>

  11. #11
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 275
    Par défaut
    j'ai fait un essaie, j'ai plus erreur mais il m'affiche b;0;.
    le souci maintenant c'est toujours array_keys dans le panier.class.php, il s'agit du total des article en nombre et somme, au lieu de m'afficher les totaux, il me signal les erreur suivante :
    pour les totale des article
    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
    <div class="bbcode_container">
    	<div class="bbcode_quote">
    		<div class="quote_container">
    			<div class="bbcode_quote_container"></div>
     
    				Warning: array_sum() expects parameter 1 to be array, string given in D:\Site\panierPHP\panier.class.php on line 32
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0002	406352	{main}( )	...\panier.php:0
    2	0.0002	406664	require( 'D:\Site\panierPHP\header.php' )	...\panier.php:1
    3	0.0255	457464	panier->count( )	...\header.php:22
    pour la somme totale il me dit: 
     1 to be array, string given in D:\Site\panierPHP\panier.class.php on line 37
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0003	406352	{main}( )	...\index.php:0
    2	0.0005	406664	require( 'D:\Site\panierPHP\header.php' )	...\index.php:1
    3	0.0034	458080	panier->total( )	...\header.php:26
    4	0.0034	458080	array_keys ( )	...\panier.class.php:37
     
    		</div>
    	</div>
    </div>
    voici le code:
    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
    <?php
    class panier{
     
    	private $DB;
     
    	public function __construct($DB){
    		if(!isset($_SESSION)){
    			session_start();
    		}
    		if(!isset($_SESSION['panier'])){
    			$_SESSION['panier'] = array();
    		}
    		$this->DB = $DB;
     
    		if(isset($_GET['delPanier'])){
    			$this->del($_GET['delPanier']);
    		}
    		if(isset($_POST['panier']['quantity'])){
    			$this->recalc();
    		}
    	}
     
    	public function recalc(){
    		foreach($_SESSION['panier'] as $product_id => $quantity){
    			if(isset($_POST['panier']['quantity'][$product_id])){
    				$_SESSION['panier'][$product_id] = $_POST['panier']['quantity'][$product_id];
    			}
    		}
    	}
     
    	public function count(){
    		return array_sum($_SESSION['panier']);
    	}
     
    	public function total(){
    		$total = 1;
    		$ids = array_keys($_SESSION['panier']);
    		if(empty($ids)){
    			$products = array();
    		}else{
    			$products = $this->DB->query('SELECT id, Prix_site FROM accesoires WHERE id IN ('.implode(',',$ids).')');
    		}
    		foreach( $products as $product ) {
    			$total += $product->Prix_site * $_SESSION['panier'][$product->id];
    		}
    		return $total;
    	}
     
    	public function add($product_id){
    		if(isset($_SESSION['panier'][$product_id])){
    			$_SESSION['panier'][$product_id]++;
    		}else{
    			$_SESSION['panier'][$product_id] = 1;
    		}
    	}
     
    	public function del($product_id){
    		unset($_SESSION['panier'][$product_id]);
    	}
     
    }

  12. #12
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    j'ai fait un essaie, j'ai plus erreur mais il m'affiche b;0;.
    le souci maintenant c'est toujours array_keys
    Ah bon ?
    Ton $_SESSION['panier'] vaut la chaîne (string) 'b;0;', et tu appelles ça un tableau PHP, et tu continues ?
    Donc non, ton souci n'est pas array_keys, ton souci est bien $_SESSION['panier'] qui n'est pas du tout ce que tu voudrais.
    Reprends chaque méthode avec une vraie variable telle que tu en rêves, un tableau quoi... et regarde ce qu'elle fait. Ne passe pas à une autre tant que tu ne sais pas ce que fait la précédente.

    Ne manipule pas directement $_SESSION['panier'], de toute façon, dans une fonction, tu ne manipules pas des variables d'environnement directs, mais des variables abstraites.
    Et puis, il faut qu'à chaque fois que tu rafraîchis ta page, ta variable revienne au départ de ce qu'elle est, si tu veux pouvoir avancer.

    Donc commence par te faire un script avec un vrai tableau de tableaux associatifs en dur, ça sera plus facile pour tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $panier=array();
     
    $panier[0]['id']=54;
    $panier[0]['Prix_site']=10;
    $panier[1]['id']=635;
    $panier[1]['Prix_site']=20;
    $panier[2]['id']=1800;
    $panier[2]['Prix_site']=30;
     
    echo '<pre>';
    print_r($panier);
    echo '</pre>';
    Et travaille ta classe et chaque méthode à partir de cette variable $panier dans ton script d'appel.
    A chaque étape de transformation de cette variable, vérifie ce qu'elle contient. Après une boucle, quand il y en a une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($panier);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. prblème avec ping
    Par tenderstoune dans le forum Réseau
    Réponses: 1
    Dernier message: 28/04/2008, 13h26
  2. prblème avec GDI32.dll
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 13/11/2007, 20h53
  3. Prblème avec RangeValidator
    Par sami_c dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/02/2007, 11h49
  4. prblème avec INSERT
    Par PAYASS59 dans le forum Requêtes
    Réponses: 8
    Dernier message: 27/04/2006, 14h29
  5. Prblème avec la commande system
    Par AnneOlga dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/03/2004, 16h05

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