Version complète: sur le forum Webmaster Hub : Mysql et écrasement de données
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Valhala
Bonjour,

j'ai crée un petit script permettant de faire un upload d'un fichier avec titre et commentaire vers une base mysql, tout se déroule parfaitement jusqu'au moment ou j'utilise 2 fois le même titre; la première donnée enregistré est écrasé par le nouveau, ce qui fait que je me retrouve avec deux résultats identique suite à l'écrasement.

Je comprend pas trop, j'ai bien des ID pour chaque nouveaux fichiers uploader donc je devrais pas avoir l'écrasement.

Pouvez-vous m'aider ?

Merci d 'avance
MarvinLeRouge
Le bout de script avec l'insertion des données, stp
Valhala
Bonjour,

voila le formulaire qui permet d'inserer les données, seul le "name" pose problème, il écrase les autres données si il existe déja dans la bdd.

CODE
<form name="frmRegister" method="post" action="uploadphone.php?1">
<table width="80%" border="0" cellspacing="0" cellpadding="0">
   <td width="30%">Name:</td>
   <td width="70%">
     <input name="name" type="text" size="45" maxlength="255" /></td>
 </tr>
 <tr>
   <td>Comments:</td>
   <td><textarea name="textarea" cols="45" rows="6"></textarea></td>
 </tr>
 <tr>
   <td colspan="2"><input type="submit" name="Submit" value="Register" />
     <input name="Reset" type="reset" id="Reset" value="Reset" /></td>
   </tr>
</table>
</form>


CODE
if (isset($_GET['1'])){
 $phonename = $_POST['name'];
 $phonecreated = $_POST['created'];
 $phoneanimated = $_POST['animated'];
 $phonecomments = $_POST['textarea'];
 $phonetype1 = $_POST['type'];
 $userloggedin = $_SESSION['myusername'];
 $userloggedin = username2num($userloggedin, $userloggedin);
 
 if ((!$phonename) || (!$phonecreated) || (!$phoneanimated) || (!$phonecomments)){
 echo "You need to fill in all fields";
 }else{
     $sql = mysql_query("INSERT INTO phones_phones (name, created, animated, comments, author, phonetype) VALUES ('$phonename', '$phonecreated', '$phoneanimated', '$phonecomments', '$userloggedin', '$phonetype1')");
     echo "<br /><br /><hr color=\"#E3E3E3\" size=\"1\"/><br /><tr>";
     echo"    <td>Screenshots:</td>";
     echo"    <td><form method=\"POST\" enctype=\"multipart/form-data\" action=\"uploadphone.php?2&phone=$phonename&phonetype=$phonetype1\">";
     echo"    <input name=\"pic1\" type=\"file\" size=\"40\" /> Small screenshot";
     echo"    <input name=\"pic2\" type=\"file\" size=\"40\" /> Large screenshot";
     echo"    <input name=\"file\" type=\"file\" size=\"40\" /> Theme file<br />";
     echo "    <input type=\"submit\" value=\"Submit\" name=\"B1\"><input type=\"reset\" value=\"Reset\" name=\"B2\"></td>";


Je sais pas si c'est suffisant car les autres fichiers sont plutôt gros.

Merci d'avance

Edit: j'avais oublié la deuxième partie et j'ai enlever ce qui était inutile
MarvinLeRouge
Quelle est la clé de ta table ?
Thanh
yO,

Il faut effectivement juste ajouter une clé primaire de type numérique auto incrémentable. Comme cela, tu n'auras même pas à modifier tes scripts smile.gif
Valhala
Bonjour,

pour ne pas dérangé solo à chaque fois je continue ici pour d'autre idées.

Ma table est
CODE
CREATE TABLE `phones_phones` (
`ID` bigint(20) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`created` varchar(255) default NULL,
`animated` enum('Yes','No') default 'No',
`size` varchar(255) default NULL,
`logofile` varchar(255) default NULL,
`comments` text,
`imgfile` varchar(255) default NULL,
`author` int(11) default NULL,
`phonetype` enum('T610','S700','K700','K750') default NULL,
`mainimage` varchar(255) default NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=67;


Solo ma conseillé de enlever "UNIQUE KEY `name` (`name`)", ce qui à partiellement résolu le problème. Lors de l'upload des fichiers ils sont enregistré pour les valeurs avec le même 'name' donc denouveau un écrasement.

Etant débutant je suis perdu la car j'arrive pas à comprendre l'erreur.

Merci d'avance
Valhala
J'ai trouvé mon erreur, c'etait tout simplement "action=\"uploadphone.php?2&phone=$phonename" qui posait problème.

Maintenant j'éssaye de utiliser "last_insert_id" à la place pour paschanger tout le code mais sans trop succes ...

Une idéee ?

Merci

Edit: J'ai trouvé, merci encore
MarvinLeRouge
Si tu utilises auto_increment, tu n'as pas besoin de last_insert_id : tu te contentes de ne pas préciser la clé, et la base la créera toute seule.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.