Problème mysql
Résolu
nicelife90
Messages postés
615
Date d'inscription
Statut
Membre
Dernière intervention
-
nicelife90 Messages postés 615 Date d'inscription Statut Membre Dernière intervention -
nicelife90 Messages postés 615 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai actuellement un petit problème et je voudrais savoir si il existe une solution à ce problème je suis sur en fais sinon ...
Donc voila imaginons que j'ai une base de donné avec une table voiture
dans ma table j'ai trois champ soit id marque et annee
j'ai une formulaire html
/************************************/
<input type"text" name"marque" .... >
<input type"text" name"annee" .... >
et un bouton valider
/************************************/
et j'ai un script php qui valide tous ça et qui s'occupe de mettre dans ma base de donné (exemple)
/*******************************************/
<?php
$marque = $_POST['marque'];
$annee = $_POST['annee'];
$insertion = "UPDATE voiture SET marque='" . $marque . "',
membre_prenom='" . $prenom . "' WHERE id='1'";
mysql_query($insertion);
?>
/************************************************/
on ce fou des erreur de ce script ces juste une exemple
Le problème est que disons que je passe sur mon formulaire pour entrer la marque et que je valide et bien tous ce passe bien ma marque est inscrit dans la base de donné.
Mais si je reviens sur mon formulaire et que je décide d'entrer l'année et que je ne met rien dans la case marque
mon année va aller dans la base de donner mais mon modèle va s'effacer puisque ma variable marque est vide du fais que je n'est rien inscrit dans la case marque la deuxième fois.
j'ai trouver une façon avec une structure de conditionnel de faire un get dans la base de donné et d'affecter a ma variable vide et ensuite de faire update.
mais sur 100 champ ça deviens très fatiguant.
y a t'il un moyen pour régler ce problème.
merci de bien vouloir m'aider dans mon incompétence.
J'ai actuellement un petit problème et je voudrais savoir si il existe une solution à ce problème je suis sur en fais sinon ...
Donc voila imaginons que j'ai une base de donné avec une table voiture
dans ma table j'ai trois champ soit id marque et annee
j'ai une formulaire html
/************************************/
<input type"text" name"marque" .... >
<input type"text" name"annee" .... >
et un bouton valider
/************************************/
et j'ai un script php qui valide tous ça et qui s'occupe de mettre dans ma base de donné (exemple)
/*******************************************/
<?php
$marque = $_POST['marque'];
$annee = $_POST['annee'];
$insertion = "UPDATE voiture SET marque='" . $marque . "',
membre_prenom='" . $prenom . "' WHERE id='1'";
mysql_query($insertion);
?>
/************************************************/
on ce fou des erreur de ce script ces juste une exemple
Le problème est que disons que je passe sur mon formulaire pour entrer la marque et que je valide et bien tous ce passe bien ma marque est inscrit dans la base de donné.
Mais si je reviens sur mon formulaire et que je décide d'entrer l'année et que je ne met rien dans la case marque
mon année va aller dans la base de donner mais mon modèle va s'effacer puisque ma variable marque est vide du fais que je n'est rien inscrit dans la case marque la deuxième fois.
j'ai trouver une façon avec une structure de conditionnel de faire un get dans la base de donné et d'affecter a ma variable vide et ensuite de faire update.
mais sur 100 champ ça deviens très fatiguant.
y a t'il un moyen pour régler ce problème.
merci de bien vouloir m'aider dans mon incompétence.
A voir également:
- Problème mysql
- Mysql community server - Télécharger - Bases de données
- Could not connect to mysql! please check your database settings! - Forum Redhat
- Mysql error 1 ✓ - Forum Réseaux sociaux
- Phpmyadmin a tenté de se connecter au serveur mysql, et le serveur a rejeté la connexion. merci de vérifier les valeurs de host, username et password dans la configuration et de s'assurer qu'elles correspondent aux informations fournies par l'administrateur du serveur mysql. ✓ - Forum PHP
- Access vs mysql - Forum Webmastering
4 réponses
Bonjour,
La façon de résoudre ce genre de problème est de construire la requête SQL pour n'y mettre que les champs qui sont modifiés.
On peut faire quelque chose d'assez souple de la façon suivante :
Remarque : cette méthode ne permet pas de supprimer une information en la remplaçant par une chaîne vide... mais comme c'est justement ce que tu souhaites éviter...
Xavier
La façon de résoudre ce genre de problème est de construire la requête SQL pour n'y mettre que les champs qui sont modifiés.
On peut faire quelque chose d'assez souple de la façon suivante :
// Initialisation des champs de la base à vérifier en POST $champsExistants = array(); $champsExistants[] = "marque"; $champsExistants[] = "annee"; $champsExistants[] = "modele"; //.... // Fonction vérifiant si un champ doit être ajouter à la clause SET de la fonction, et // si oui, donnant la partie correspondante de la clause SET. function ajouteClause($champ) { global $champsExistants; $resultat = ""; if (array_search($champ, $champsExistants) !== FALSE && $_POST[$champ] != '') $resultat = " $champ='".mysql_real_escape_string($_POST[$champ])."' "; return $resultat; } $sqlSET = ""; foreach($POST as $champ => $valeur) { $sqlSET .= ajouteClause($champ); } $insertion = "UPDATE voiture SET $sqlSET WHERE id='1'"; mysql_query($insertion);
Remarque : cette méthode ne permet pas de supprimer une information en la remplaçant par une chaîne vide... mais comme c'est justement ce que tu souhaites éviter...
Xavier
Bonjour,
J'ai testé la fonction pour ce qui est de vérifier les champ et les concaténées aucun problème.
Je trouve même cette façon très bien pensé.
Un problème demeure puisque j'ai créé un formulaire qui allais exactement avec l'exemple que tu ma donné. Et le résultat de la fonction est le suivant :
UPDATE voiture SET marque='honda' modele='civic' annee='2010' WHERE id='1'
la structure est bonne mais il manque les virgules puisque la syntaxe est:
UPDATE voiture SET marque='honda', modele='civic', annee='2010' WHERE id='1'
j'ai tenter de corriger cella en ajoutant une virgule à la concaténation mais j'arrive à l'autre problème que j'ai tous le temps.
le résultat deviens :
UPDATE voiture SET marque='honda', modele='civic', annee='2010', WHERE id='1'
mais il ne dois pas y avoir de virgule sur la dernière entré devant le WHERE sinon la requête n'est pas traiter.
peux être à tu une solution pour ce problème.
P.S. si tu fais copy/paste pour tester tu à oublier un _ à $POST sur la ligne foreach(...
Merci de ton aide!
J'ai testé la fonction pour ce qui est de vérifier les champ et les concaténées aucun problème.
Je trouve même cette façon très bien pensé.
Un problème demeure puisque j'ai créé un formulaire qui allais exactement avec l'exemple que tu ma donné. Et le résultat de la fonction est le suivant :
UPDATE voiture SET marque='honda' modele='civic' annee='2010' WHERE id='1'
la structure est bonne mais il manque les virgules puisque la syntaxe est:
UPDATE voiture SET marque='honda', modele='civic', annee='2010' WHERE id='1'
j'ai tenter de corriger cella en ajoutant une virgule à la concaténation mais j'arrive à l'autre problème que j'ai tous le temps.
le résultat deviens :
UPDATE voiture SET marque='honda', modele='civic', annee='2010', WHERE id='1'
mais il ne dois pas y avoir de virgule sur la dernière entré devant le WHERE sinon la requête n'est pas traiter.
peux être à tu une solution pour ce problème.
P.S. si tu fais copy/paste pour tester tu à oublier un _ à $POST sur la ligne foreach(...
Merci de ton aide!
Re bonjour,
J'ai trouver une autre solution qui me semble très bien optimisé aussi la voici :
Merci de ton aide si il y a une solution pour les virgules dans ton code tu peux m'en faire part aussi.
Merci @++++
J'ai trouver une autre solution qui me semble très bien optimisé aussi la voici :
<?php $sChamps = ''; if ($_POST['marque'] != ''){ if($sChamps != ''){ $sChamps .= ', '; } $sChamps .= "marque='".$_POST['marque']."'"; } if ($_POST['modele'] != ''){ if($sChamps != ''){ $sChamps .= ', '; } $sChamps .= "modele='".$_POST['modele']."'"; } if ($_POST['annee'] != ''){ if($sChamps != ''){ $sChamps .= ', '; } $sChamps .= "annee='".$_POST['annee']."'"; } if($sChamps != ''){ $insertion = "UPDATE voiture SET $sChamps WHERE id='1' "; }else{ //rien na updater } ?>
Merci de ton aide si il y a une solution pour les virgules dans ton code tu peux m'en faire part aussi.
Merci @++++
Oui, les virgules, je les ai oubliées...
Ça donnerait quelque chose comme ça :
PS : je n'avais pas proposé la solution que tu donnes ensuite, parce que tu avais parlé d'une centaine de champs, donc j'ai minimisé au maximum leur répétition...
Ça donnerait quelque chose comme ça :
// Initialisation des champs de la base à vérifier en POST $champsExistants = array(); $champsExistants[] = "marque"; $champsExistants[] = "annee"; $champsExistants[] = "modele"; //.... // Fonction vérifiant si un champ doit être ajouter à la clause SET de la fonction, et // si oui, donnant la partie correspondante de la clause SET. function ajouteClause($champ, $virgule) { global $champsExistants; $resultat = ""; if (array_search($champ, $champsExistants) !== FALSE && $_POST[$champ] != '') $resultat = " $virgule $champ='".mysql_real_escape_string($_POST[$champ])."' "; return $resultat; } $sqlSET = ""; foreach($POST as $champ => $valeur) { $virgule = ''; if ($sqlSET != '') $virgule = ','; $sqlSET .= ajouteClause($champ, $virgule); } $insertion = "UPDATE voiture SET $sqlSET WHERE id='1'"; mysql_query($insertion);
PS : je n'avais pas proposé la solution que tu donnes ensuite, parce que tu avais parlé d'une centaine de champs, donc j'ai minimisé au maximum leur répétition...