begin process at 2012 05 30 20:28:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

Access

 > 

Modifier plusieurs champs d'un tableau en même temps


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modifier plusieurs champs d'un tableau en même temps

mardi 23 février 2010 à 13:02:13 | Modifier plusieurs champs d'un tableau en même temps

IchabOd69

Bonjour,

Je suis débutant/bidouilleur en php/mysql

J'essaye de me faire ma propre gestion de mes comptes bancaires, et je bloque sur un truc.

J'importe le fichier csv des opérations bancaires, je formatte un tableau avec 8 colonnes, et je souhaite modifier certains champs sur ma page web.

Donc je me retrouve avec potentiellement plusieurs dizaines de champs modifiés lors de la même opération.

Comment coder ça en php/mysql ?

J'ai créé un formulaire en méthode = post, une boucle while récupère toutes les données de la base et les présente dans une table, et lorsque je clique sur le bouton 'modifier', j'envoie les données à une page modif.php.

Et c'est là que je bloque. Je sais mettre à jour une ligne dans une table, mais pas n lignes. J'imagine qu'il faut mettre une boucle mais je n'y arrive pas.

Faut-il utiliser un FOREACH ? (j'ai lu la doc, je comprends pas trop)

Comment est alors la structure ?

Comment être sûr que le formulaire envoie bien TOUTES les lignes et pas seulement la première par exemple ?

Merci de vos lumières.
mardi 23 février 2010 à 13:16:58 | Re : Modifier plusieurs champs d'un tableau en même temps

IchabOd69

une petite idée comme ça : serait-ce possible de faire ça :

<?php

$tableau1 = array ('colonne1', 'colonne2', 'colonne3', etc...);

$var = 'tableau1';
$nb_elements = count (${$var});
for ($i=0; $i<$nb_elements; $i++) {
$champ1=$_POST['champ1'];
$champ2=$_POST['champ2'];
etc...

et après la requête sql d'update ??

}
?>
mardi 23 février 2010 à 13:35:00 | Re : Modifier plusieurs champs d'un tableau en même temps

jimmypage64


salut!
si tu met ta requete UPDATE dans la boucle For normalement cela devrait fonctionner ! il fera un UPDATE pour chaque ligne de ton tableau.
Du coup ta requete sera :

"UPDATE TaTable SET ChampTable1 = $champ1, ChampTable2 = $champ2, ... WHERE IdentifiantLigne = Identifiant"

IdentifiantLigne est en fait la clé unique qui te permet d'identifier la ligne de ta Table à modifier. (Il faudra par exemple que tu aies cette valeur stockée dans ton tableau)

PS: Je t'ai donné la requête sans me soucier des guillemets...

[8)]Zoso
mardi 23 février 2010 à 13:40:12 | Re : Modifier plusieurs champs d'un tableau en même temps

IchabOd69

OK j'ai compris. merci.

Dernière question :
effectivement j'ai bien un index pour chaque ligne, mais est-ce que ça suffit de mettre juste ça :
Code PHP :
WHERE IdentifiantLigne = Identifiant
ou faut-il précédemment faire mention de cet identifiant dans la requête ? (l'initialiser ou autre chose)

merci pour ton aide
mardi 23 février 2010 à 14:00:01 | Re : Modifier plusieurs champs d'un tableau en même temps

jimmypage64


En fait il faut que tu mette :

WHERE IdentifiantLigne = $Identifiant

$Identifiant étant l'Id de la ligne que tu as récupéré dans la base en initialisant ton tableau.


[8)]Zoso
mardi 23 février 2010 à 23:11:24 | Re : Modifier plusieurs champs d'un tableau en même temps

IchabOd69

Re-

Bon j'ai une erreur, j'ai trituré et essayé de comprendre mais que dalle.

voilà le code:

Code PHP :
$tableau1 = array ('index', 'date_operation', 'montant', 'origine', 'numero', 'libelle_debit', 'libelle_credit', 'Categorie', 'paiement', 'rappro');

$var = 'tableau1';
$nb_elements = count (${$var});

for ($i=0; $i <= $nb_elements; $i++) {
$index=$_POST['index'];
$date_operation=$_POST['date_operation'];
$montant=$_POST['montant'];
$origine=$_POST['origine'];
$numero=$_POST['numero'];
$libelle_debit=$_POST['libelle_debit'];
$libelle_credit=$_POST['libelle_credit'];
$Categorie=$_POST['Categorie'];
$paiement=$_POST['paiement'];
$rappro=$_POST['rappro'];

$sql1 = "UPDATE perso_comptes SET date_operation= '$date_operation' , montant= '$montant' , origine= '$origine' , numero= '$numero' , libelle_debit= '$libelle_debit' , libelle_credit= '$libelle_credit' , Categorie= '$Categorie' , paiement= '$paiement' , rappro= '$rappro' WHERE index= $index";
$var1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
}

header('location: ./index.php');


et voilà l'erreur :

Erreur SQL !
UPDATE perso_comptes SET date_operation= '2010-02-17' , montant= '-1,8' , origine= 'Carte' , numero= '' , libelle_debit= ' CB REGIE PERIF.NORD 15/02/10 ' , libelle_credit= '' , Categorie= '' , paiement= '0' , rappro= '1' WHERE index= 163
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index= 163' at line 1



Je précise que le nombre d'enregistrement aujourd'hui est bien de 163. Il a l'air de bloquer sur la dernière ligne, je ne sais pas pourquoi.

une idée?
mercredi 24 février 2010 à 08:33:30 | Re : Modifier plusieurs champs d'un tableau en même temps

kohntark

Membre Club
Salut,

Personnellement je n'ai rien compris à ta boucle. A quoi sert elle ?
A première vue à rien puisqu'elle ne fera que mettre à jour la même ligne 10 fois.

Si j'ai bien compris tu souhaites mettre à jour plusieurs lignes de ta base à partir d'un formulaire. Est ce bien cela ?

Si oui il faut boucler sur les lignes et non sur les champs.

Commence donc par mettre un print_r($_POST) tout en haut de ta page et informe nous du résultat. Montre également comment tu construis ton tableau HTML.

Par ailleurs pense à utiliser systématiquement mysql_real_escape_string() sur les données externes.

Cordialement,

Kohntark -

dimanche 28 février 2010 à 13:29:24 | Re : Modifier plusieurs champs d'un tableau en même temps

IchabOd69

bonjour,

Malgré plusieurs essais je n'y arrive pas.

Mon tableau html est le suivant :
Code PHP :
<?php
echo '<FORM method="post" action="modif.php">';
echo '<table border=\'1\' align=\'center\'>';
echo '	<tr border=\'1\'>';
echo '		<td><center>Index</center></td><td><center>Date opération</center></td><td><center>Montant</center></td><td><center>Origine</center></td><td><center>N°</center></td><td><center>Libellé débit</center></td><td><center>Libellé crédit</center></td><td><center>Catégorie</center></td><td><center>Payé</center></td><td><center>Rappro?</center></td>';
echo '	</tr>';
	while( $comptes = mysql_fetch_array( $requete ) )
		{
			echo '<tr><td><center><INPUT type=text name="index" value="'.$comptes['index'].'" size="4"></center></td><td><center><INPUT type=text name="date_operation" value="'.$comptes['date_operation'].'" size="12"></center></td><td><center><INPUT type=text name="montant" value="'.$comptes['montant'].'" size="10"></center></td><td><center><INPUT type=text name="origine" value="'.$comptes['origine'].'" size="11"></center></td><td><center><INPUT type=text name="numero" value="'.$comptes['numero'].'" size="10"></center></td><td><center><INPUT type=text name="libelle_debit" value="'.$comptes['libelle_debit'].'" size="50"></center></td><td><center><INPUT type=text name="libelle_credit" value="'.$comptes['libelle_credit'].'" size="50"></center></td><td><center><INPUT type=text name="categorie" value="'.$comptes['categorie'].'" size="20"></center></td><td><center><INPUT type=text name="paiement" value="'.$comptes['paiement'].'" size="5"></center></td><td><center><INPUT type=text name="rappro" value="'.$comptes['rappro'].'" size="5"></center></td></tr>';
		}
echo '<tr><td><INPUT TYPE="SUBMIT" VALUE="Modifier"></td></tr>';
echo '</table>';
echo '</form>';
?>



ma page modif.php est la suivante :

Code PHP :
<?php
print_r($_POST);

include("./include/connect.php");
include("./include/functions.php");

$index=$_POST['index'];
$date_operation=$_POST['date_operation'];
$montant=$_POST['montant'];
$origine=$_POST['origine'];
$numero=$_POST['numero'];
$libelle_debit=$_POST['libelle_debit'];
$libelle_credit=$_POST['libelle_credit'];
$Categorie=$_POST['Categorie'];
$paiement=$_POST['paiement'];
$rappro=$_POST['rappro'];

$tableau1 = array ('index', 'date_operation', 'montant', 'origine', 'numero', 'libelle_debit', 'libelle_credit', 'Categorie', 'paiement', 'rappro');

$var = 'tableau1';
$nb_elements = count (${$var});

for ($i=0; $i <= $nb_elements; $i++) {

$sql1 = "UPDATE perso_comptes SET date_operation='$date_operation' , montant= '$montant' , origine= '$origine' , numero= '$numero' , libelle_debit= '$libelle_debit' , libelle_credit= '$libelle_credit' , Categorie= '$Categorie' , paiement= '$paiement' , rappro= '$rappro' WHERE index= $index";
$var1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
}

