Page 1 sur 2

Récuperation de donnée dans un tableau

Posté : 13 févr. 2008, 12:58
par guigui69
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

Posté : 13 févr. 2008, 14:07
par Truc
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)

Posté : 13 févr. 2008, 15:11
par guigui69
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 ?

Posté : 13 févr. 2008, 15:34
par Truc
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']

Posté : 13 févr. 2008, 16:33
par guigui69
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

Posté : 13 févr. 2008, 17:10
par Truc
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 ?

Posté : 13 févr. 2008, 17:22
par guigui69
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

Posté : 13 févr. 2008, 18:18
par Truc
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
     ...
}

Posté : 14 févr. 2008, 09:38
par guigui69
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

Re: Récuperation de donnée dans un tableau

Posté : 11 mai 2008, 09:26
par valsteken
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]

Posté : 11 mai 2008, 09:34
par d0m
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.

Posté : 11 mai 2008, 10:55
par valsteken
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

Posté : 11 mai 2008, 11:42
par d0m
tout est marqué dans le message d'erreur :
in /home/www/232bd9f90c8befa8003c8decaa6064fe/web/includes/boxes/categories1_css.php on line 98

Posté : 11 mai 2008, 11:45
par valsteken
j'ai bien ce fichier, mais que dois-je faire sur cette ligne ?
voici la ligne 98
foreach ($cat_subs1[$parentID] as $key => $value) {

Posté : 11 mai 2008, 12:13
par FredoMkb
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...

à+ :)