Bug d'insert into via script php

Bonjour à tous,

Voila j’ai un petit problème sur mon script qui me permet d’ajouter manuellement des information afin de les rentré dans une table.

Concretement j’utilise un formulaire simple qui est le suivant :


	<div class="well">
		<form name="form1" method="post" action="/fr/administration/web/add/valid/">
			<label>Pseudo</label><input class="span3" name="name" type="text" id="pseudo">
			<label>Hôte</label><input class="span3" name="name" type="text" id="hote">
			<label>Espace disque</label><input class="span3" name="name" type="text" id="hdd">
			<label>Login FTP</label><input class="span3" name="name" type="text" id="loginftp">
			<label>Mot de passe FTP</label><input class="span3" name="name" type="text" id="passftp">
			<label>Login MYSQL</label><input class="span3" name="name" type="text" id="loginmysql">
			<label>Mot de passe MYSQL</label><input class="span3" name="name" type="text" id="passmysql">
			<label>Debut de location</label><input class="span3" name="name" type="text" id="debutloc"><br />
			<td>
				<center>
					<input type="submit" class="btn btn-small btn-primary" name="Submit" value="Ajouter l'hebergement">
				</center>
			</td>
		</form>
	</div>

Une fois que je valide l’insert sa travaille avec le script suivant :


<?php
	$host="localhost";
	$username="root";
	$password="xxx";
	$db_name="table";
	$tbl_name="hebergement_web"; // NE PAS TOUCHER
	// Connection au serveur mysql
	mysql_connect("$host", "$username", "$password")or die("Connection au serveur mysql impossible");
	mysql_select_db("$db_name")or die("bdd introuvable");
	// Ont recup les variables
	$pseudo=$_POST['pseudo'];
	$hote=$_POST['hote'];
	$hdd=$_POST['hdd'];
	$loginftp=$_POST['loginftp'];
	$passftp=$_POST['passftp'];
	$loginmysql=$_POST['loginmysql'];
	$passmysql=$_POST['passmysql'];
	$debutloc=$_POST['debutloc'];
	// Ont insert les nouvelle variable
	$sql="INSERT INTO $tbl_name(pseudo, hote, hdd, loginftp, passftp, loginmysql, passmysql, debutloc)VALUES('$pseudo', '$hote', '$hdd', '$loginftp', '$passftp', '$loginmysql', '$passmysql', '$debutloc')";
	$result=mysql_query($sql);
	// Ont est gentil ont affiche un petit mot de validation d'ajout
	if($result){
	echo "Hebergement ajouter avec succes";
	echo "<br />";
	echo "<a href='/fr/administration/web/liste/'>Voir la liste</a>";
	}
	else {
	echo "ERREUR";
	}
?>

Il m’insert bien L’ID en autoincrement par contre les autre info sont vide :frowning:

Voici la table SQL


--
-- Structure de la table `hebergement_web`
--

CREATE TABLE IF NOT EXISTS `hebergement_web` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `pseudo` varchar(65) NOT NULL DEFAULT '',
  `hote` varchar(65) NOT NULL DEFAULT '',
  `hdd` varchar(65) NOT NULL DEFAULT '',
  `loginftp` varchar(65) NOT NULL DEFAULT '',
  `passftp` varchar(65) NOT NULL DEFAULT '',
  `loginmysql` varchar(65) NOT NULL DEFAULT '',
  `passmysql` varchar(65) NOT NULL DEFAULT '',
  `debutloc` varchar(65) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Contenu de la table `hebergement_web`
--

INSERT INTO `hebergement_web` (`id`, `pseudo`, `hote`, `hdd`, `loginftp`, `passftp`, `loginmysql`, `passmysql`, `debutloc`) VALUES
(1, '', '', '', '', '', '', '', '');

En esperant qu’ont puisse m’aidé

Cordialement

Normal :slight_smile:
Ce qui donne le nom de tes variables PHP, c’est l’attribut name des champs input. C’est donc vide parce que tu mets name=“name” pour chacun (ou presque) des champs.

Et par ailleurs, si tu veux éviter des problèmes d’injections SQL :

$sql="INSERT INTO $tbl_name(pseudo, hote, hdd, loginftp, passftp, loginmysql, passmysql, debutloc)VALUES('$pseudo', '$hote', '$hdd', '$loginftp', '$passftp', '$loginmysql', '$passmysql', '$debutloc')";

->

$sql= sprintf(
  "INSERT INTO $tbl_name(pseudo, hote, hdd, loginftp, passftp, loginmysql, passmysql, debutloc)VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
  mysql_real_escape_string($pseudo),
  mysql_real_escape_string($hote),
  mysql_real_escape_string($hdd),
  mysql_real_escape_string($loginftp),
  mysql_real_escape_string($passftp),
  mysql_real_escape_string($loginmysql),
  mysql_real_escape_string($passmysql),
  mysql_real_escape_string($debutloc)
);

C’est assez sommaire (y a par exemple PDO et les requêtes préparés), mais au moins tu éviteras d’injecter des mauvaises valeurs (nommément, tout ce qui contient des apostrophes) pouvant faire planter ton script ou pire, le détourner de son but original.

oOlol J’ai confondu l’id & le name autant pour moi :frowning:

Merci pour l’injection sql :slight_smile:

Problème resolu merci :smiley:
Edité le 03/09/2012 à 11:46

De rien,

Tu peux marquer le sujet comme [Résolu] ? :slight_smile:

(bouton http://www.clubic.com/forum/img/editer_off.gif à gauche sur ton premier message)