Problème de array_count_values()

Messages postés
17
Date d'inscription
dimanche 20 septembre 2015
Dernière intervention
11 février 2016
- - Dernière réponse : greg3487
Messages postés
17
Date d'inscription
dimanche 20 septembre 2015
Dernière intervention
11 février 2016
- 5 déc. 2015 à 17:42
Bonjour,

je suis en train de me former au php et j'arrive pas a résoudre le problème de se code.

le print_r m'affiche : mysqli_result Object ( [current_field] => 0 [field_count] => 2 [lengths] => [num_rows] => 12 [type] => 0 )

Warning: array_count_values() expects parameter 1 to be array, object given in C:\wamp\www\devoirEMWEB\E_commerce\panier.php on line 55

Warning: Invalid argument supplied for foreach() in C:\wamp\www\devoirEMWEB\E_commerce\panier.php on line 56

Notice: Undefined variable: total in C:\wamp\www\devoirEMWEB\E_commerce\panier.php on line 69

Warning: array_sum() expects parameter 1 to be array, null given in C:\wamp\www\devoirEMWEB\E_commerce\panier.php on line 69

<?php require('inc_connexion.php'); ?> 
<?php require('inc_cookie_utilisateur.php'); ?> 
<?php require('inc_delete_basket.php'); ?> 
<!DOCTYPE html> 
<html> 
<head> 
<?php 
if(isset($_GET['supprimer'])) 
{ 
	$supprimer = $_GET['supprimer'] ; 
	if( $supprimer == 'panier') 
	{ 
		$mysqli->query('DELETE FROM panier WHERE user_id = "'. $web_user_id .'"'); 
		$message = 'Le panier a bien été supprimé';
	
	} 
	else 
	{ 
		$mysqli->query('DELETE FROM panier WHERE user_id = "'. $web_user_id .'" AND product_id = '. $supprimer); 
		$message = 'Le produit a bien été retiré de votre panier'; 
	}
} 
if(isset($_GET['produit_id'])) 
{ 
	$produit_id = $_GET['produit_id']; 
	$result = $mysqli->query('SELECT count(produit_id) FROM panier WHERE produit_id = "' . $produit_id .'"'); 
	$row = $result->fetch_array(); 
	
	if($row[0] <= 0) 
	{ 
		$message = '<p class="error">Le catalogue ne contient pas cette référence. Aucun produit n\'est ajouté a panier.</p>'; 
	} 
	else 
	{ 
		if ($mysqli->query('INSERT INTO panier (user_id, produit_id) VALUES ("'.$web_user_id.'", "'.$produit_id.'")')) 
		{ 
			$message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>'; 
		} 
		else 
		{ 
			$message = '<p class="error">L\'ajout du produit dans le panier n\'est pas effectué.</p>'; 
		} 
	} 
} 
$result = $mysqli->query('SELECT produit_id, quantite FROM panier WHERE user_id = "'. $web_user_id .'"');
print_r($result);
while ($row = $result->fetch_array()) 
{ 
	$produit_id = $row['produit_id']; 
	$qantite = $row['quantite']; 
	//$panier_user[$panier_id] = $produit_id; 
} 
if(!empty($produit_id)) 
{ 
	$nombre_article = array_count_values($result); 
	foreach($nombre_article as $produit_id => $nombre) 
	{ 
		
		$result = $mysqli->query('SELECT Article_nom, Article_prix FROM boutique WHERE produit_id = '. $produit_id);
		$row = $result->fetch_array(); 
		$produit_nom = $row['Article_nom']; 
		$produit_prix = $row['Article_prix']; 
		$produits[$produit_id]['nom'] = $produit_nom; 
		$produits[$produit_id]['prix'] = $produit_prix; 
		$produits[$produit_id]['nombre'] = $nombre; 
		$produits[$produit_id]['sous_total'] = $nombre * $row['produit_price']; 
		$total[] = $nombre * $row['produit_prix'] ; 
	} 
	$prix_total = array_sum($total); 
} 
?> 


merci par avance
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
23619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2018
1
Merci
Bonjour,

Ton print devrait se trouver dans le while...

$result = $mysqli->query('SELECT produit_id, quantite FROM panier WHERE user_id = "'. $web_user_id .'"');

while ($row = $result->fetch_array()) 
{ 
        print_r($row );
 $produit_id = $row['produit_id']; 
 $qantite = $row['quantite']; 
 //$panier_user[$panier_id] = $produit_id; 
} 



Et pour ce qui est du message d'erreur...; $result ne contient pas un array à proprement parler..(c'est le retour du query... mais pour l'utiliser il faut en faire un fetch ! )

De plus, tu fais des boucles contenant des requêtes... alors qu'il est possible de ne faire qu'une seule requête grâce aux jointures.


