Mysql/PHP: insérer ou modifier

Résolu/Fermé
Lrt88 Messages postés 927 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 - 23 janv. 2009 à 10:26
Lrt88 Messages postés 927 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 - 23 janv. 2009 à 11:42
Bonjour à tous,

je suis en train de monter un petit site (je suis un webmaster du dimanche :D) mais je suis confronté à un petit problème.

J'ai créé un formulaire pour que les gens s'inscrivent sur mon site(donc dans une base de donnée).

Pour la première partie, le INSERT, pas de soucis. Ca marche niquel.

Mais je me suis dis, si quelqu'un était déjà inscrit (donc qu'il souhaite modifier ses données car mauvaise manipulation), c'est impossible. Car la clé primaire serait en double.

Ce que je veux faire, c'est :
si ca existe déjà, modifier
si ca existe pas, rajouter

Alors j'ai cherché des solutions sur Gogole (Google). J'ai trouvé une solution (DUPLICATE KEY si mes souvenirs sont bons) mais ca concerne que les clés primaires ou unique et c'est souvent pour les statistiques mais moi, je dois aussi modifier les autres champs.

J'ai essayé avec des if et mysql_nom ($nom)==1 mais mon problème, c'est le UPDATE, ma syntaxe doit être mauvaise car tout le reste du code devient rouge.

J'ai aussi vu replace...alors moi je confonds tout REPLACE, UPDATE, DUPLICATE

Est-ce quelqu'un pourrait m'écrire un petit bout de code qui me permettrait de:
- vérifier si ma variable ($nom par exemple) existe en clé primaire dans ma base de donnée Boby dans la table Toir.
- si oui, modifier ville par $ville où $nom existe déjà.
- si non, insérer $nom et $ville. (ca c'est le truc que j'ai réussi)

UN TOUT GRAND MERCI, C'EST UNE ASSOCIATION QUI VOUS LE DIT

5 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
23 janv. 2009 à 10:34
Ah oui tu t'embêtes pour rien, là...

Pour une inscription, tu fais une requête sur ta table avec les données (par exemple, pour un utilisateur dont le login est toto, "SELECT * FROM utilisateurs WHERE login='toto'") ; si une ligne au moins est retournée, c'est que la personne est déjà inscrite. Si aucune ligne n'est retournée, c'est qu'il n'est pas inscrit. Tu as une fonction PHP pour tester le nombre de lignes retournées.

Et pour la mise à jour des données... requete UPDATE, ni plus, ni moins. Admettons que l'utilisateur du login toto veuille changer son adresse mail toto@toto.fr en toto@tata.fr : UPDATE utilisateurs SET adressemail='toto@tata.fr' WHERE login='toto'.



0
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 102
23 janv. 2009 à 10:35
Alors, moi personnelement, je n'aime pas insérer moi même les clé primaire. En général, les clés primaire, sont souvent des numéros (identifiant).. Toi aparament ta clé primaire est un nom n'est ce pas ???? parce que c'est beaucoup plus simple de lui donnée un numéro, et sur mysql tu mets le champs en "auto_increment" .. Cela signifie que a chaque fois que tu feras un insert, il passera automatiqement un numéro suivant. Tu n'auras pa à gérer les doublons.

Mais tu peux bien me réexpliquer ce que tu aimerais faire ??

Tu a un formulaire pour modifier et un pour ajouter ?? ou c'est le meme formulaire pour les deux actions ???
0
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
23 janv. 2009 à 10:47
Si ta clé primaire est le login :
Pour faire propre, avant d'ajouter, tu testes le login :
test=mysql_query("SELECT login FROM USER WHERE login='".$login."'");
if(mysql_num_rows(test))
{
  // l'utilisateur existe déjà
}
else
{
  // Inscription
}


Pour la modification, il faut que tu fasses un 2ème formulaire accessible uniquement aux utilisateurs connectés.
Pour modifier la ville, la requête sera :
"UPDATE USER SET ville='".$ville."' WHERE login='".$login."'"
0
974_Vin's_974 Messages postés 547 Date d'inscription vendredi 23 janvier 2009 Statut Membre Dernière intervention 19 février 2009 102
23 janv. 2009 à 10:50
Mouais, ils t'ont tout dit ;-)
0

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

Posez votre question
Lrt88 Messages postés 927 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 12 août 2018 267
23 janv. 2009 à 11:42
UN GRAND MERCI A TOUS,

je crois que la solution de Mickey_UFC devrait être la bonne (mais je ne peux pas tester maintenant car mon site est sur un serveur local et je suis sur un autre pc) mais je pense que HostOfSeraphim avait la même idée.

Sinon je n'ai qu'un formulaire et moi aussi avant, ma clé primaire c'est un auto-increment mais le problème, c'est que certains Balou rentraient 3-4 fois leur truc d'affilé pour être sûr que ca soit vraiment bon et donc j'avais 1 Balou, 2 Balou, 3 Balou...

Sinon le problème de mon UPDATE, c'est qu'avant j'avais trouvé une syntaxe comme ça: mysql_query ("UPDATE table SET (ville=" '.$ville.'") WHERE mysql_nom($nom)==1"); et vos solutions en sont très loin donc je ne sais pas où ma source avec trouver cette structure.

Encore merci !

je reviendrais pour vous confirmer que ça marche.
0