Récuperation de donnée dans un tableau

Eléphant du PHP | 440 Messages

13 févr. 2008, 12:58

bonjour, je travail sur une page pour mettre a jour ma base de donnée.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title> Réalisation commande fournisseur</title>
<script language="javascript">
function calculTotal(pNum){
document.getElementById('pu_mat_pdr'+pNum).value =  parseFloat(document.getElementById('pu'+pNum).value * document.getElementById('coef_mat_pdr'+pNum).value);
}
</script>
<style type="text/css" title="mes_styles" media="all">

</style>
</head>
<body>
<?php

If (isset($_POST['update']))
{

echo "testazerty";
$values = array();
$update= $POST['enr'];

foreach ($_POST['enr'] as $enr)
{

$values[] = '(' . $nom_m . ', ' . $pu_m . ', ' . $coef_mat_pdr . ', ' .$pu_mat_pdr. ')';

}

}
else
{


$id_four=$_POST['founisseurchoisis'];
//echo $id_four;
$server="*****";
$user="****";
$pass="*****";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base');



$sql = "SELECT nom_m, pu_m, coef_mat_pdr, pu_mat_pdr FROM matiere ORDER BY nom_m;";
    $req = mysql_query($sql) or die('3/Erreur SQL !'.$sql.'<br>'.mysql_error()); 
	
$res = mysql_num_rows($req);

    if($res==0)  
        {
        echo '<font color="red">D&eacute;sol&eacute;, aucune matiere est attribue a ce fournisseur.</font>';
        echo '<INPUT TYPE="BUTTON" VALUE=" Retour "onClick="history.back()">';
		echo '<br>';
		}
		
   else
   {
   //echo $res;
  
   echo '<form name="enr" method="post" id="enr" action="modcoef2.php">';
   echo '<table id="tableau" BORDER=1>';
   //echo '<tr>';
   //echo '<td><u>description du Produit:</u></td><td><u>Prix unitaire:</u></td><td><u>coef_mat_pdr:</u></td><td><u>pu_mat_pdr:</u></td>';
	
   $nb = 0;
   while ( $ligne = mysql_fetch_array( $req ))
   { $nb =$nb+1 
   
   
   ?>
   
	
	<tr>
	<td><?php echo $ligne["nom_m"]; ?></td>
	<td><input type="text" id="pu<?php echo $nb;?>" value="<?php echo $ligne["pu_m"]; ?> " size="9" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" id="coef_mat_pdr<?php echo $nb;?>" value="<?php if ($ligne["coef_mat_pdr"] != null) {echo $ligne["coef_mat_pdr"];} else { echo "0";}; ?> " size="9" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" id="pu_mat_pdr<?php echo $nb;?>" value="<?php if ($ligne["pu_mat_pdr"] != null) {echo $ligne["pu_mat_pdr"];} else { echo "0";}; ?> " size="9" > &euro; </td>
	</tr>
	<?php
	}
	}
	}
	print_r($_POST)
	?>


<input type="submit" id="update" name="update" value="Update" />
</body>
</html>
	
Avant de faire une update dans ma table je voudrait juste voir les enregistrements, le problème c'est que quand je clique sur update il me sort une erreur avec foreach.

Code : Tout sélectionner

Warning: Invalid argument supplied for foreach() in /var/www/prixderevient/v0.1a2/modcoef2.php on line 29
Qu'est est mon erreur ? le foreach est mal placé? me manque il un paramètre une variable ?

Merci d'avance pour votre aide

guigui69

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 févr. 2008, 14:07

Tu as $_POST['enr'] alors que "enr" est le formulaire lui même donc pas de post associé donc erreur.

Tu as également un test d'affichage dans ton code qui devrait montrer les variables POST créées
print_r($_POST)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 440 Messages

13 févr. 2008, 15:11

Merci pour ta réponse,


oui j'ai rajouté ceci

Code : Tout sélectionner

print_r($_POST)
pour voir si il y avait des donnée envoyé.

Au niveau du foreach il faudrait en fait que je le face pointé sur le tableau, non ? (foreach $_post['tableau'] as tableau)

Merci d'avance

guigui69
-----------------------------------------------------------

MAJ:

Est ce que j'ai pris la bonne méthode pour rajouter les donnée dans ma base avec foreach ?
Modifié en dernier par guigui69 le 13 févr. 2008, 15:46, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 févr. 2008, 15:34

oui j'ai rajouté ceci

Code : Tout sélectionner

print_r($_POST)
pour voir si il y avait des donnée envoyé.
Et donc pourquoi ne pas t'en servir pour analyser ?

tu remarqueras que tu n'as pas de de variable $_POST['tableau'] !

Tes champs portent tous un nom différent tu ne peux donc pas récupérer de tel manière.
Il te faut modifier les attributs id de la sorte :
... id="pu[]" ...
sans $nb et avec []

ainsi tu récupères 3 variables $_POST['pu'], $_POST['coef_mat_pdr'] et $_POST['pu_mat_pdr']

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 440 Messages

13 févr. 2008, 16:33

Merci pour ta réponse.

Justement j'avais mis print_r ... pour voir, mais rien n'était envoyer :(

J'ai fait la modification au niveau de mon tableau

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title> Réalisation commande fournisseur</title>
<script language="javascript">
function calculTotal(pNum){
document.getElementById('pu_mat_pdr'+pNum).value =  parseFloat(document.getElementById('pu'+pNum).value * document.getElementById('coef_mat_pdr'+pNum).value);
}
</script>
<style type="text/css" title="mes_styles" media="all">

</style>
</head>
<body>
<?php
$pu_mat_pdr= $_POST['pu_mat_pdr'];
$pu= $_POST['pu'];
$coef_mat_pdr= $_POST['coef_mat_pdr'];
//echo $test2;
If (isset($_POST['update']))
{

echo "testazerty";
$values = array();
//$update= $POST['enr'];

foreach ($_POST['tableau'] as $tableau)
{

$values[] = '(' . $nom_m . ', ' . $pu_m . ', ' . $coef_mat_pdr . ', ' .$pu_mat_pdr. ')';

}

}
else
{


$id_four=$_POST['founisseurchoisis'];
//echo $id_four;
$server="*********";
$user="*********";
$pass="********";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base');



$sql = "SELECT nom_m, pu_m, coef_mat_pdr, pu_mat_pdr FROM matiere WHERE id_matiere_type='2' ORDER BY nom_m;";
    $req = mysql_query($sql) or die('3/Erreur SQL !'.$sql.'<br>'.mysql_error()); 
	
$res = mysql_num_rows($req);

    if($res==0)  
        {
        echo '<font color="red">D&eacute;sol&eacute;, aucune matiere est attribue a ce fournisseur.</font>';
        echo '<INPUT TYPE="BUTTON" VALUE=" Retour "onClick="history.back()">';
		echo '<br>';
		}
		
   else
   {
   //echo $res;
  
   echo '<form name="enr" method="post" id="enr" action="modcoef2.php">';
   echo '<table id="tableau" BORDER=1>';
   //echo '<tr>';
   //echo '<td><u>description du Produit:</u></td><td><u>Prix unitaire:</u></td><td><u>coef_mat_pdr:</u></td><td><u>pu_mat_pdr:</u></td>';
	
   $nb = 0;
   while ( $ligne = mysql_fetch_array( $req ))
   { $nb =$nb+1 
   
   
   ?>
   
	
	<tr>
	<td><input type="text" id="nom_m[]" value="<?php echo $ligne["nom_m"]; ?>" size="60" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" id="pu[]" value="<?php echo $ligne["pu_m"]; ?> " size="9" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" id="coef_mat_pdr[]" value="<?php if ($ligne["coef_mat_pdr"] != null) {echo $ligne["coef_mat_pdr"];} else { echo "0";}; ?> " size="9" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" id="pu_mat_pdr[]" value="<?php if ($ligne["pu_mat_pdr"] != null) {echo $ligne["pu_mat_pdr"];} else { echo "0";}; ?> " size="9" > &euro; </td>
	</tr>
	<?php
	}
	//echo '<input type="submit" id="update" name="update" value="Update" />';
	}
	}
	print_r($_POST)
	?>


<input type="submit" id="update" name="update" value="Update" />
</body>
</html>
	
J'ai toujours une erreur pour foreach.
Si jamais ça fonctionne avec cette solution le problème c'est que ma partie java script ne va plus fonctionner, étant donnée quel utilisait les numéros en $nb.

Merci d'avance pour ton aide.

guigui69

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 févr. 2008, 17:10

Est ce que j'ai pris la bonne méthode pour rajouter les donnée dans ma base avec foreach ?
On va repartir de ça...
Que veux tu faire au juste, tu disposes de quoi ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 440 Messages

13 févr. 2008, 17:22

Alors en fait,

1/ Je récupérer depuis ma base les informations suivante:
code_m, nom_m, pu_m, coef_mat_pdr, pu_mat_pdt

J'affiche les informations récupérées de ma base sous forme de tableau (table).A l'intérieur des colonnes (td) de ce tableau j'ai mis des champs "inputs" pour pouvoir modifier les valeurs.

2/ Je modifie par exemple le prix (pu_m) ou coefficient (coef_mat_pdr), cela me calcul automatiquement le total (pu_m*coef_mat_pdr) dans la case input pu_mat_pdt (grâce au code javascript).

3/ après avoir mise à jour des prix et le coefficient (et donc pas conséquence aussi le pu_mat_pdt) dans ce tableau, je voudrait renvoyer les modifications dans ma base (UPDATE).

Merci pour ton aide

guigui69

-----------------------------------------------------------------------------

MAJ

Je vient de modifier mon code:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title> Réalisation commande fournisseur</title>
<script language="javascript">
function calculTotal(pNum){
document.getElementById('pu_mat_pdr'+pNum).value =  parseFloat(document.getElementById('pu'+pNum).value * document.getElementById('coef_mat_pdr'+pNum).value);
}
</script>
<style type="text/css" title="mes_styles" media="all">

</style>
</head>
<body>
<?php

If (isset($_POST['update']))
{

echo "testazerty";
$values = array();



foreach ($_POST['id'] as $tableau)
{

echo $tableau;
echo '<br>';

}

}
else
{


$id_four=$_POST['founisseurchoisis'];
//echo $id_four;
$server="*******";
$user="*******";
$pass="******";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base');



$sql = "SELECT code_m, nom_m, pu_m, coef_mat_pdr, pu_mat_pdr FROM matiere WHERE id_matiere_type='2' ORDER BY nom_m;";
    $req = mysql_query($sql) or die('3/Erreur SQL !'.$sql.'<br>'.mysql_error()); 
	
$res = mysql_num_rows($req);

    if($res==0)  
        {
        echo '<font color="red">D&eacute;sol&eacute;, aucune matiere est attribue a ce fournisseur.</font>';
        echo '<INPUT TYPE="BUTTON" VALUE=" Retour "onClick="history.back()">';
		echo '<br>';
		}
		
   else
   {
   //echo $res;
  
   echo '<form name="enr" method="post" id="enr" action="modcoef2.php">';
   echo '<table id="tableau" BORDER=1>';
   //echo '<tr>';
   //echo '<td><u>description du Produit:</u></td><td><u>Prix unitaire:</u></td><td><u>coef_mat_pdr:</u></td><td><u>pu_mat_pdr:</u></td>';
	
   $nb = 0;
   while ( $ligne = mysql_fetch_array( $req ))
   { $nb =$nb+1 
   
   
   ?>
   
	
	<tr>
	<td><input type="hidden" name="id[]" id="id<?php echo $nb;?>"					value="<?php echo $ligne["code_m"]; ;?>"></td>
	<td><input type="text" name="nom_m[]" id="nom_m<?php echo $nb;?>" 				value="<?php echo $ligne["nom_m"]; ?>" size="60" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" name="pu[]" id="pu<?php echo $nb;?>" 					value="<?php echo $ligne["pu_m"]; ?> " size="9" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" name="coef_mat_pdr[]" id="coef_mat_pdr<?php echo $nb;?>"	value="<?php if ($ligne["coef_mat_pdr"] != null) {echo $ligne["coef_mat_pdr"];} else { echo "0";}; ?> " size="9" onkeyup="calculTotal(<?php echo $nb;?>)"></td>
	<td><input type="text" name="pu_mat_pdr[]" id="pu_mat_pdr<?php echo $nb;?>"		value="<?php if ($ligne["pu_mat_pdr"] != null) {echo $ligne["pu_mat_pdr"];} else { echo "0";}; ?> " size="9" > &euro; </td>
	</tr>
	<?php
	}

	echo '</form>';
	
	echo '<input type="submit" id="update" name="update" value="Update" />';
	}

	}
	echo '<pre>' . print_r($_POST, true) . '</pre>';
	?>



</body>
</html>
	
Quand je fait update il me sort ceci:
Array
(
    [update] => Update
    [id] => Array
        (
            [0] => 70
            [1] => 62
            [2] => 63
            [3] => 65
            [4] => 66
            [5] => 67
            [6] => 64
            [7] => 68
            [8] => 69
        )

    [nom_m] => Array
        (
            [0] => eau
            [1] => Farine  T65 Sans Fèves Viennoi
            [2] => Farine Crc Vrac Silo Viennoise
            [3] => Farine De Son Micronisé T80
            [4] => Farine Seigle T170
            [5] => Farine T55 Ep
            [6] => Farine Viennoiserie 25 Kg
            [7] => Sel Fin 
            [8] => Sucre 
        )

    [pu] => Array
        (
            [0] => 0.00280 
            [1] => 0.34500 
            [2] => 40.20000 
            [3] => 0.52220 
            [4] => 0.70560 
            [5] => 0.32620 
            [6] => 0.50910 
            [7] => 0.10800 
            [8] => 0.99000 
        )

    [coef_mat_pdr] => Array
        (
            [0] => 0 
            [1] => 0 
            [2] => 0 
            [3] => 0 
            [4] => 0 
            [5] => 0 
            [6] => 0 
            [7] => 0 
            [8] => 0 
        )

    [pu_mat_pdr] => Array
        (
            [0] => 0 
            [1] => 0 
            [2] => 0 
            [3] => 0 
            [4] => 0 
            [5] => 0 
            [6] => 0 
            [7] => 0 
            [8] => 0 
        )

)
Est ce que cela semble bon, si oui est-il possible de faire fusionner ces tableau pour que je puisse après rajouter dans ma base ou bien ce n'est pas recommandé? Ou bien une autre méthode plus simple?

Merci d'avance pour votre aide

guigui69

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 févr. 2008, 18:18

La difficulté que tu rencontres est que tu affiches tous les champs sur la page et lorsque tu valides le formulaire tu ne sais pas quelles données ont été modifiées et donc tu dois toutes les mettre à jour.

Le plus simple est d'effectuer une requête par produit :
foreach ($_POST['id'] as $key => $id)
{ 
     $sql = "UPDATE ... SET  nom_m = '".$_POST['nom_m'][$key]."' WHERE code_m = ".$id;
     //exécution requete
     ...
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 440 Messages

14 févr. 2008, 09:38

Merci pour ton aide je regarde et j'étudie ça, et je ferai un retour (car je pense que j'aurai des questions :) )

Merci

guigui69

Petit nouveau ! | 5 Messages

11 mai 2008, 09:26

Bonjour,
voilà que j'ai une erreur similaire, voir mon site www.ventevin.com
La première erreur est celle-ci Warning: Invalid argument supplied for foreach() in /home/www/232bd9f90c8befa8003c8decaa6064fe/web/includes/boxes/categories1_css.php on line 98
Voilà ce que j'étais en train de faire au moment où ça c'est produit :
J’ai modifié et supprimé certaines catégories
J’ai déplacé des articles/produits d’une catégorie à l’autre, jusqu’à certainement la mauvaise manipulation qui m’a donné cette erreur :
Vous pouvez voir les différents messages en vous connectant sur www.ventevin.com
Depuis, dans l’admin, je n’ai plus rien dans le catalogue.

Warning: Invalid argument supplied for foreach() in /home/www/232bd9f90c8befa8003c8decaa6064fe/web/includes/boxes/categories1_css.php on line 98

Warning: Invalid argument supplied for foreach() in /home/www/232bd9f90c8befa8003c8decaa6064fe/web/includes/boxes/categories9_css.php on line 51

…….

Merci de votre aide

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

d0m
Mammouth du PHP | 1141 Messages

11 mai 2008, 09:34

salut,

l'erreur du foreach vient du fait que la variable sur laquelle tu l'appliques n'est pas un tableau.
Tu as surement un tableau de produit ou catégorie.
Comme ça à la première impression il semblerait que vu que tu n'as pas de catégorie, tu ne crées pas ton tableau et le foreach n'a donc rien à se mettre sous la dent.
Il faut gérer le cas où il n'y a pas de catégorie et donc créer un tableau vide au départ.

Le code PHP de cette ligne pourrait aider à t'en dire plus.

Petit nouveau ! | 5 Messages

11 mai 2008, 10:55

Je suis novice en php, finalement, je ne comprends pas grand chose.
Que dois-je faire exactement, et, dans quel fichier.
Merci de ton aide
Valsteken

d0m
Mammouth du PHP | 1141 Messages

11 mai 2008, 11:42

tout est marqué dans le message d'erreur :
in /home/www/232bd9f90c8befa8003c8decaa6064fe/web/includes/boxes/categories1_css.php on line 98

Petit nouveau ! | 5 Messages

11 mai 2008, 11:45

j'ai bien ce fichier, mais que dois-je faire sur cette ligne ?
voici la ligne 98
foreach ($cat_subs1[$parentID] as $key => $value) {
Valsteken

Eléphant du PHP | 224 Messages

11 mai 2008, 12:13

Bonjour :)

Es-tu sûr que "$cat_subs1[$parentID]" est un tableau de données ?

Fais, juste avant la boucle "foreach" un simple "print_r($cat_subs1[$parentID]);" (sans les guillemets) pour afficher le contenu de cette variable... ensuite on avisera...

à+ :)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)