Checkbox, tableau, boucle et php

Fermé
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009 - 8 mars 2009 à 16:32
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009 - 10 mars 2009 à 20:10
Bonjour, voilà déjà un long moment que je me casse la tête sur la même chose, et je n'ai pas trouvé réponse à mon problème malgré les forums.
J'ai crée une base de donnée, avec une liste de contacts et bien sûr un ID propre à chacun (en auto incrément).
Cependant comme les gens ont souvent tendance à changer de numéro... il faut que je puisse modifier un contact ! Pour simplifier la tâche, je fait déjà une pré-recherche avec le Nom, et j'affiche dans un tableau. Jusque là pas de souci. Mais devant chaque ligne de tableau je veux mettre une checkbox afin de sélectionner LE contact à modifier. Je parviens à mettre en place ces checkboxs mais je ne trouve vraiment pas comment les utiliser, puisque une fois coché, je dois cliquer sur un bouton valider qui me dirigera vers une page modifier2.php, où je pourrai modifier mon contact, il faut donc que j'utilise ma checkbox cochée pour ma requête SQL et là c'est le brouillard total !

Je vous remercie de votre aide.

Voici mon code:


<html>
<TITLE> Modifier </TITLE>
<h1><u>Service Commercial</u></h1>
<link rel="stylesheet" media="screen" type="text/css" title="miseenpagetab" href="miseenpage.css" />
<body VLINK="purple" ALINK="PURPLE" BACKGROUND="http://www.weboutils.com/backgrounds/bleu/page7/whtbck3.gif">
<pre>
<form method="POST">
<table align="center">
<tr>
<td><h3><u>Pré-recherche</u></h3></td>
</tr>
<tr>
<td><p>Séléctionner le nom du contact à modifier :</p><input type="TEXT" name="nom"></td>
<tr>
<td><input type="submit" value="OK"></td>
</table>

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("commercial");

$nom = $_POST['nom'];

$sql = "SELECT * FROM contacts WHERE Nom = '$nom'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

echo '<center>';echo"<table border=1 bgcolor='#FFFFFF'>";echo '</center>';
echo "<tr> <th>Selection</th> <th>Nom</th> <th>Prenom</th> <th>Societe</th> <th>Adresse</th> <th>Code postal</th> <th>Ville</th> <th>Pays</th> <th>Telephone fixe</th> <th>Telephone portable</th> <th>E-m@il</th></tr>";

while ($row = mysql_fetch_array($req)) {
echo "<tr><td></td><td>$row[Nom]</td><td>$row[Prenom]</td><td>$row[Societe]</td><td>$row[Adresse]</td><td>$row[CodePostal]</td><td>$row[Ville]</td><td>$row[Pays]</td<td>$row[TelephoneFix]</td><td>$row[TelephonePort]</td><td>$row[Email]</td></tr>";
}

echo "</table>";
?>
<br/>
<form method="POST" action="modifier2.php">
<td><input type="SUBMIT" value="modifier"></td>

<?php
mysql_close();
?>

</pre>
</body>
</html>
A voir également:

18 réponses

Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 18:01
Salut

Déjà il y a des truc que je comprend pas trop, pourquoi tu a 2 formulaires et ou est la checkbox ?
1
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
8 mars 2009 à 18:16
En faite je pensait mettre la checkbox dans la case vide du tableau dans le while:
while ($row = mysql_fetch_array($req)) {
echo "<tr><td> ICI </td><td>$row[Nom]</td><td>$row[Prenom]</td>

Ce qui donnerai:

while ($row = mysql_fetch_array($req)) {
echo "<tr><td> <input type="checkbox" name="choix" /> </td><td>$row[Nom]</td><td>$row[Prenom]</td>

Mais je vois pas du tout comment m'en servir, puisque le nombre de checkbox dépend du nombre de lignes dans le tableau. Bref je m'embrouille complètement.

En ce qui concerne le premier formulaire il est là pour la saisie de la pré-recherche, pour le 2éme tout en bas, je souhaite juste que lorsque je valide cela m'envoie sur la deuxième page de modifier, je pense que ce n'est pas la meilleur solution (d'ailleurs ça ne fonctionne pas ici), mais pourtant çà marchait sur une autre fonction (ajouter).
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 18:37
Le problème c'est que le premier formulaire tu ne l'a pas fermé
et le second non plus

Et ce second formulaire il faut qu'il encadre ton tableau avec les cases à cocher pour commencer
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
8 mars 2009 à 18:54
J'ai refermé le premier formulaire juste avant la balise ouvrante php.

Pour ce qui est du code des checkbox c'est du html, et vu que mon tableau est en php ça ne marche pas, il me met une erreur.
Je me suis renseigner sur des site et ils ouvrent un formulaire pour intégrer une ou plusieurs checkbox, mais ce n'est pas vraiment ce qu'il faut faire ici (du moins c'est ce que je pense mais vu que je débute en php...) puisque le nombre de checkbox dépend du nombre de contact, il varie donc.
Je veux juste préciser que la checkbox sert juste à désigner toute la ligne du tableau (donc tous les renseignement d'un même contact), et pas seulement un seul renseignement du contact.
Mon idée serait d'afficher tous les renseignements du contact sélectionner dans des zones de texte dans la page modifier2.php, afin de les modifier.

Désolé c'est peut-être un peu flou tous ça mais c'est pas évident a expliquer...
0

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

Posez votre question
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 19:05
Ton tableau est en HTML, il est simplement construit avec PHP

Pour la fermeture des formulaire c'est avec la balise </form> que ça ce fait je ne les vois pas dans ton code ou alors j'ai besoin de lunettes :p

En ce qui concerne les checkbox il faut simplement leur donner comme nom l'id de l'utilisateur

while ($row = mysql_fetch_array($req)) {
echo "<tr><td> <input type='checkbox' name='choix_".$row[id]."' /> </td><td>$row[Nom]</td><td>$row[Prenom]</td></tr>
}

$row[id] biensur tu remplace id par le nom de la colonne de l'identifiant auto increment dans ta base

de cette manière tes checkbox auront chacune comme nom

choix_1
choix_2
choix_3

etc.. ou 1 2 et 3 correspondent à l'id auto increment contenu dans ta base de données et du coup rien de plus simple dans modifier2.php de savoir quelle checkbox a été cochée etant donné que tu sais que le numero c'est l'identifiant dans la bdd !
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
8 mars 2009 à 20:04
Voila j'ai appliquer ce que tu m'a dit, et je dois dire qu'il y a du mieux déjà! Je peu passer à modifier2.php après avoir coché la checkbox, et je voudrait afficher les renseignements actuels dans des zone de saisie (que je pourrai alors modifier ). Bref je regarderai après ça par la suite, car je ne me suis pas encore plonger sur l'existence d'une fonction pour faire ça. En revanche il m'affiche une erreur que je n'avais jamais vu jusqu'à présent à la ligne où je tape ma requête SQL, ($sql="UPDATE...) :

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\wamp\www\Session\modifier2.php on line 61


<form method="POST" action="">

<table border="0" bgcolor="#CECECE" align="center">
<form action="action.php" method="post">
<tr>
<td><h2>Nom :</h2> </td>
<td> <input type="varchar" name="Nom"></td>
<tr>
<td><h2>Prenom :</h2></td>
<td><input type="varchar" name="Prenom"></td>
(...)
<td><td><input type="submit" value="Modifier"></td></td>
</table>
</form>

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("commercial");

$Nom = $_POST ['Nom'];
$Prenom = $_POST ['Prenom'];
(...)

$sql = "UPDATE contacts SET Nom=$Nom, Prenom=$Prenom, Societe=$Societe, Adresse=$Adresse, CodePostal=$CodePostal, Ville=$Ville, Pays=$Pays, TelephoneFix=$TelephoneFix, TelephonePort=$TelephonePort, Email=$Email WHERE ID=$row['ID']";
$modif = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

En tout cas je te remercie déjà pour ta patience, et l'aide que tu m'a apporter!
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 21:13
$sql = "UPDATE contacts SET Nom=$Nom, Prenom=$Prenom, Societe=$Societe, Adresse=$Adresse, CodePostal=$CodePostal, Ville=$Ville, Pays=$Pays, TelephoneFix=$TelephoneFix, TelephonePort=$TelephonePort, Email=$Email WHERE ID='".$row['ID']."'"';

c'etait la fin de la requete qui deconnais.

Par contre je te conseille de toujours entourer les valeurs d'un guillemet simple

UPDATE contacts SET Nom='$Nom', Prenom='$Prenom', etc...

ça risque de poser de gros problèmes dans l'execution de la requète si par exemple tes variables contiennent des espaces c'est l'erreur assurée.
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
8 mars 2009 à 22:00
Merci du conseil, en effet sa aurait buger car rien que pour l'adresse il y à des espaces.
Par contre sa ne marche toujours pas, il y à une erreur dans les guillemet double ou simple. j'ai tenté ceci:
WHERE ID='".$row['ID']."'";
( juste retiré un simple guillemet à la fin ) et sa a l'air de fonctionner. Par contre une ribambelle d'erreur s'affiche sous mon formulaire, alors qu'elle ne s'affichait pas avant lorsque je mettait ma requête en commentaire, c'est un vrai casse tête!
Notice: Undefined index: Nom in C:\wamp\www\Session\modifier2.php on line 49

Notice: Undefined index: Prenom in C:\wamp\www\Session\modifier2.php on line 50

(... pour toutes mes variables, alors qu'elles sont bien définies ...)

Notice: Undefined variable: row in C:\wamp\www\Session\modifier2.php on line 60

Et après un essai rapide çà ne marche pas.
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 22:26
Entre 2 pages php toutes les variables s'effacent, elles ne restent pas en memoire sur le serveur.

Quand tu coche et que tu valide le formulaire seule la checkbox est envoyée à modifier2.php et non pas tous le reste. C'est avec cette valeur de checkbox que tu sera capable de faire une requete pour recuperer les info dans ta base
0
easy-life Messages postés 38 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 28 juin 2009
8 mars 2009 à 22:33
bonsoir!
lorsque tu fais la redirection vers la page modif2.php tu dois surcharger le lien pour garder l id du membre que tu as selectionné
header("location:modif2.php?id=.'$t['id_membre']'.");
et saches que header ne s utilise pas avec si ta page contient des echo il faut donc separer l html et le traitement php..
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 22:43
Mec merci de lire les posts precedents avant de dire des betises ^^
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
8 mars 2009 à 22:54
Oui je suis d'accord, mais je me sert bien de la checkbox pour récupérer l'ID, et m'en servir a modifier2.php, mais mes variables et mon tableau sont tous 2 sur la même page php (modifier2).
Donc je pense que le problème ne viens pas de là.
J'ai retenter quelques modifications mais rien n'y fait.

Voila le code de modifier2.php :

<html>
<TITLE> Modifier </TITLE>
<body BGCOLOR="BLUE" TEXT="navy" VLINK="purple" ALINK="PURPLE" BACKGROUND="http://www.weboutils.com/backgrounds/bleu/page7/whtbck3.gif">

<form method="POST" >

<table method="POST" border="0" bgcolor="#CECECE" align="center">
<tr>
<td><h2>Nom :</h2> </td>
<td> <input type="varchar" name="Nom"></td>
<tr>
<td><h2>Prenom :</h2></td>
<td><input type="varchar" name="Prenom"></td>
<tr>
<td><h2>Societe :</h2></td>
<td><input type="varchar" name="Societe"> </td>
<tr>
<td><h2>Adresse : </h2></td>
<td><input type="varchar" name="Adresse"> </td>
<tr>
<td><h2>Code Postal :</h2></td>
<td><input type="varchar" name="CodePostal"> </td>
<tr>
<td><h2>Ville :</h2></td>
<td><input type="varchar" name="Ville"></td>
<tr>
<td><h2>Pays :</h2></td>
<td><input type="varchar" name="Pays"></td>
<tr>
<td><h2>Telephone fixe :</h2></td>
<td><input type="varchar" name="TelephoneFix"></td>
<tr>
<td><h2>Telephone portable :</h2></td>
<td><input type="varchar" name="TelephonePort"></td>
<tr>
<td><h2>E-mail :</h2></td>
<td><input type="varchar" name="Email"> </td>
<tr></tr>
<tr></tr>
<tr></tr>
<td><td><input type="submit" value="Modifier"></td></td>
</table>

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("commercial");

$Nom = $_POST ['Nom'];
$Prenom = $_POST ['Prenom'];
$Societe = $_POST ['Societe'];
$Adresse = $_POST ['Adresse'];
$CodePostal = $_POST ['CodePostal'];
$Ville = $_POST ['Ville'];
$Pays = $_POST ['Pays'];
$TelephoneFix = $_POST ['TelephoneFix'];
$TelephonePort = $_POST ['TelephonePort'];
$Email = $_POST ['Email'];

$sql = "UPDATE contacts SET Nom='$Nom', Prenom='$Prenom', Societe='$Societe', Adresse='$Adresse', CodePostal='$CodePostal', Ville='$Ville', Pays='$Pays', TelephoneFix='$TelephoneFix', TelephonePort='$TelephonePort', Email='$Email' WHERE ID='".$row['ID']."'";
$modif = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());



mysql_close();
?>

</form>
</body>
</html>
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
8 mars 2009 à 22:58
Quand tu arrive pour la premiere fois sur modifier2.php, tes champs ne sont pas rempli et pourtant il execute tout ce code la

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("commercial");

$Nom = $_POST ['Nom'];
$Prenom = $_POST ['Prenom'];
$Societe = $_POST ['Societe'];
$Adresse = $_POST ['Adresse'];
$CodePostal = $_POST ['CodePostal'];
$Ville = $_POST ['Ville'];
$Pays = $_POST ['Pays'];
$TelephoneFix = $_POST ['TelephoneFix'];
$TelephonePort = $_POST ['TelephonePort'];
$Email = $_POST ['Email'];

$sql = "UPDATE contacts SET Nom='$Nom', Prenom='$Prenom', Societe='$Societe', Adresse='$Adresse', CodePostal='$CodePostal', Ville='$Ville', Pays='$Pays', TelephoneFix='$TelephoneFix', TelephonePort='$TelephonePort', Email='$Email' WHERE ID='".$row['ID']."'";
$modif = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());



mysql_close();
?>

il est donc normal que $_POST ['Nom']; etc.. il ne les trouve pas
0
easy-life Messages postés 38 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 28 juin 2009
8 mars 2009 à 23:02
tu sais pourquoi il execute tt le code avant envoi?
car tu as oublier if(isset($_GET['ok'])){}
// ajoute nom='ok' pour le bouton modifier
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
8 mars 2009 à 23:10
Oui je suis d'accord, mais j'ai fait un essai donc en remplissant tous les champs et mon contact n'est pas modifier...
C'est aussi pour cette raison que je voulait que les informations qui étaient dans ma base de donné s'affiche dans les champs, afin de modifier celle que je souhaitait sans tout avoir a réécrire, et évité une erreur suite au champs vide. Mais j'essayerai de le trouver par moi même je ne me suis pas encore penché sur la question.

Si ça pouvait déjà marcher sans ça se serait pas mal!

Jusqu'à présent toutes mes autres recherche sur le web sont infructueuses
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
9 mars 2009 à 00:10
Tu brûle les étapes la

Ce que tu veux pour le moment c'est afficher ton formulaire de modification de contact en fonction de la checkbox cochée

enleve donc tout ce code d'update pour le moment il ne sert a rien, on verra apres

tout ça tu l'enleve

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("commercial");

$Nom = $_POST ['Nom'];
$Prenom = $_POST ['Prenom'];
$Societe = $_POST ['Societe'];
$Adresse = $_POST ['Adresse'];
$CodePostal = $_POST ['CodePostal'];
$Ville = $_POST ['Ville'];
$Pays = $_POST ['Pays'];
$TelephoneFix = $_POST ['TelephoneFix'];
$TelephonePort = $_POST ['TelephonePort'];
$Email = $_POST ['Email'];

$sql = "UPDATE contacts SET Nom='$Nom', Prenom='$Prenom', Societe='$Societe', Adresse='$Adresse', CodePostal='$CodePostal', Ville='$Ville', Pays='$Pays', TelephoneFix='$TelephoneFix', TelephonePort='$TelephonePort', Email='$Email' WHERE ID='".$row['ID']."'";
$modif = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

mysql_close();
?>

Ce qu'on veut pour le moment c'est parcourir avec une boucle toute les checkbox à la recherche de celle qui a été cochée ! et tout ceci ce fait evidement avant d'afficher le formulaire

Une fois qu'on sais quelle checkbox a été cochée on execute un select sur la base de donnée pour recuperer les informations et on affiche ces informations dans les champs du formulaire
0
easy-life Messages postés 38 Date d'inscription lundi 22 décembre 2008 Statut Membre Dernière intervention 28 juin 2009
9 mars 2009 à 12:47
exactement,
if(isset($_POST['ok']))
if(isset($_POST[ch]))// tableau indicé des checkbox
tu fais le parcours pour savoir quelles checkbox ont ete cochées
apres tu recuperes
$choix=$_POST[ch][$i];
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
9 mars 2009 à 19:43
Bon après avoir lu vos dernières réponses, et refait quelque recherche voici ce que j'en ai déduit. Je voudrait savoir si je suis sur la bonne voie, et si j'introduis bien la recherche au tous début de ma 2éme page (puisque vous m'avez dit que les checkboxs cochés restent en mémoires) placé ainsi, le tableau serait créer, et la chechbox déjà cocher :


foreach (array_TAB) { // parcourir le tableau TAB
if(isset($_POST[ch])) // si la ligne est coché
$choix=$_POST[ch][$i]; //

}


Par contre, je pense qu'il faudrait que je donne un nom à mon tableau du coup, pour l'appeler TAB... Et ce que je m'y prend bien?

echo '<center>';echo"<table border=1 bgcolor='#FFFFFF'> name=TAB";echo '</center>';
0
azertyop Messages postés 11 Date d'inscription dimanche 8 mars 2009 Statut Membre Dernière intervention 25 mai 2009
10 mars 2009 à 20:10
Bon finalement, abandon des checksbox, trop compliqué à utilisé et pour ce que je veux faire je n'en ai pas trop l'utilité, je vais faire un bon vieux lien modifier, et récupérer l'ID avec un $_GET['ID'].
J'ai quand même quelques problèmes avec cette méthode mais j'avance mieu!

En tous cas je vous remercie tous de votre aide!
0