En gros.. ton code pourrait devenir :
//préparation de la requête (avec jointure)
$sql = "SELECT  P.produit_id
              , P.quantite 
             , B.Article_nom
             , B.Article_prix     
       FROM panier P 
       LEFT JOIN boutique B ON B.produit_id = P.produit_id
       WHERE P.user_id = '$web_user_id' ";


$result = $mysqli->query($sql);
 if (!$result) { //en cas d'erreur
  printf("Message d'erreur : %s\n", $mysqli->error);
 }

//Initialisation des variables de retour
$total = array();
$produits = array();

while ($row = $result->fetch_array()) { 
   //-----------------------------------------------------//
   $produit_id = $row['produit_id']; 
   $qantite = $row['quantite']; 
   $produit_nom = $row['Article_nom']; 
   $produit_prix = $row['Article_prix']; 
   //-----------------------------------------------------//
   $produits[$produit_id]['nom'] = $produit_nom; 
   $produits[$produit_id]['prix'] = $produit_prix; 
   $produits[$produit_id]['nombre'] = $qantite; 
   $produits[$produit_id]['sous_total'] = $qantite * $produit_prix ; 
   $total[] = $qantite * $produit_prix ; 
   //-----------------------------------------------------//
} 

  print_r($produits); //le temps des tests
  $prix_total = array_sum($total); 





Cordialement, 
Jordane                                                                 

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de jordane45
Messages postés
17
Date d'inscription
dimanche 20 septembre 2015
Dernière intervention
11 février 2016
0
Merci
en faisant comme du me dit, j'ai cette erreur qui s'affiche :

Fatal error: Call to a member function fetch_array() on a non-object in C:\wamp\www\devoirEMWEB\E_commerce\panier1.php on line 73

<?php require('inc_connexion.php'); ?> 
<?php require('inc_cookie_utilisateur.php'); ?> 
<?php require('inc_delete_basket.php'); ?> 
<!DOCTYPE html> 
<html> 
<head> 
<?php 
if(isset($_GET['supprimer'])) 
{ 
	$supprimer = $_GET['supprimer'] ; 
	if( $supprimer == 'panier') 
	{ 
		$mysqli->query('DELETE FROM panier WHERE user_id = "'. $web_user_id .'"'); 
		$message = 'Le panier a bien été supprimé';
	
	} 
	else 
	{ 
		$mysqli->query('DELETE FROM panier WHERE user_id = "'. $web_user_id .'" AND product_id = '. $supprimer); 
		$message = 'Le produit a bien été retiré de votre panier'; 
	}
} 
if(isset($_GET['produit_id'])) 
{ 
	$produit_id = $_GET['produit_id']; 
	$result = $mysqli->query('SELECT count(produit_id) FROM panier WHERE produit_id = "' . $produit_id .'"'); 
	$row = $result->fetch_array(); 
	
	if($row[0] <= 0) 
	{ 
		$message = '<p class="error">Le catalogue ne contient pas cette référence. Aucun produit n\'est ajouté a panier.</p>'; 
	} 
	else 
	{ 
		if ($mysqli->query('INSERT INTO panier (user_id, produit_id) VALUES ("'.$web_user_id.'", "'.$produit_id.'")')) 
		{ 
			$message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>'; 
		} 
		else 
		{ 
			$message = '<p class="error">L\'ajout du produit dans le panier n\'est pas effectué.</p>'; 
		} 
	} 
} 
$result = $mysqli->query('SELECT produit_id, quantite FROM panier WHERE user_id = "'. $web_user_id .'"');
print_r($result);
while ($row = $result->fetch_array()) 
{ 
	$produit_id = $row['produit_id']; 
	$qantite = $row['quantite']; 
	//$panier_user[$panier_id] = $produit_id; 
} 
if(!empty($produit_id)) 
{ 
	$sql = "SELECT  P.produit_id
              , P.quantite 
             , B.Article_nom
             , B.Article_prix     
       FROM panier P 
       LEFT JOIN boutique B ON B.produit_id = P.produit_id
       WHERE P.user_id = '$web_user_id' ";


$result = $mysqli->query($sql);
 if (!$result) { //en cas d'erreur
  printf("Message d'erreur : %s\n", $mysqli->error);
 }

//Initialisation des variables de retour
$total = array();
$produits = array();

while ($row = $result->fetch_array()) { 
   //-----------------------------------------------------//
   $produit_id = $row['produit_id']; 
   $qantite = $row['quantite']; 
   $produit_nom = $row['Article_nom']; 
   $produit_prix = $row['Article_prix']; 
   //-----------------------------------------------------//
   $produits[$produit_id]['nom'] = $produit_nom; 
   $produits[$produit_id]['prix'] = $produit_prix; 
   $produits[$produit_id]['nombre'] = $qantite; 
   $produits[$produit_id]['sous_total'] = $qantite * $produit_prix ; 
   $total[] = $qantite * $produit_prix ; 
   //-----------------------------------------------------//
} 

  print_r($produits); //le temps des tests
  $prix_total = array_sum($total); 

} 
?>
Commenter la réponse de greg3487

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.