[PHP-MYSQL] Ecriture dans une DB

Résolu/Fermé
erathia65660 Messages postés 3 Date d'inscription samedi 10 mars 2012 Statut Membre Dernière intervention 10 mars 2012 - Modifié par erathia65660 le 10/03/2012 à 15:57
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 - 10 mars 2012 à 21:30
Bonjour,

J'ai un problème sur la partie d'un script qui permet l'écriture dans une base de données d'information contenues dans un formulaire.
Voici le script php:

if(isset($_GET['auteur']))  
{  
 // Si le formulaire d'enregistrement d'auteur a été soumis  
   
 $err = array();  

 if(!$_POST['nom'] || !$_POST['prenom'] || !$_POST['ville'] || !$_POST['ddn'])  
  $err[] = 'Tout les champs doivent être remplis!';  
   
 if(preg_match('^[a-z]*$',$_POST['nom']))  
 {  
  $err[]="Votre nom contient des caratères invalides!";  
 }  

 if(preg_match('^[a-z]*$',$_POST['prenom']))  
 {  
  $err[]="Votre prénom contient des caratères invalides!";  
 }  

 if(preg_match('^[a-z]*$',$_POST['ville']))  
 {  
  $err[]="Votre ville contient des caratères invalides!";  
 }  
   
 if(preg_match('^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$',$_POST['ddn']))  
 {  
  $err[]='Votre date de naissance est invalide!';  
 }  
   
 if(!count($err))  
 {  
  // S'il n'y a aucune erreur  
    
  // $_POST['exemple'] = mysql_real_escape_string($_POST['exemple']);  
  // Sécurisattion des inputs  
    
    
  mysql_query(" INSERT INTO auteurs(usr,nom,prenom,ville,ddn)  
      VALUES(  
       '".$_SESSION['usr']."'  
       '".$_POST['nom']."',  
       '".$_POST['prenom']."',  
       '".$_POST['ville']."',  
       '".$_POST['ddn']."'  
      )");  
    
  if(mysql_affected_rows($link)==1)  
  {  
   send_mail( 'no-reply@neoedition.com', //Envoit du mail avec le Mot de Passe  
      $_SESSION['email'],  
      'Système de notifications - Votre compte auteur',  
      $_POST['prenom'] . ' ' . $_POST['nom'] . ', votre compte auteur est désormais actif!');  

   $_SESSION['msg']['auteur-success']='Un mail vous a été envoyé!';  
  }  
  else $err[]="Vous avez déja un compte auteur existant";  
 }  

 if(count($err))  
 {  
  $_SESSION['msg']['auteur-err'] = implode('<br />',$err);  
 }   
   
 header("Location: index.php?page=auteur");  
 exit;  
}


Voici le code SQL de la DB:

CREATE TABLE IF NOT EXISTS 'auteurs' (  
  'id' int(11) NOT NULL AUTO_INCREMENT,  
  'usr' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',  
  'nom' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',  
  'prenom' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',  
  'ville' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',  
  'ddn' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '',  
  'style' int(2) NOT NULL DEFAULT '13',  
  PRIMARY KEY ('id'),  
  UNIQUE KEY 'usr' ('usr')  
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


Et voici le formulaire HTML:

  <form id="form" action="/?auteur" method="post">  
                    
                  <?php  
    if($_SESSION['msg']['auteur-err'])  
     {  
      echo '<div class="err">'.$_SESSION['msg']['auteur-err'].'</div>';  
      unset($_SESSION['msg']['auteur-err']);  
     }  
    if($_SESSION['msg']['auteur-success'])  
     {  
      echo '<div class="success">'.$_SESSION['msg']['auteur-success'].'</div>';  
      unset($_SESSION['msg']['auteur-success']);  
     }  
   ?>  
     
   <label class="grey" for="nom"><h2>Nom:</h2></label> </br>  
   <input class="field" type="text" name="nom" id="nom" value="" size="23" /> </br></br>  
   <label class="grey" for="prenom"><h2>Prénom:</h2></label> </br>  
   <input class="field" type="text" name="prenom" id="prenom" value="" size="23" /> </br></br>  
   <label class="grey" for="ville"><h2>Ville:</h2></label> </br>  
   <input class="field" type="text" name="ville" id="ville" value="" size="23" /> </br></br>  
   <label class="grey" for="ddn"><h2>Date de naissance (format JJ/MM/AAAA):</h2></label> </br>  
   <input class="field" type="text" name="ddn" id="ddn" value="" size="10" /> </br></br>  
         <label><input name="cgu" id="cgu" type="checkbox" checked="unchecked" />  Accepter les <a href="/display/?cgu" target="_blank">condition générales d'utilisation</a></label> </br></br>  
         <div class="clear"></div>  
   <input type="submit" name="submit" value="Valider" />  
  </form>


L'erreur est que sa n'écrit rien, et que le message d'erreur contenu dans la variable $err est
Vous avez déja un compte auteur existant


A voir également:

2 réponses

Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
10 mars 2012 à 19:27
Salut,

Essaie comme ça :

$req = mysql_query(" INSERT INTO auteurs(usr,nom,prenom,ville,ddn)
VALUES(
'".$_SESSION['usr']."'
'".$_POST['nom']."',
'".$_POST['prenom']."',
'".$_POST['ville']."',
'".$_POST['ddn']."'
)");

if(mysql_affected_rows($req)==1)

1
erathia65660 Messages postés 3 Date d'inscription samedi 10 mars 2012 Statut Membre Dernière intervention 10 mars 2012
10 mars 2012 à 21:28
Merci adrien, j'avait pas pensé a exploiter ma requête de cette manière, sa marche.
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
10 mars 2012 à 21:30
Impec alors, de rien ! ;)
0
Bonjour,
c'est votre code? Bizarre que vous ne sachiez pas ce qu'il fait.
Le problème que vous indiquez n'est pas un problème de requête SQL(langage de base de données) mais de validation de formulaire.

Pour la requête vous pouvez tester directement sur la base (depuis la console phpmyadmin si vous utilisez wamp), afficher l'erreur lors de l'envoi de la requête par php(or die( mysql_error()) ) et afficher cette requête avant son envoi pour voir si elle est correctement écrite.
0
erathia65660 Messages postés 3 Date d'inscription samedi 10 mars 2012 Statut Membre Dernière intervention 10 mars 2012
10 mars 2012 à 19:02
Justement, la requête est bonne, mais j'ai dut faire une erreur de syntaxe quelque part et vue que je suis novice, je pensait que quelqu'un allait voir l'erreur, dommage...

Le formulaire est transmis et mon if(isset($_GET[auteur])) me le confirme,
Le problème vient surement de mon if(mysql_affected_rows($link)==1)

ps:
$link = mysql_connect($db_host,$db_user,$db_pass) or die('Impossible d'/interagir avec la DB');
0