Page 1 sur 2

Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 10:00
par weshpub
Bonjour,

J'aimerais savoir, comment inserer des données via un formulaire html à ma base de données depuis
le code ci-dessous, mais sans utiliser la requête de connexion au serveur, mais en regardant un fichier settings.php,
qui lui contient déjà les instructions de connexion à ma base.
  $cnx = mysql_connect( "localhost", "root", "password" ) ;
  $db  = mysql_select_db( "bdd" ) ;
Merci d'avance.
P.S : en même temps, si quelqu'un peut me dire si mon code est bien écrit !
Weshpub

demo.html
<h3>Module de test</h3>
<form name="insertion" action="insertion.php" method="POST">
      <td><div align="left">Nom :</div></td>
      <td><input type="text" name="login"></td>
      <td><div align="left">Code postal :</div></td>
      <td><input type="text" name="cp"></td>
      <td><div align="left">Ville :</div></td>
      <td><input type="text" name="ville"></td>
      <td><div align="left">Pays :</div></td>
      <td><input type="text" name="pays"></td>
      <td colspan="2"><input type="submit" class="form_button" value="insérer"></td>
    </tr>
</form>
insertion.php
<?php
  //connection au serveur
  $cnx = mysql_connect( "localhost", "root", "password" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "bdd" ) ;
 
  //récupération des valeurs des champs:
  //nom:
  $login     = $_POST["login"] ;
  //code postal:
  $cp        = $_POST["cp"] ;
  //ville:
  $ville        = $_POST["ville"] ;
  //pays:
  $pays       = $_POST["pays"] ;
 
  //création de la requête SQL:
  $sql = "INSERT  INTO carte (login, cp, ville, pays)
            VALUES ( '$login', '$cp', '$ville', '$pays') " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>
settings.php
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// Paramètres de la base de données

$hote = "localhost" ;         // Nom de votre serveur SQL
$utilisateur = "root" ;       // Nom d'utilisateur SQL
$baseDeDonnees = "bdd" ;      // Nom de la base de données
$motDePasse = "password" ;    // Mot de passe SQL
$tableUtilisee = "carte" ;    // Nom de la table utilisée (par défaut "carte")

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// Paramètres des champs
// Nom des champs de votre base

$champId = 'id';
$champNom = 'login';	
$champCodePostal = 'cp';
$champVille = 'ville';
$champPays = 'pays';

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 10:45
par Ryle
Si j'ai bien compris ce que tu veux faire, il te faut utiliser include() ou require() pour inclure ton fichier setting à ton script, et ainsi récupérer les informations qu'il contient comme si elles étaient présentes dans le script à l'endroit de l'inclusion.

Sinon concernant ton code, deux petites remarques :
- la première concernant le html : tu as des balises <td> (table data) qui se baladent, mais pour être valide, celles-ci devraient systématiquement être placée dans un <tr> (table row), elles même situées dans un <table> :
<table>
  <tr>
    <td> ... </td>
    ...
  </tr>
  ...
</table>
- La seconde concerne la sécurité : lorsque tu récupères les données fournies par l'utilisateur ($_POST["ville"] ...), avant de les insérer dans ta base de données, il est important de les contrôler et de les protéger pour éviter ce que l'on appelle des "injections SQL". C'est à dire éviter que l'utilisateur ne puisse altérer ta requête et exécuter ses propres requêtes sur ta base de données. Pour cela on utilise entre autre la fonction mysql_real_escape_string() :)

Bon courage ! :)

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 10:49
par weshpub
Merci pour ta réponse rapide Ryle,
Je vais essayer tout ça, et je reviens faire le point plus tard.

Bon dimanche,

Weshpub

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 11:08
par weshpub
Est-ce un include() ou un include_once() qu'il faut dans mon cas ?

Je suis un peu lourdé, je suis aller voir sur php.net, mais c'est pas tout clair dans ma tête !!!! #-o

Sinon, j'ai modifié ($_POST["ville"] ...) comme tu me l'a dit, est-ce correct cette fois ci ?
<?php
  //connection au serveur
  $cnx = mysql_connect( "localhost", "root", "password" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "bdd" ) ;
  
  //récupération des valeurs des champs:
  //nom:
  mysql_real_escape_string($login);
  //code postal:
  mysql_real_escape_string($cp);
  //ville:
  mysql_real_escape_string($ville);
  //pays:
  mysql_real_escape_string($pays);
  //création de la requête SQL:
  $sql = "INSERT  INTO carte (login, cp, ville, pays)
            VALUES ( '$login', '$cp', '$ville', '$pays') " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 11:18
par Ryle
A la base, include a pour but de te permettre d'inclure n'importe quel autre page. Sauf que certains fichiers ne doivent être inclus qu'une seule fois (les classes ou les déclarations de fonction par exemple). Avec include tu peux inclure un fichier A et un fichier B à ton script, mais chacun de ces fichier (A et B) peuvent également inclure un même fichier C.

Ceci fonctionne quand tu inclus uniquement A ou uniquement B, mais si tu inclus A et B, le fichier C sera inclut deux fois. La fonction include_once permet, quand tu n'es pas sur de ce que tu inclus, de laisser php tester si le fichier a déjà été inclut (et donc de ne pas l'inclure à nouveau)

Concernant les injections SQL, il te faut quand même indiquer d'où provient la valeur que tu récupères (donc de $_POST), par exemple :
$login = mysql_real_escape_string($_POST['login']);
Tu peux ainsi utiliser ta variable $login dans tes requêtes sql sans t'inquiéter du code sql que pourrait rajouter un utilisateur malveillant :)

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 12:16
par weshpub
Bon, j'ai fais ce qu'il y a en dessous, le script s'exécute, mais je n'ai aucune données enregistrées dans ma table !

:oops: Wesh :oops:
<?php
  //connection au serveur
include '../config/settings.php';  
  //récupération des valeurs des champs:
  //nom:
  $login = mysql_real_escape_string($_POST['login']);
  //code postal:
  $cp = mysql_real_escape_string($_POST['cp']);
  //ville:
  $ville = mysql_real_escape_string($_POST['ville']);  
  //pays:
  $pays = mysql_real_escape_string($_POST['pays']); 
  //création de la requête SQL:
  $sql = "INSERT  INTO carte (login, cp, ville, pays)
            VALUES ( '$login', '$cp', '$ville', '$pays') " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 12:50
par weshpub
Je pense que ça vient de la requête SQL

Code : Tout sélectionner

//exécution de la requête SQL: $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;

Code : Tout sélectionner

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /mnt/164/sdb/c/7/htdocs/carte/install/insertion.php on line 6 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /mnt/164/sdb/c/7/htdocs/carte/install/insertion.php on line 8 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /mnt/164/sdb/c/7/htdocs/carte/install/insertion.php on line 10 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /mnt/164/sdb/c/7/htdocs/carte/install/insertion.php on line 12 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /mnt/164/sdb/c/7/htdocs/carte/install/insertion.php on line 18

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 14:08
par Ryle
As-tu déplacé le bloc de connexion/choix de la bdd dans ton fichier settings ? Il faut soit les déplacer soit les laisser dans ton script, sinon il va effectivement manquer la connexion pour que php puisse exécuter la requête chez mysql :)
  //connection au serveur
  $cnx = mysql_connect( "localhost", "root", "password" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "bdd" ) ;

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 15:00
par stealth35
hello, t'as quelle version de PHp ?

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 15:06
par weshpub
Ok, alors j'ai ça dans insertion.php
<?php
  //connection au serveur
include '../config/settings.php';  
  //récupération des valeurs des champs:
  //nom:
  $login = mysql_real_escape_string($_POST['login']);
  //code postal:
  $cp = mysql_real_escape_string($_POST['cp']);
  //ville:
  $ville = mysql_real_escape_string($_POST['ville']);  
  //pays:
  $pays = mysql_real_escape_string($_POST['pays']); 
  //création de la requête SQL:
  $sql = "INSERT  INTO carte (login, cp, ville, pays)
            VALUES ( '$login', '$cp', '$ville', '$pays') " ;
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $hote, $utilisateur, $motDePasse) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>
et ça dans settings.php
// Paramètres de la base de données
    
$hote = "localhost" ;               // Nom de votre serveur SQL
$utilisateur = "root" ;        // Nom d'utilisateur SQL
$baseDeDonnees = "bdd" ;      // Nom de la base de données
$motDePasse = "password" ;             // Mot de passe SQL
$tableUtilisee = "carte" ;        // Nom de la table utilisée (par défaut "carte")

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// Paramètres de champs
// Nom des champs de votre base

$champId = 'id';
$champNom = 'login';    
$champCodePostal = 'cp';
$champVille = 'ville';
$champPays = 'pays';

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 15:13
par weshpub
Pour répondre à stealth35, ma version PHP est 5.1.3RC4-dev

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 15:18
par stealth35
Pour répondre à stealth35, ma version PHP est 5.1.3RC4-dev
chez free :wink:

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 16:03
par weshpub
Oui, chez free pour le moment, et si mon script fonctionne bien, il sera hébergé chez 1and1.

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 16:18
par stealth35
chez 1and1 t'aura PDO, donc niveau amélioration et sécurité ca sera beaucoup mieux

Re: Besoin d'aide pour améliorer mon script

Posté : 10 oct. 2010, 16:30
par sadeq
Bonjour,
Tu as oublié d'ouvrir la connexion au serveur, c'est à dire ce bloc:
//connection au serveur
  $cnx = mysql_connect( "localhost", "root", "password" ) ;
 
  //sélection de la base de données:
  $db  = mysql_select_db( "bdd" ) ;