Inserer les données dans la mysql

Petit nouveau ! | 1 Messages

12 sept. 2011, 16:07

Bonjour à tous,
Je rencontre un probleme ici qui ne me permet pas d' écrire dans la base des données distante,
En effet, lorsque je travaille en local avec (Localhost) ca se passe sans trop de problems mais du moment oû je loge dans la base des données distante mysql, je remarque que les données ne sont pas écrites et que plutôt il y a des champs vides qui donne l' impression d' avoir recu les données c à d le Id s'ajoute pendant que les autres champs de la colonne sont vides, voici le code que j'utilise pour mon formulaire et merci de me dire sur ce qui ne va pas.
    <form method="post" action="Message.php">
      <center>
        <table width="467" height="196" cellpadding="0">
          <tr>
            <td width="314"><div align="right" class="Style11"><font color="red">*</font> Nom : </div></td>
            <td width="347"><div align="left">
                <input type="text" name="nom" size="30"  value="" maxlength="35" />
            </div></td>
          </tr>
          <tr>
            <td width="314"><div align="right" class="Style11"><font color="red">*</font> Post-nom : </div></td>
            <td width="347"><div align="left">
                <input type="text" name="post_nom" size="30"  value="" maxlength="35" />
            </div></td>
          </tr>
          <tr>
            <td><div align="right" class="Style11"><font color="red">*</font> E-mail :</div></td>
            <td><div align="left">
                <input type="text" name="mail" size="30"  value="" maxlength="35" />
            </div></td>
          </tr>
          <tr>
            <td><div align="right" class="Style11"><font color="red">*</font>Message :</div></td>
            <td><div align="left">
                <textarea name="message" rows="8" cols="45"></textarea>
            </div></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><div align="left">
                <p>
                  <input type="submit" value="Envoyer" name="Envoyer"/>
                  <input name="R&eacute;initialiser" type="reset" value="R&eacute;initialiser"/>
                </p>
            </div></td>
          </tr>
        </table>
        <p>&nbsp;</p>
      </center>
      <span class="Style11">Les champs marqu&eacute;s par <font color="red">*</font> sont obligatoires </span>
    </form>


<?php 

//On recupere les champs du formulaire 
if(isset($_POST['nom'])) $nom=$_POST['nom'];
	else	$nom="";

if(isset($_POST['post_nom'])) $post_nom=$_POST['post_nom'];
	else	$post_nom ="";
	
if(isset($_POST['mail'])) $mail=$_POST['mail'];
	else	$mail ="";
	
if(isset($_POST['message'])) $message=$_POST['message'];
	else	$message="";
	
// Connexion à la base de donnees
$amgo = mysql_pconnect('mysql12.000webhost.com','nom_base_de_données','mot_de_passe') or die ('Erreur de connexion'.mysql_error());
// On selectionne la base de donnees
mysql_select_db('nom_base_de_données',$amgo) or die ('Erreur de selection'.mysql_error());
// On ecrit la requete sql
$sql = "INSERT INTO suggestions (id, nom, post_nom, mail, message) VALUES('','$nom','$post_nom','$mail','$message')";
//On insere les informations du formulaire dans la table
mysql_query($sql) or die('ErreurSQL !'.$sql.'<br>'.mysql_error());
	
// Déconnexion de MySQL
mysql_close($amgo);
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 sept. 2011, 17:00

A chaque fois que tu ouvres cette page, php va :
- afficher le formulaire
- récupérer les données qui ont éventuellement été envoyées (ou mettre les valeurs à vide)
- insérer un nouvel enregistrement en base.

Mais puisqu'il n'y a aucun contrôle pour vérifier si des données ont été envoyées via le formulaire avant l'insertion en base, cela veut dire que le simple fait d'ouvrir la page va afficher le formulaire, initialiser toutes les valeurs à vide, et créer un enregistrement vide dans ta base de données :)

Ajoutes un contrôle sur l'un des champs de ton formulaire (généralement ça se fait sur le bouton submit) pour savoir s'il faut ou non enregistrer les données :
if (isSet($_POST['Envoyer'])) { 
 ... // ton traitement de récup et d'enregistrement des données
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...