Problème de array_count_values()

Signaler
Messages postés
17
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
11 février 2016
-
greg3487
Messages postés
17
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
11 février 2016
-
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

2 réponses

Messages postés
28057
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 avril 2020
324
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                                                                 
Messages postés
17
Date d'inscription
dimanche 20 septembre 2015
Statut
Membre
Dernière intervention
11 février 2016

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); 

} 
?>