//header('location: ./index.php');
?>


et au final j'ai toujours ce message :

Array ( [index] => 163 [date_operation] => 2010-02-17 [montant] => -1,8 [origine] => Carte [numero] => [libelle_debit] => CB REGIE PERIF.NORD 15/02/10 [libelle_credit] => [categorie] => [paiement] => 0 [rappro] => 1 ) Erreur SQL !

UPDATE perso_comptes SET date_operation='2010-02-17' , montant= '-1,8' , origine= 'Carte' , numero= '' , libelle_debit= ' CB REGIE PERIF.NORD 15/02/10 ' , libelle_credit= '' , Categorie= '' , paiement= '0' , rappro= '1' WHERE index= 163

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index= 163' at line 1

Si quelqu'un a le temps de regarder 5mn, ça m'arrangerait et ça me ferait comprendre...

Merci
dimanche 28 février 2010 à 15:42:48 | Re : Modifier plusieurs champs d'un tableau en même temps

kohntark

Membre Club

Par ailleurs pense à utiliser systématiquement mysql_real_escape_string() sur les données externes.


=> Pourquoi ne tiens tu pas compte de cette remarque ?

A quoi sert elle ?


=> Re : A quoi sert elle ?

Si oui il faut boucler sur les lignes et non sur les champs.


=> Pourquoi ne tiens tu pas compte de cette remarque ?

Attention, index est un mot réservé mySQL, tu devrais renommer ce champ.


Kohntark -

dimanche 28 février 2010 à 16:35:30 | Re : Modifier plusieurs champs d'un tableau en même temps

IchabOd69

1/ Parce que je n'ai pas eu le temps de chercher de manière approfondie, et que les premiers éléments que j'ai réussi à comprendre de ça étaient pour protéger d'une injection SQL ?
Si c'est bien le cas, j'ai déjà protégé par htaccess le dossier général.

2/ Je souhaiterais, comme expliqué plus haut, mettre à jour plusieurs champs d'un tableau en même temps (en gros je modifie la catégorie des paiements pour pouvoir faire des stats par la suite)

3/ Parce que je ne l'ai pas comprise. Du moins j'ai supposé la comprendre, c'est pour ça que j'ai sorti les $_POST de la boucle, mais ça ne marche pas plus.

4/ C'est le nom du champ d'incrémentation dans la base. Ce n'est pas le but, de l'appeler index justement?

1 2

Cette discussion est classée dans : php, tableau, temps, modifier, champs


Répondre à ce message

Sujets en rapport avec ce message

comment modifier des champs en php [ par medhacen ] slt ts,je suis debutant en php, je veux modifier quelques champs ds une table de ma base. mais je n'arrive pa à realiser cette tâche.malgré le  code n PHP, formulaire et innerHTML [ par ExeQTd ] Bonjour à tous,Je suis actuellement confronté à un petit souci technique. Autant le dire tout de suite, je suis débutant dans le monde du web 2.0 et j Afficher/Modifier PHP/MySQL [ par ljuboja78 ] Bonjour J'ai une BDD deejayfloo, avec une table 'news' est les champs jour, jour2, mois, annee, news.Je souhaiterais afficher un tableau avec mes cham extraire à partir un tableau [ par hanen8989 ] bonjour, je suis une debutante en php ,j'ai un probleme. je veux créer un tableau dans une page php avec la balise ,je veux récupérer les données de tableau dynamique [ par adlis ] bonjour à tous je suis nouveau sur le forum donc excusez moi si j'ai mal poster mon message ;)bon voilà je suis pas très fort en php j'ai tout de même le pot le plus long php [ par fournier anthony ] Bonjour à tous, Voila, après une bonne douzaine d'heure d'acharnement et de triturage intellectuel, je n'arrive pas à écrire un algorithme qui trouve Tableau PHP MySQL [ par titoutoufou1 ] Bonjour tout le monde, Petit probleme avec mon tableau PHP, il me manque un enregistrement et un seul! J'ai 4 enregistrements dans ma bdd, mais seul php [ par khoubaibma ] comment faire une jointure entre plus de deux tables?je veut supprimer le contenu d'un champs qui est un clé primaire dans le premier table et étrangé Transmettre un tableau javascript à Php [ par CODE MAN ] bonjour à tous,j'ai une fonction javascript qui retourne les cordonnées x et y de mes div sur une page donnée. ma fonction marche très bien sauf que a Impression page php [ par Uebueb ] Bonjour,J'aimerais imprimer des pages php qui contiennent des grands tableau html.Je n'arrive pas à  avoir le tout sur plusieurs pages, j'ai bien le d


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales