probleme de ' ou de " dans une chaine en php

WRInaute occasionnel
bjr à tous

voulà bientot longtemsp que je n'ai plus touché à un bout de php

j'essais actuellement d'enregistrer des variables dans une table


Code:
$sql = " INSERT INTO `user` (`id`,`iduser`,`activation`,`ddate`,`mdate,`ydate`, `ip_adresse`,`email`,`password`,`nom`,`prenom`, `adresse`,`codepostal`,`ville`,`pays`,`jour`,`mois`, `annee`,`titresite`,`url`) 
VALUES ('',$iduser,0,$ddate,$mdate,$ydate,$ip_adresse,$email,$password, $nom,$prenom,$adresse,$codepostal,$ville,$pays,$jour,$mois, $annee,$titresite,$url)"; 
$result = mysql_query($sql);


mais cela ne mrche pas
je pense à un pb de ' ou de "

pouvez vous m'aider svp
merci :(
 
WRInaute impliqué
Re: probleme de ' ou de " dasn une chaine en php

Code:
$sql = "
    INSERT INTO user 
        ( 
            id ,
            iduser, 
            activation, 
            ddate, 
            mdate, 
            ydate, 
            ip_adresse, 
            email, 
            password, 
            nom, 
            prenom, 
            adresse, 
            codepostal, 
            ville, 
            pays, 
            jour, 
            mois, 
            annee, 
            titresite, 
            url 
        ) 
        VALUES 
        ( 
            '',
            mysql_real_escape_string( $iduser ),
            0, 
            mysql_real_escape_string( $ddate ),
            mysql_real_escape_string( $mdate ),
            mysql_real_escape_string( $ydate ),
            mysql_real_escape_string( $ip_adresse ),
            mysql_real_escape_string( $email ), 
            mysql_real_escape_string( $password ),
            mysql_real_escape_string( $nom ), 
            mysql_real_escape_string( $prenom ),
            mysql_real_escape_string( $adresse ), 
            mysql_real_escape_string( $codepostal ), 
            mysql_real_escape_string( $ville ), 
            mysql_real_escape_string( $pays ),  
            mysql_real_escape_string( $jour ),  
            mysql_real_escape_string( $mois ), 
            mysql_real_escape_string( $annee ), 
            mysql_real_escape_string( $titresite ),
            mysql_real_escape_string( $url )
        )
    "; 

if( ! $result = mysql_query($sql) ) {
    trigger_error( E_USER_ERROR, mysql_error() );
}

PS1: j'ai mis mysql_real_escape_string sur tous les champs car je ne sais pas lesquels sont des champs texte et lesquels sont numériques.

PS2: le champs id est autoincrémenté je pense, on peut donc le virer.

PS3: id et iduser me semblent redondants

PS4: si le champs activation doit toujours être à 0 lors d'une insertion, le déclarer comme NOT NULL avec une valeur par défaut de 0, tu peux alors le virer de la requête

PS5: il y a un type DATE dans mysql
 
WRInaute accro
Déjà, si t'as autant de champs a inscrire, je ne te conseille pas cette "syntaxe" pour les insert.
Je trouve que c'est plus simple à modifier dans le futur:
Code:
INSERT INTO table SET champ1=valeur1,champ2=valeur2
Là tu ne dois pas te soucier de respecter l'ordre

Il te manque un "backtick" après mdate.
 
WRInaute impliqué
spoutnik a dit:
Je trouve que c'est plus simple à modifier dans le futur:
Code:
INSERT INTO table SET champ1=valeur1,champ2=valeur2

Et complètement pas portable, c'est une syntaxe 100% mysql. En plus de devoir remplacer les mysql_xxx ( puisqu'aucune couche d'abstraction n'est utilisée ), il faudra aussi revoir tous les INSERT en cas de changement de SGBD ou si MySQL décide d'abandonner cette syntaxe.
 
Discussions similaires
Haut