Pb de récupération de variable de checkbox

paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005 - 10 août 2005 à 10:58
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005 - 10 août 2005 à 14:17
Bonjour,

J'ai créé un formulaire qui affiche un tableau dont chaque ligne correspond à un fournisseur.
Pour une machine donnée, dont je récupère le nom_machine, j'affiche ce formulaire en cochant le fournisseur qui lui est associé (code formulaire_modif_fournisseurmachine.php). Ce formulaire s'affiche correctement.

Par contre, le user peut tout à fait modifier ce "tableau à cocher" et en appuyant sur le bouton 'modifier' faire un update sur la table machine en modifiant le fournisseur associé (code modif_fournisseurmachine.php).

Seulement, je n'arrive pas à récupérer la variable id_fournisseur. j'obtiens Array !
Je ne sais pas comment faire... Pouvez-vous m'aider ?

Merci d'avance et bonne journée

Paulinett'

Voici mon code :

modif_fournisseurmachine.php

<HTML>
<HEAD>
<TITLE> Modification des caractéristiques d'une machine </TITLE>
<LINK REL = stylesheet HREF='film3.css' TYPE='text/css'>
</HEAD>




<!-- Récupération des variables pour l'update fournisseur -->
<?php
// Récupération de variables du formulaire
$nom_machine=$_POST['nom_machine'];
echo $nom_machine;

$id_fournisseur=$_POST['fournisseur'];
echo $id_fournisseur;

?>


Résultat de la mise à jour de votre fournisseur pour la machine <?php echo $nom_machine;?>


//<?php
// On a besoin de ce fichier pour la connexion
require("Connect.php");

// Connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE, $connexion);

// Requete engendrée par la pression du bouton Modifier
if (isSet($_POST['modifier']))
$requete = "UPDATE Machine "
."SET Machine.id_fournisseur=$id_fournisseur"
."WHERE nom_machine='$nom_machine'";

// Exécution de la requête SQL

$resultat = mysql_query($requete,$connexion);
if ($resultat)
echo "<HR> La requête '$requete' a été effectuée.\n";
else
{
echo "La requête n'a pas pu être effectuée pour la raison suivante :"
.mysql_error($connexion);
}

?>


[http://localhost/liste_machine.php">Retour<H2>

</HTML>

formulaire_modif_fournisseurmachine.php

<HTML>
<HEAD>
<TITLE> Formulaire de modification du ou des fournisseurs d'une machine </TITLE>
<LINK REL =stylesheet HREF= 'film3.css' TYPE='text/css'>
</HEAD>




<H1> Formulaire de Modification de lu fournisseur de la machine


<FORM ACTION="modif_fournisseurmachine.php" METHOD=POST>


<!--------------------------------------->
<!-- RECUPERATION DU NOM DE LA MACHINE -->
<!--------------------------------------->


<?php
$nom_machine =$_POST['nom_machine'];

?>



Tous les Fournisseurs disponibles

Les founisseurs de votre machine <?php echo $nom_machine ; ?> sont cochés


<?php
// Appel le fichier connect.php
require_once("Connect.php");

// Connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE, $connexion);

// Ecriture de la 1ere Requete pour sélectionner tous les fournisseurs
$fournisseurs_tous=mysql_query("SELECT id_fournisseur, nom_fournisseur, adresse_fournisseur, codePostal_fournisseur, ville_fournisseur, tel_fournisseur, fax_fournisseur, email_fournisseur, contact_fournisseur FROM Fournisseur",$connexion);

//Ecriture de la 2ème Requete pour sélectionner tous les fournisseurs de la machine
$fournisseurs_machine=mysql_query("SELECT Fournisseur.id_fournisseur FROM Fournisseur, Machine WHERE Machine.nom_machine LIKE '%$nom_machine%'",$connexion);


echo "<CENTER>\"
//.\"<CAPTION ALIGN=bottom>Table Données Principales </CAPTION>\"
.\"----
Nom |AdresseCode Postal |VilleTéléphone |FaxEmail |Contact<TH>Check\n\";

while($machine_fournisseurs =mysql_fetch_object($fournisseurs_machine))
{
while ($tous_fournisseurs= mysql_fetch_object($fournisseurs_tous))
{
if ($machine_fournisseurs->id_fournisseur == $tous_fournisseurs->id_fournisseur)
{
echo '----
'.$tous_fournisseurs->nom_fournisseur.', '
.$tous_fournisseurs->adresse_fournisseur.', '
.$tous_fournisseurs->codePostal_fournisseur.', '
.$tous_fournisseurs->ville_fournisseur.', '
.$tous_fournisseurs->tel_fournisseur.', '
.$tous_fournisseurs->fax_fournisseur.', '
.$tous_fournisseurs->email_fournisseur.', '
.$tous_fournisseurs->contact_fournisseur.', '
.'id_fournisseur.'" CHECKED>, ';
}
else
{
echo '----
'.$tous_fournisseurs->nom_fournisseur.', '
.$tous_fournisseurs->adresse_fournisseur.', '
.$tous_fournisseurs->codePostal_fournisseur.', '
.$tous_fournisseurs->ville_fournisseur.', '
.$tous_fournisseurs->tel_fournisseur.', '
.$tous_fournisseurs->fax_fournisseur.', '
.$tous_fournisseurs->email_fournisseur.', '
.$tous_fournisseurs->contact_fournisseur.', '
.'id_fournisseur.'">, ';
}
}
}
echo "
</CENTER>\n";
?>


<!-- champ caché avec le nom de la machine pour le récupérer pour l'update fournisseur -->
>



<CENTER>Confirmez-vous ce nouveau fournisseur ?
</CENTER>
<CENTER></CENTER>



</FORM>



</HTML>

11 réponses

morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
10 août 2005 à 11:01
POur afficher un tableau
c print_r($tableau); sans les []

et si ca amrche pas
essaie
ca
$id_fournisseur[ ]=$_POST['fournisseur'][ ];
il faut lui dire que tu vuex tout le tableau


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 11:22
merci pour cette réponse rapide (:

déja, dans mon fichier formulaire_modif_fournisseurmachine.php
le nom de ma checkbox doit etre fournisseur[] ou fournisseur ??

ensuite j'ai essayé ta solution $id_fournisseur[ ]=$_POST['fournisseur'][ ]; mais ca ne fonctionne pas...

je ne comprends pas bien...
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
10 août 2005 à 11:26
le nom de ton checkbox doit etre un tableau oui bien sur. as tu essayer egalement le print_r avec ta version.

$id_fournisseur[ ]=$_POST['fournisseur'][ ]; sans les espace entre les [ ] c etait juste pour que ca soit visible sur le site, mais de toute facon ca ne dois pas changer les choses.

autres possibilité
$id_fournisseur[]=$_POST['fournisseur[]']; //mais je doute de celle la lol
$id_fournisseur[]=$_POST['fournisseur']; //peut etre plus probable
je t avoue que je ne suis plus sur et que j ai souvent ce probleme aussi alors je teste tout lol.


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 11:38
print_r ne me donne rien !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
10 août 2005 à 11:40
Et les deux autres facon de faire, avec un print_r toujours apres bien sur, pas de echo vu que le but et d avoir un tableau


<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 11:44
la seule solution pour qu'il n'y ait pas d'erreur c'est
$id_fournisseur[]=$_POST['fournisseur'];
ensuite j'ai fait un print_r et voila ce que ca me donne :
Array ( [0] => Array ( [0] => 2 ) )
je ne comprends pas bien cette info... il y a deux tableaux imbriqués ?
j'ai deux fournisseurs qui sont présents : celui dont l'id est 6 : il n'est pas coché et celui dont l'id est 2 : il est coché...
0
morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
10 août 2005 à 11:49
OUi y a deux tableau donc normalement
$id_fournisseur=$_POST['fournisseur'];
avec un print_r marche alors. et la la reponse veux dire que oui tu as l id 2 de coché uniquement, dans le tableau tu ne vas avoir que les reponse a true ou coché en faite.

<HR>
Loi du plagiat industriel de Felson : <CITE>Voler les idées d'une personne, c'est du plagiat. En voler à plusieurs, c'est de la recherche.</CITE>
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 11:58
le problème c'est que quand je coche mes deux fournisseurs id= 2 pour la premiere ligne et id=6 pour la seconde, ca me donne :
Array( [0] => Array ( [0] => 2 [1] => 2 ) ) !!
normallement si je comprends bien, je devrais avoir 6 en face de [1] =>, non ?

et puis j'ai un deuxième problème (décidément (((:) : c'est avec ma requete :
$requete = "UPDATE Machine "
."SET Machine.id_fournisseur=$id_fournisseur"
."WHERE Machine.nom_machine LIKE '%$nom_machine%'";
il m'annonce un problème avant Machine.nom_machine... je suppose que le SET sur $id_fournisseur ne lui plait pas !

ahlala ((:
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 12:03
alors, j'ai trouvé la réponse à un des deux problèmes :
dans mon code, je ne dois pas déclarer les values des checkbox avec $machine_fournisseurs->id_fournisseur mais avec $tous_fournisseurs->id_fournisseur !!!
logique !!! petite tete cette paulinett'

par contre j'ai toujours mon problème de requete !
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
10 août 2005 à 13:58
t'as pas mis tavariable $id_fournisseur entre ''.

tu dois mettre machine.id_fournisseur='$id_fournisseur'
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 14:17
ok super ! ma requete est prise en compte par contre elle prend un id_fournisseur = 0
en fait j'ai deux lignes :
- la première avec un id fournisseur = 2
- la deuxième avec un id fournisseur = 6

et à chaque fois que je coche une case, il me donne Array([0]=>Array([0]=>2))
et la requete qu'il effectue est :
La requête 'UPDATE Machine SET Machine.id_fournisseur='Array' WHERE Machine.nom_machine LIKE '%barth%'' a été effectuée.

est-ce qu'il ne faudrait pas faire une boucle pour récupérer l'id_fournisseur... je ne sais pas la valeur qu'il prend la : est-ce le 0 de Array([0]=>2) ou le premier 0.
je suis un peu perdue la...
0
Rejoignez-nous