IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

choix en insert et update PHP SQL


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut choix en insert et update PHP SQL
    Bonjour le forum

    j'ai un formulaire qui envoi les infos dans un fichier valide.php.

    Voici le code du fichier valide.php:

    <?PHP
    $server = ""; $user = ""; $password = ""; $base = "";
    mysql_connect($server,$user,$password);
    mysql_select_db($base);
    $sql = "INSERT INTO webmaster VALUES('$nom','$prenom')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error());
    echo ''; mysql_close(); ?>
    Je sollicite votre grande gentillesse et o combien grande générosité pour deux minuscules questions

    1 - Comment puis je faire pour eviter qu'il m'insert systematiquement une meme saisie plusieurs fois, en fait je voudrais qu'il verifie dans la base si un nom n'existe pas déja
    J'ai un début de piste maladroit :

    $sql = "select nom from webmaster";
    mysql_query($sql) or die('Erreur SQL !'.$sql.' '.mysql_error());

    Mais mon If ne marche pas pour vérifier si le nom existe il doit soit insert to soit update.

    2 - Je souhaiterai, egalement que le nom de ma base, ici WEBMASTER soit une recupération d'une variable, à l'image de

    $sql = "select nom from $_GET['table']";


    Est ce que cela reste possible


    Merci beaucoup en tout cas du temps passé a lire ce post.

    Bonne journée me forum

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    1. Tu fais ton select, si mysql_num_rows te retourn un entier positif, ton utilisateur existe donc tu fais un update, sinon un insert

    2. Oui c'est possible mais bon, passer une table par GET, je trouve pas cela très sécurisé.

  3. #3
    Membre habitué Avatar de nesbla
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 220
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "select nom from webmaster where nom='$nom'";
    T'execute ta requete et si elle ne te retourne aucune ligne, tu peux faire l'insert sinon l'update.

    Pour ta deuxième question, j'suis pas sur d'avoir bien compris mais je ne vois pas d'objection à mettre une variable $_GET dans ta requete.
    ··· Champion des excuses bidons ··· Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    Je suppose que tu veux qu'il y ai par exemple que un seul paul durant ds la table webmaster.

    donc il suffit dans ta bdd de faire de ces 2 champs une clef primaire.
    ainsi lorsque tu ajoutera qlqun qui existe deja la requete renverra une erreur et donc tu n'auras qu a afficher a l user la raison de cette erreur a savoir que ce nom preonm existe deja.

    pour l autre tu n'as qu a faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $table = $_REQUEST["table"];
    $sql = "select nom from $table";
    $_REQUEST reprenant les variables post et get.

  5. #5
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    salut,

    regarde aussi REPLACE
    http://dev.mysql.com/doc/refman/5.0/fr/replace.html

    REPLACE fonctionne exactement comme INSERT, sauf que si une vieille ligne dans la table à la même valeur qu'une nouvelle pour un index UNIQUE ou une PRIMARY KEY, la vielle ligne sera effacée avant que la nouvelle ne soit insérée. See Section 13.1.4, « Syntaxe de INSERT ».
    Ce qui est tres pratique et evite le test de mysql_num_rows()
    Tuc l'Original, On ne peut que l'aimer

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Merci à tous mais......;
    ...Je vous avoue que je suis totalement perdu, car dans votre grande sympathie, vou sme proposez tous des solutions totalement différentes.

    Pouvez vous m'expliquer en me mettant un exemple de code, s'il vous plait......

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    Ne pas oublier les questions de sécurité ... même si c basique ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?
    $nom = mysql_escape( $nom );
    $prenom = mysql_escape( $prenom );
    $count = 0;
    $table = 'webmaster';
     
    $sql = "SELECT Count(*) FROM $table WHERE nom='$nom'";
    $res = mysql_query( $sql );
    if ( $res ) {
     $count = mysql_result( $res, 0, 0 );
    }
     
    if ( $count <= 0 )
    {
      $sql = "INSERT INTO $table (nom, prenom) VALUES ( '$nom', '$prenom' );";
    }
    ?>
    Nicolas BUI

  8. #8
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    Puis le but, c'est aussi pour toi d'apprendre et de chercher à comprendre...
    Bref faut aussi de l'effort de ton coté (tester etc.).
    Et non pas qu'on fasse tout pour toi même si c bidon à faire
    Nicolas BUI

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut oui oui c'est évident...........
    ...........pas de souci je teste de teste ton exemple.

    Merci a tout le monde je reviens vers vous dans quelques secondes.


    Il y a une erreur :
    Fatal error: Call to undefined function: mysql_escape() in /home/clients/www/listebebe.com/www/valide.php on line 10

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    tu dois etre conneter avec mysql_connect pour pouvoir utiliser cette methode.

    et utilise ca plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_real_escape_string()

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    je suis bien connecté, voici le code:

    <?PHP
    $server = "";
    $user = "";
    $password = "";
    $base = "";
    mysql_connect($server,$user,$password);
    mysql_select_db($base);
    $nom = mysql_escape($nom);
    $prenom = mysql_escape($prenom);
    $count = 0;
    $table = 'webmaster';
    $sql = "SELECT Count(*) FROM $table WHERE nom='$nom'";
    $res = mysql_query( $sql );
    if ($res) {
    $count = mysql_result($res, 0, 0 );
    }
    if ($count <= 0)
    {
    $sql = "INSERT INTO $table (nom, prenom) VALUES ('$nom','$prenom');";
    }
    ?>

  12. #12
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    tu dois etre conneter avec mysql_connect pour pouvoir utiliser cette methode.
    En l'occurence la fonction n'existe pas. Je pencherait pour mysql_real_escape_string.

    La lecture des messages d'erreurs ne portent pas atteinte au cerveau

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Je n'ai plus de message d'erreur mais je ne parviens plus a enregistrer les infos sans ma table;

    TABLE webmaster (
    nom varchar(255) NOT NULL default '',
    prenom varchar(255) NOT NULL default ''
    ) TYPE=MyISAM;

    peut etre que je dois definir un champ key ?



    Ce code ne permet que d'enregistrer une nouvelle ligne, et pour modifier une ligne existante que dois je faire :
    if ($count <= 0)
    {
    $sql = "INSERT INTO $table (nom, prenom) VALUES ('$nom','$prenom');";
    else
    $sql = "UPDATE INTO $table (nom, prenom) VALUES ('$nom','$prenom');";
    }

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if ($count <= 0)
      $sql = "INSERT INTO $table (nom, prenom) VALUES ('$nom','$prenom')";
    else
       $sql = "UPDATE INTO $table (nom, prenom) VALUES ('$nom','$prenom')";

  15. #15
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Ah je viens de voir que ton update est pas bon.

  16. #16
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    il faudrait savoir quoi updater et pourqoi pour faire la requete.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    J'ai toujours un probleme, il ne fait que des INSERT

    $nom = mysql_real_escape_string($nom);
    $prenom = mysql_real_escape_string($prenom);
    $count = 0;
    $table = 'webmaster';
    $sql = "SELECT count(*) FROM $table WHERE nom='$nom'";
    $res = mysql_query( $sql );
    if ($res) {
    $count = mysql_result($res, 0, 0 );
    }
    if ($count <= 0) {
    $sql = "INSERT INTO $table (nom, prenom) VALUES ('$nom','$prenom')";
    echo "INSERT";}
    else {
    $sql = "UPDATE INTO $table (nom, prenom) VALUES ('$nom','$prenom')";
    echo "UPDATE";}

    ?>

    Merci pour votre soutient

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Points : 1 077
    Points
    1 077
    Par défaut
    pour le update c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE table set champs='champ',... where nom='paul'
    Mais je vois que dans ta table il n'y pas de clef primaire ce qui est tres dangereux alors je te conseil d en faire une surtout si tu veux eviter les doublons.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Rien ne fonctionne je ne comprends pas.....
    Rien ne fonctionne je ne comprends pas.....


    J'essaie de comprendre et pourtant rien ne fonctionne, meme INSERT INTO n'insert plus rien, je ne comprends plus .

    Pitié aidez moi :

    Voici le code du fichier valide.php

    <?PHP
    $server = "";
    $user = "";
    $password = "";
    $base = "";
    mysql_connect($server,$user,$password);
    mysql_select_db($base);
    $nom = mysql_real_escape_string($nom);
    $prenom = mysql_real_escape_string($prenom);
    $count = 0;
    $table = 'webmaster';
    $sql = "SELECT count(*) FROM $table WHERE nom='$nom'";
    $res = mysql_query( $sql );
    if ($res) {
    $count = mysql_result($res, 0, 0 );
    }
    if ($count <= 0) {
    $sql = "INSERT INTO $table (nom, prenom) VALUES ('$nom','$prenom')";
    echo "le nouveau joueur est inscrit";}
    else {
    $sql = "UPDATE $table nom='$nom',' prenom='$prenom')";
    echo "La fiche du joueur est reactualisée";}
    ?>
    Voici ma table SQL

    CREATE TABLE webmaster (
    nom varchar(255) NOT NULL default '',
    prenom varchar(255) NOT NULL default '',
    PRIMARY KEY (nom)
    ) TYPE=MyISAM;

  20. #20
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    voila pour l'update ca serais mieux :

    $sql = "UPDATE webmaster SET prenom='$prenom' WHERE nom='$nom'";
    Nicolas BUI

Discussions similaires

  1. [MySQL] Fonction UPDATE PHP+SQL
    Par Lekno dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2012, 17h55
  2. [Linq to Sql] Insert ou update ? telle est la question ...
    Par Ntotor dans le forum Accès aux données
    Réponses: 5
    Dernier message: 19/11/2008, 14h24
  3. Réponses: 8
    Dernier message: 18/01/2008, 15h58
  4. [sql Flash] Lecture BDD dans Flash , INSERT ou UPDATE
    Par Keroik dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/08/2007, 11h20
  5. [Pl/Sql] Insert ou Update dans une fonction
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 12
    Dernier message: 18/04/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo