Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 25/01/2011, 11h17   #1
Futur Membre du Club
 
Inscription : mai 2010
Messages : 50
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 50
Points : 18
Points : 18
Par défaut Enregistrement MySQL: besoin d'un conseil

Bonjour à tous,

Je n'ai pas de problème, juste besoin d'un conseil !

J'ai dans ma bdd des tables à ralonge (une vingtaine de champs). Lorsque j'enregistre une nouvelle ligne ou que j'en met une à jour avec PHP, j'ai donc une ligne très longue !

Ce qui donne:
Code :
mysql_query('INSERT INTO table VALUES("val1", "val2", "val3", "val4"....)');
Et c'est évidemment la même chose pour les mysql update.

Cette méthode me pose deux problèmes:
  • les lignes sont longues et donc une source d'erreur
  • très peu pratique lors de l'évolution d'une table

J'ai donc utilisé à certains moment une autre méthode. Au lieu de mettre la liste exhaustive de mes champs à chaque enregistrement, je donne à mes champs de formulaire (HTML) le même nom que le nom de mes champs en bdd et je fais une boucle pour le mysql_query.

Ce qui donne:
Code :
1
2
3
foreach($_POST as $key => $value) {
   mysql_query('UPDATE table SET $key="'.$value.'" WHERE id="1"');
}
Ou encore:
Code :
1
2
3
foreach($_POST as $value) {
   mysql_query('INSERT INTO table VALUES($value)');
}
Cependant je ne suis pas sûr que cette solution soit très "propre" ni performante. J'aurais donc souhaité avoir vos avis, conseils et astuces concernant cette problématique.

Merci,
Julien
julien731 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 11h24   #2
Futur Membre du Club
 
Inscription : mai 2010
Messages : 50
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 50
Points : 18
Points : 18
C'est en écrivant mon post que j'ai finalement pensé à construire ma chaîne en amont pour éviter les requêtes multiples:

Code :
1
2
3
4
5
6
7
8
$string = '';
 
foreach($_POST as $key => $value) {
   $string.= $key'="'.$value.'"';
   $string.= ', ';
}
 
mysql_query('UPDATE table SET $string WHERE id="1"');
C'est mieux ?
julien731 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 13h41   #3
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Construire la chaine en amont est une solution, mais attention à ne pas utiliser les données issue de $_POST (ou tout autres sources) directement dans tes requêtes. Tu t'expose sinon au injection sql et tous les problème que cela implique.

Citation:
les lignes sont longues et donc une source d'erreur
Rien ne t'empêche de sauter des lignes dans ta requête pour plus de lisibilité.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h01   #4
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Une méthode un peu plus avancée est d'utiliser un objet.

http://hachesse.developpez.com/objetphp/
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h23   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par gwharl Voir le message
Une méthode un peu plus avancée est d'utiliser un objet.

http://hachesse.developpez.com/objetphp/
et de lui refiler un vieux tuto php 4, histoire de prendre de bonnes habitudes...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h53.


 
 
 
 
Partenaires

Hébergement Web