Problème de double insertion dans la base de donnée
sabrina_mef
Messages postés
17
Statut
Membre
-
AmiarZAk Messages postés 2 Statut Membre -
AmiarZAk Messages postés 2 Statut Membre -
Bonjour,
svp comment je peut résoudre ce problème
quand j'exécute une requête d'insertion a partir d'un code php, la même ligne est inséré 3 fois dans la table .
(j'ai désinstallé wampserver 2 fois dans la première fois l'ajout exécute 2 fois la même ligne et cette fois insère 3 fois la même ligne).

svp comment je peut résoudre ce problème
quand j'exécute une requête d'insertion a partir d'un code php, la même ligne est inséré 3 fois dans la table .
(j'ai désinstallé wampserver 2 fois dans la première fois l'ajout exécute 2 fois la même ligne et cette fois insère 3 fois la même ligne).

<?php
if(isset($_POST['sujet'])) {
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO rapport_tmp (sujet, encadreur, proprietaire, domaine, annee, unite, resume, piecejointe)
VALUES
('" . $_POST["sujet"] . "', '" . $_POST["encadreur"] . "', '" . $_POST["proprietaire"] . "', '" . $_POST["domaine"] . "', '" . $_POST["annee"] . "', '" . $_POST["unite"] . "','" . $_POST["resume"] . "','" . $_POST["piecejointe"] . "')";
$ok= $conn->query($sql);
$conn->close();
}
?>
<html>
<body>
<div align="center">
<form action="" method="POST">
<table width="90%">
<tr><td bgcolor="#C2E2DA"><label>Sujet<span style="color:#FF0000"> *</span></label></td>
<td><input name="sujet" type="text" value="" required="required"/></td>
<tr><td bgcolor="#C2E2DA"><label>Encadreur<span style="color:#FF0000"> *</span></label></td>
<td><input name="encadreur" type="text" value="" required="required"/></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Proprietaire<span style="color:#FF0000"> *</span></label></td>
<td><input name="proprietaire" type="text" value="" required="required" /></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Domaine<span style="color:#FF0000"> *</span></label></td>
<td><select name='domaine' required="required">
<option selected='selected'>domaine d'étude</option>
<option value='Informatique'>Informatique</option>
<option value='Gestion et Economie'>Gestion et Economie</option>
<option value='Science'>Science</option>
<option value='Mathématique'>Mathématique</option>
<option value='Technique'>Technique</option>
<option value='Juridique'>Juridique</option>
</select></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Année universitaire<span style="color:#FF0000"> *</span></label></td>
<td><select name="annee" required="required">
<option selected="selected" >selectionner l'année</option>
<option value="2008-2009">2008-2009</option>
<option value="2009-2010">2009-2010</option>
<option value="2010-2011">2010-2011</option>
<option value="2011-2012">2011-2012</option>
<option value="2012-2013">2012-2013</option>
<option value="2013-2014">2013-2014</option>
<option value="2014-2015">2014-2015</option>
</select></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Unité de recherche<span style="color:#FF0000"> *</span></label></td>
<td><select name='unite'>
<option selected='selected'>quelle établissement</option>
<option value='ISGG' required="required">ISGG</option>
<option value='FSEG'>FSEG</option>
<option value='ISLG'>ISLG</option>
<option value='ISIMG'>ISIMG</option>
<option value='ENIG'>ENIG</option>
<option value='H2O'>H2O</option>
<option value='ISSAT'>ISSAT</option>
</select></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Resumé<span style="color:#FF0000"> *</span></label></td>
<td><textarea cols="50" name="resume" rows="5" required="required"></textarea></td></tr>
<tr><td bgcolor="#C2E2DA"><label>Piéce Jointe<span style="color:#FF0000"> *</span></label></td>
<td><fieldset><input type="file" name="piecejointe" required="required"></fieldset></td></tr>
<tr><td bgcolor="#C2E2DA"></td><td><div align="right"><input type="submit" value="partagez"></div>
</td></tr>
</table>
</form></div>
</body>
</html>
3 réponses
-
Bonjour,
J'ai exécuté votre script sur ma machine, le résultat d'insertion est correcte :
Essayez juste d'écrire vos requêtes d'une façon a respecter la structure des requêtes préparées avec MySQLi afin d'assurer la meilleure sécurité en évitant les injections SQL.
voici votre scripte après l'avoir améliorer :
<?php // tester l'existance des variables if(isset($_POST['sujet']) and isset($_POST['encadreur'])and isset($_POST['proprietaire']) and isset($_POST['proprietaire']) and isset($_POST['domaine']) and isset($_POST['annee']) and isset($_POST['unite']) and isset($_POST['resume']) and isset($_POST['piecejointe'])) { // tester si les variables ne sont pas vides if (!empty($_POST['sujet']) and !empty($_POST['encadreur']) and !empty($_POST['proprietaire']) and !empty($_POST['proprietaire']) and !empty($_POST['domaine']) and !empty($_POST['annee']) and !empty($_POST['unite']) and !empty($_POST['resume']) and !empty($_POST['piecejointe'])) { $servername = "localhost"; $username = "root"; $password = ""; $dbname = "mabase"; // Filtrage des inputs (sécurisé les entrée afin d'éviter les injection SQL) $sujet = htmlspecialchars(addcslashes($_POST['sujet'], '\'')); $encadreur = htmlspecialchars(addcslashes($_POST['encadreur'], '\'')); $proprietaire = htmlspecialchars(addcslashes($_POST['proprietaire'], '\'')); $domaine = htmlspecialchars(addcslashes($_POST['domaine'], '\'')); $annee = htmlspecialchars(addcslashes($_POST['annee'], '\'')); $unite = htmlspecialchars(addcslashes($_POST['unite'], '\'')); $resume = htmlspecialchars(addcslashes($_POST['resume'], '\'')); $piecejointe = htmlspecialchars(addcslashes($_POST['piecejointe'], '\'')); // On utilise des requêtes prépéarées avec MySQLi pour assurer la sécurité de la base de donnée en évitant les injections SQL $link = mysqli_connect($servername, $username, $password, $dbname); echo "<h1> Connexion OK</h1>"; if(($stmt = mysqli_prepare($link, "INSERT INTO rapport_tmp VALUES(NULL,?,?,?,?,?,?,?,?)")) ) // NULL pour REF de type INT qui est un identificateur , on met NULL quand on insert pas de valeur a une colonne { echo "<h1> mysqli_prepare OK</h1>"; mysqli_stmt_bind_param($stmt, "sssssssb", $sujet, $encadreur, $proprietaire, $domaine, $annee, $unite, $resume, $piecejointe); // isssssssb : désigne le type des variable a inséré i : entier , s : string, b : blob echo "<h1> mysqli_stmt_bind_param OK</h1>"; mysqli_stmt_execute($stmt); echo "<h1> Insertion Reussit</h1>"; mysqli_stmt_close($stmt); }else {echo "<h1> Probleme d Insertion </h1>";} mysqli_close($link); } } ?> <html> <body> <div align="center"> <form action="" method="POST"> <table width="90%"> <tr><td bgcolor="#C2E2DA"><label>Sujet<span style="color:#FF0000"> *</span></label></td> <td><input name="sujet" type="text" value="" required="required"/></td> <tr><td bgcolor="#C2E2DA"><label>Encadreur<span style="color:#FF0000"> *</span></label></td> <td><input name="encadreur" type="text" value="" required="required"/></td></tr> <tr><td bgcolor="#C2E2DA"><label>Proprietaire<span style="color:#FF0000"> *</span></label></td> <td><input name="proprietaire" type="text" value="" required="required" /></td></tr> <tr><td bgcolor="#C2E2DA"><label>Domaine<span style="color:#FF0000"> *</span></label></td> <td><select name='domaine' required="required"> <option selected='selected'>domaine d'étude</option> <option value='Informatique'>Informatique</option> <option value='Gestion et Economie'>Gestion et Economie</option> <option value='Science'>Science</option> <option value='Mathématique'>Mathématique</option> <option value='Technique'>Technique</option> <option value='Juridique'>Juridique</option> </select></td></tr> <tr><td bgcolor="#C2E2DA"><label>Année universitaire<span style="color:#FF0000"> *</span></label></td> <td><select name="annee" required="required"> <option selected="selected" >selectionner l'année</option> <option value="2008-2009">2008-2009</option> <option value="2009-2010">2009-2010</option> <option value="2010-2011">2010-2011</option> <option value="2011-2012">2011-2012</option> <option value="2012-2013">2012-2013</option> <option value="2013-2014">2013-2014</option> <option value="2014-2015">2014-2015</option> </select></td></tr> <tr><td bgcolor="#C2E2DA"><label>Unité de recherche<span style="color:#FF0000"> *</span></label></td> <td><select name='unite'> <option selected='selected'>quelle établissement</option> <option value='ISGG' required="required">ISGG</option> <option value='FSEG'>FSEG</option> <option value='ISLG'>ISLG</option> <option value='ISIMG'>ISIMG</option> <option value='ENIG'>ENIG</option> <option value='H2O'>H2O</option> <option value='ISSAT'>ISSAT</option> </select></td></tr> <tr><td bgcolor="#C2E2DA"><label>Resumé<span style="color:#FF0000"> *</span></label></td> <td><textarea cols="50" name="resume" rows="5" required="required"></textarea></td></tr> <tr><td bgcolor="#C2E2DA"><label>Piéce Jointe<span style="color:#FF0000"> *</span></label></td> <td><fieldset><input type="file" name="piecejointe" required="required"></fieldset></td></tr> <tr><td bgcolor="#C2E2DA"></td><td><div align="right"><input type="submit" value="partagez"></div> </td></tr> </table> </form></div> </body> </html> -
malgré que j'ai changé le script, le problème n'a pas résolu :/
ce problème juste sur ma machine, par ce que j'ai exécuté le même script sur une autre machine, le résultat d'insertion est correcte -
Alors vaut mieux d'installer une version de WampServeur La plus récente, peut être ça va résoudre votre problème, de ma part j'ai installer la version wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12- , bon courage.