[PHP] Problème d'enregistrement en base

Problème d'enregistrement en base [PHP] - PHP - Programmation

Marsh Posté le 06-06-2009 à 18:30:50    

salùù tout le monde je ss nouveau sur le forum et je ss débutant en php  
 
dernièrement j'ai eu un problème dans le script de mon page d'inscription  
 
premièrement voila la partie important de mon script  

Citation :


.
..
...
if($mysql->requete("INSERT INTO membres VALUES('','".$pseudo."','".md5($_POST['passe'])."',".$_POST['sexe'].",".mktime(0,0,0,$_POST['mois'],$_POST['jour'],$_POST['annee']).",'".$_POST['ville']."',0,0)",0,0,1))
    {
    $bienvenu = "bienvenue sur ZVJ web site bla bla bla ...";
                                $admine='admine';
 
     
                 mysql_query("INSERT INTO messages VALUES('', '".$admine."', '".$bienvenu."', '".$admine."', '".$pseudo."')" );
     
     session_start();  
     $_SESSION['pseudo'] = $pseudo;
     $_SESSION['pass'] = $_POST['passe'];  
     header('Location: conex.php');
    }
    else
    {
     header('location:inscription.php?confirm=5');
    }
...
..
.
.


 
ce scripte est fait pour enregistrer le nouveau membre puis de envoyer un message de bienvenu  
 
voila ce que ce passe :
le membre s'enregistre normalement mé le message non plus  :??:  
 
voila la table message :
http://img141.imageshack.us/img141/7050/tableq.jpg
 
merci de votre repense    !!  :hello:
 
 
Édité par Elmoricq : modification du titre du sujet (cf. règles de la catégorie).


Message édité par Elmoricq le 06-06-2009 à 22:13:41
Reply

Marsh Posté le 06-06-2009 à 18:30:50   

Reply

Marsh Posté le 06-06-2009 à 19:04:39    

Premièrement, je vois que tu utilises un objet ($mysql) pour exécuter la première requête, et puis ensuite tu utilises mysql_query, pourquoi ?
Ensuite, ta méthode requete() de ton objet $mysql échappe-t-elle les données $_POST ? Sinon, il est possible d'injecter du code SQL (voir injection SQL dans google).
Après, tu n'est pas obligé de faire :

Code :
  1. mysql_query("INSERT INTO messages VALUES('', '".$admine."', '".$bienvenu."', '".$admine."', '".$pseudo."')" );


En effet, les variables contenues au sein de chaines délimitées par des guillemets doubles sont interprétées sans avoir recours à la concaténation. Une version plus simple et plus lisible pourrait être :

Code :
  1. mysql_query("INSERT INTO messages VALUES('', '$admine', '$bienvenu', '$admine', '$pseudo')" );


Après, j'ai un doute sur la façon dont tu as conçu tes tables. Par exemple, inscri_ou_pas devrait être inscrit_ou_pas (tu peux même trouver un nom plus simple) et le type ne devrait pas être "text" mais "boolean". Et puis, dstina devrait à mon avis contenir un entier représentant l'ID du membre destinataire ;), tout comme pseudo qui contiendra l'ID de l'envoyeur.

Reply

Marsh Posté le 06-06-2009 à 19:07:54    

j'aime les nom de tes champs sql!  
 

Citation :


le membre s'enregistre normalement mé le message non plus


 
Quel message?
 
t'as des messages d'erreurs qui apparaissent?


---------------
http://petitjonas.blogspot.com/
Reply

Marsh Posté le 06-06-2009 à 19:09:57    

jonas3 a écrit :

j'aime les nom de tes champs sql!  
 

Citation :


le membre s'enregistre normalement mé le message non plus



1)
Quel message?
 
2)t'as des messages d'erreurs qui apparaissent?


1) Le message de bienvenue (c'est ce que j'ai compris)
2)Très juste, rajoute un echo mysql_error(); après l'appel de mysql_query(), drmoh.

Reply

Marsh Posté le 06-06-2009 à 22:09:00    


 
oui enfaite je crois voila le code qui est fait pour ça

Code :
  1. if(isset($_POST['pseudo']) AND !eregi("[\^'?\\]",$_POST['pseudo']) AND isset($_POST['ville']) AND !eregi("[\^'\\]",$_POST['ville']) AND strlen($_POST['pseudo'])<=25 AND strlen($_POST['pseudo'])>=3 AND isset($_POST['jour']) AND is_numeric($_POST['jour']) AND $_POST['jour']>0 AND $_POST['jour']<32 AND isset($_POST['mois']) AND is_numeric($_POST['mois']) AND $_POST['mois']>0 AND $_POST['mois']<13 AND isset($_POST['annee']) AND is_numeric($_POST['annee']) AND strlen($_POST['annee'])===4 AND 1949<$_POST['annee']AND $_POST['annee']<1997 AND isset($_POST['sexe']) AND is_numeric($_POST['sexe']) AND ($_POST['sexe']==='0' OR $_POST['sexe']==='1'))


 
 
j'ai déjà essayer mais ça n'a pas marcher aussi !!
 
 
 
 
la table messages n'est pas fait juste pour cela, elle est aussi fait pour me contacter (webmaster) alors aussi les visiteur non inscrit peut me envoyer des message alors je peux pas utiliser l'ID pour l'envoyeur. sinon pour le destinataire  j'ai utiliser son pseudo car je vois que c'est plus simple !!
 
 

Citation :

rajoute un echo mysql_error(); après l'appel de mysql_query()


 
je vais essayer de faire ça et je vais vous répondre plus tard
 
si non pour jonas  le message de bienvenue

Reply

Marsh Posté le 07-06-2009 à 02:08:41    

reuh !!
 
j fé echo mysql_error() il n'y a pas de message erreur
pour le type boolean je l pas trouvé alors j changé le type text par varchar
 
 
 
 
si non j fé un test de $admine et $bienvenu et $pseudo (par echo)  et ca n'a r1 donné  :??: alors il sont null :??: pk ?? j'en sais pas !!
alors je les deplacé au debut du code et ça marché pour $admine et $bienvenu contrairement a  $pseudo  :??: ce que je ne compren pas c pourkoi l'enregistrement du nouveau membre ça marche si le variable $pseudo est null ??????

Reply

Marsh Posté le 07-06-2009 à 02:53:59    

J'ai riens compris.


---------------
http://petitjonas.blogspot.com/
Reply

Marsh Posté le 07-06-2009 à 03:04:16    

dsl pour mon français :$
 
sinon ta pas compris quoi exactement !!

Reply

Marsh Posté le 07-06-2009 à 10:28:41    

drmoh a écrit :

reuh !!
 
j fé echo mysql_error() il n'y a pas de message erreur
pour le type boolean je l pas trouvé alors j changé le type text par varchar


Utilise tinyint(1)
 

drmoh a écrit :


si non j fé un test de $admine et $bienvenu et $pseudo (par echo)  et ca n'a r1 donné  :??: alors il sont null :??: pk ?? j'en sais pas !!
alors je les deplacé au debut du code et ça marché pour $admine et $bienvenu contrairement a  $pseudo  :??: ce que je ne compren pas c pourkoi l'enregistrement du nouveau membre ça marche si le variable $pseudo est null ??????


Ajoute çà au tout début de ton script :

Code :
  1. error_reporting(E_ALL | E_STRICT);

on en saura un peu plus.

Reply

Marsh Posté le 07-06-2009 à 20:34:43    

ça va !! ça marché j trouvé une autre solution pour l'info j inséré manuellement le message bienvenu dans la table messages et j'ai laissé la champs dstina vide et j fait ça

Code :
  1. $sql = mysql_query("SELECT * FROM messages WHERE dstina='".$_SESSION['pseudo']."' OR dstina= ''" );

pour lire la table comme ça  tout les utilisateur peuvent recevoir  ce message !! ;)  
 
sinon  si il y'a qq1 peut m'expliquer ce erreur est due a quoi ça va être très gentille de sa part

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed