Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/11/2006, 17h39   #1
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Par défaut [SQL] Réaliser un affichage de données avec possibilité de modification

Bonjour,

Je vais être amené à faire quelque chose d'assez simple finalement, mais je ne vois pas trop comment m'y prendre.

Il s'agit en fait de présenter des données extraits d'une table. Ca c'est OK, sous la forme d'un tableau.

Cependant, j'aimerais mettre en face de chaque ligne une case à cocher de sorte de pouvoir ensuite éditer quelques champs de la ligne. Un peu à la manière de PhpMyAdmin. Là je ne voie pas comment procéder je ne suis pas très à l'aise avec les checkbox. Une fois les modifications faites, l'idéal étant de confirmer avec un résumé.

Tout ceci doit utiliser le système de template smarty puisque j'insère ça dans une application existante qui l'utilise.

Si vous pouviez me guider, et puis savoir si c'est faisable surtout.
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2006, 22h55   #2
Membre expérimenté
 
Avatar de Tonio 76
 
Inscription : octobre 2006
Messages : 128
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 128
Points : 520
Points : 520
Et bien tu rajoutes une colone à ton tableau.
Dans cette colone tu ajoutes une checkbox qui s'appele modifier_iddelentree.
Ensuite pour la vérification et bien tu regardes à chaque fois si le modifier_iddelentree est coché. Si c'est le cas tu l'affiche. Sinon tu ne l'affiches pas.
Tonio 76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 09h31   #3
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Oui. Mais il faut que les autres éléments de la ligne soient des objets de formulaire ou pas ?

Sinon dans le POST il n'y aura rien, en dehors des données du checkbox. Auquel cas, quel type d'objet de formulaire correspondrait à une sorte de label comme on en trouve en VB par exemple.

Par ailleurs, existe-t-il un moyen optimisé de gérer les checkbox avec du PHP ?
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 09h34   #4
Membre confirmé
 
Inscription : novembre 2004
Messages : 364
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 364
Points : 202
Points : 202
Dans quel langage, tu es en train de réaliser ces actions ???

Les checkbox se font en HTML
tazmania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 10h11   #5
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
tu pourrais tester comme ça :

ta dernière colonne contient un formulaire réparti sur plusieurs lignes
dans case de cette colonne, une checkbox et un champ hidden

quand tu crées ton formulaire à partir de la lacture de ta base de données :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$req = ...
$res = mysql_query(...
$i = 0;
 
while ($enreg = mysql_fetch_array($res)) {
 
  echo élément checkbox, name="partieStatiqueCB" . $i
  echo élément hidden, name="partieStatiqueH" . $i, value=clé primaire de $enreg (ou concaténation de plusieurs champs format la clé primaire)
  $i++;
 
}
 
echo bouton submit


dans ta page de traitement :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$i = 0;
while (isset($_POST['partieStatiqueH'.$i])) {
  // on teste le hidden et pas le checkbox sinon on arrête la boucle à la 1ère checkbox non cochée
 
  if (isset($_POST['partieStatiqueCB'.$i])) {
    récupération de la clé primaire (explode si valeur = clés concaténées)
    recherche de l'enregistrement dans la BD
    affichage des données de l'enregistrement
  }
 
  $i++;
 
}



j'l'ai fait vite fait, j'garantis rien
__________________
Dia [ Page DVP ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 11h09   #6
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Salut,
le plus simple c'est de donner directement les valeurs de clés primaires aux checkbox, et de les passer dans un tableau :

Code :
<input type="checkbox" name="ids[]" value="<?php echo $enreg['id']; ?>">
Ensuite pour récupérer les élements à modifier sur ta page de traitement :

Code :
1
2
3
if(isset($_POST['ids'])) [
$sql = "SELECT * FROM ta_table WHERE id IN(".implode(", ", $_POST['ids']).")";
}
Bye
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 11h18   #7
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Oui je crois que je vais procéder comme ça, quitte à refaire une requête SQL.

Ce n'est pas simple puisqu'il y a tout le HTML qui est déporté à Smarty. Mais ça me semble jouable comme ça.

Merci beaucoup.
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 12h36   #8
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Cela étant, du coups j'ai une autre problématique qui apparaît.

Comment récupérer les valeurs de l'ensemble de mes champs modifiés ? Est-ce qu'il est possible de nommer une textbox valeur[] et du coups d'avoir le même principe que la checkbox ?
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 12h59   #9
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Oui tu peux faire pareil, ex :

Code :
1
2
3
4
5
6
7
<input type"text" name="enregs[<?php echo $enreg['id']]; ?>[name]">
<input type"text" name="enregs[<?php echo $enreg['id']]; ?>[firstname]">
 
foreach($_POST['enregs'] as $id => $fields) {
echo $fields['name'];
echo $fields['firstname'];
}
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 14h13   #10
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Merci beaucoup. Je vais tester ça.
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 15h08   #11
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Ca fonctionne Merci.

Bon encore un ptit soucis, mais là ça devient plus fin lol.

Une fois que j'ai validé les lignes que je veux modifier en cochant les cases. Je valide. L'action porte sur la même page, sauf que cette fois j'affiche bien les seuls éléments à modifier et j'utilise des textbox forcément.

Supposons qu'il y ait 10 lignes à modifier. Par mégarde, la personne ne répond pas à une des conditions que j'ai fixé (chiffre inférieur à 0, caractère alphabétique...) pour une saisie (par faute de frappe par exemple), lorsque qu'elle va valider le formulaire là encore je fais appel à la même page, j'affiche l'erreur et je recharge les lignes à modifier.

Le hic, c'est que je refait la requête, du coups on ne retrouve pas du tout les modifications effectuées par l'utilisateur auparavant. Autant pour une ligne ce n'est pas gênant, autant devoir rettaper tout sur 10 lignes pour un champs erroné ça devient embettant. Ma question est donc, comment puis-je procéder pour mettre dans ce cas les valeurs déja saisie dans les textbox au lieu de la requête. Sachant que j'utilise toujours la même page PHP pour les actions des formulaires.
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 16h04   #12
Membre éclairé
 
Avatar de sohnic
 
Femme
bioinfo
Inscription : mai 2003
Messages : 385
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : bioinfo

Informations forums :
Inscription : mai 2003
Messages : 385
Points : 363
Points : 363
Bonjour,
Tu stockes tout en session :
A la validation du formulaire, avant de tester les erreurs du dois faire un truc du genre $var=$_POST['un_textearea']

Tu le stockes en session :
$_session['textarea']=$var;

et au moment du reaffichage
echo '<textarea name="un_textarea">'.$_SESSION['textarea'].'</textarea>';

Ca marche aussi avec les tableaux...

Bon courage,

Sohnic
__________________
http://www.noctinfo.fr/

(\ _ /)
(='.'=) Voici Lapinou. Aidez-le à conquérir le monde en le reproduisant.
(")-(")
sohnic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 16h17   #13
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Sinon il ne faut faire la requête que si le formulaire n'a pas été validé où "confirmUpdate" est le nom du submit.

Code :
1
2
3
4
5
6
if(isset($_POST['confirmUpdate']))	{
//valeurs post
}
else	{
//sql
}
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 17h19   #14
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
J'avais bien pensé aux sessions, sauf qu'avec Smarty et globalement toute l'application dans laquelle je m'incruste il y a déja des sessions et quand j'avais créé un jour une variable de session il m'a crié dessus en me disant qu'il y en avait déja... j'me suis pas attardé j'ai trouvé un autre moyen.

Du coups j'ai opté pour :

Code :
1
2
3
4
5
6
if(isset($_POST['confirmUpdate']))	{
//valeurs post
}
else	{
//sql
}
Parcontre je ne connaissais pas cet état. Je l'ai testé, ça n'a pas l'air de fonctionner. J'ai feinté avec un élément hidden en fonctionnant sur le même principe après.
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 21h21   #15
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
En fait c'est pas un état c'est le nom du submit :

<input type="submit" name="confirmUpdate" value="Sauvegarder">
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h07   #16
Invité régulier
 
Inscription : mars 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 34
Points : 5
Points : 5
Envoyer un message via ICQ à Adrien93 Envoyer un message via MSN à Adrien93
Ah oui pardon lol. J'avais mal compris. Je testerais ça pourrait alléger un peu.

Euh sinon question plus bête, j'ai imbriqué des if. Or, quand un est faux, il test celui d'après quand même et du coups si celui-ci est bon ça effectue l'instruction. Du coups c'est très très embettant dans le cadre d'un contrôle de saisie.

J'me suis pas mal pris la tête, m'enfin c'était le soir, ça ira peut-être mieux demain. Mais si vous avez une idée, je suis preneur.

Je dévis un peu du sujet, désolé.
Adrien93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h01.


 
 
 
 
Partenaires

Hébergement Web