probleme avec un update
Hors ligneMacfplus Le 16/05/2008 à 10:11 Profil de Macfplus Configuration de Macfplus

Bonjour,
J'ai un souci d'updaite dans un formulaire de modification...
J'appelle les données actuelles dans mon formulaire, la ok
je les modifie dans le fomulaire
Je valide...
mon echo me dit que l'ordre n'a pas été executé...
Mais je ne comprends pas pourquoi...

Je vous livre mon tit bout de code:


<? 



include("sql.inc"); 
mysql_connect($host$user$pass); 
mysql_select_db("$bdd"
or die(
"Ouverture base impossible"); 

{
$ID = (isset($_GET['ID'])) ? abs(intval($_GET['ID'])) : 0;
$mp3=mysql_query("SELECT * FROM mp3 WHERE ID=' $ID' "); 
 } 
 while (
$donnees mysql_fetch_array($mp3) )

{
?>



<table COLS=5 cellpadding="2" border="0" 
style="text-align: center; width: 80%; margin-left: auto; margin-right: auto; border-collapse:collapse" bordercolor="#111111" align="left"> 
<tbody> 
<tr> 
<center><form method="post" action="modifier.php" name=""> 
<td style="vertical-align: top; width: 20%"> 
<p><b>Artiste<br></b></p> 
<b>
<input type="text" name="Artiste" maxlength="50" size="20" value="<? echo $donnees['artiste'?>"></b></td> 
<td style="vertical-align: top; width: 20%"> 
<p><b>Titre<br></b></p> 
<b>
<input type="text" name="Titre" maxlength="50" size="20" value="<? echo $donnees['titre'?>"></b></td> 
<td style="vertical-align: top; width: 20%"> 
<p><b>Visuel<br></b></p> 
<b>
<input type="text" name="Visuel" maxlength="100" size="20" value="<? echo $donnees['img'?>"></b></td> 
<td style="vertical-align: top; width: 20%"> 
<p><b>Mp3<br></b></p> 
<b>
<input type="text" name="Mp3" maxlength="100" size="20" value="<? echo $donnees['son'?>"></b></td> 
</tr> 
</tbody> 
</table> 
<?
mysql_close
;
}
?>


<br> 
<center> 
<p><b><input type="submit" name="submit" value="Modifier"> 
</b></p> 
</form> 
</center> 
<? 

if (isset($_POST['Artiste']) AND isset($_POST['Titre']) AND isset($_POST['Visuel']) AND isset($_POST['Mp3'])) 
{
    if ($_POST['Artiste'] != NULL AND $_POST['Titre'] != NULL AND $_POST['Visuel'] != NULL AND $_POST['Mp3'] != NULL)

//        $Artiste = mysql_real_escape_string(htmlspecialchars($_POST['Artiste']));
//        $Titre = mysql_real_escape_string(htmlspecialchars($_POST['Titre']));
//        $Visuel = mysql_real_escape_string(htmlspecialchars($_POST['Visuel']));
//        $Mp3 = mysql_real_escape_string(htmlspecialchars($_POST['Mp3']));

include("sql.inc"); 
mysql_connect($host$user$pass); 
mysql_select_db("$bdd"
or die(
"Ouverture base impossible"); 

$ID = (isset($_GET['ID'])) ? abs(intval($_GET['ID'])) : 0;
$mp3=mysql_query("SELECT * FROM mp3 WHERE ID=' $ID' "); 
$mod=mysql_query("UPDATE mp3 SET artiste='$Artiste' ,titre='$Titre' ,img='$Visuel' ,son='$Mp3' WHERE ID=' ".$_GET['ID']."' ");
$ok=mysql_query($mod);
if (
$ok){echo 'Données modifiées avec succès !';} 
else {echo 
'Impossible de modifier les données...';}

mysql_close
}
?>


Si l'un d'entre vous pouvait m'aider ce serait sympa?
Merci d'avance
Bonne journée
Hors ligneAnthony Le 16/05/2008 à 16:37 Profil de Anthony Configuration de Anthony

Admin
Salut

Tout ça :


if (isset($_POST['Artiste']) AND isset($_POST['Titre']) AND isset($_POST['Visuel']) AND isset($_POST['Mp3']))  

    if ($_POST['Artiste'] != NULL AND $_POST['Titre'] != NULL AND $_POST['Visuel'] != NULL AND $_POST['Mp3'] != NULL)


Remplace-le par ça (en supprimant une accolade fermante aussi) :


if (isset($_POST['Artiste'],$_POST['Titre'],$_POST['Visuel'],$_POST['Mp3']))  



toutes les vérifs pour voir si c'est égal à NULL c'est inutile ;)

Remplace aussi tous tes tags <? par <?php

Ensuite en bas tu as la requête $mod=mysql_query("UPDATE mp3 SET artiste='$Artiste' ,titre='$Titre' ,img='$Visuel' ,son='$Mp3' WHERE ID=' ".$_GET['ID']."' "); mais d'où proviennent les variables $Artiste, $Titre, etc ... ? je ne les vois nul part dans ton script ;)

Pour les requêtes MySQL, évite le SELECT *, mets plutôt le nom des champs dont tu as besoin (même si tu en as besoin de tous) : Optimiser MySQL

Tiens-nous au courant ;)
--

Hors ligneMacfplus Le 16/05/2008 à 16:51 Profil de Macfplus Configuration de Macfplus

Anthony a écrit :
Salut

Tout ça :



if (isset($_POST['Artiste']) AND isset($_POST['Titre']) AND isset($_POST['Visuel']) AND isset($_POST['Mp3']))  

    if ($_POST['Artiste'] != NULL AND $_POST['Titre'] != NULL AND $_POST['Visuel'] != NULL AND $_POST['Mp3'] != NULL)


Remplace-le par ça (en supprimant une accolade fermante aussi) :



if (isset($_POST['Artiste'],$_POST['Titre'],$_POST['Visuel'],$_POST['Mp3']))  



toutes les vérifs pour voir si c'est égal à NULL c'est inutile ;)

Hello!
Tout d'abord, merci pour ton aide!
En fait ta mofi ne me done pas d'accolade en moins, le nombre reste le meme, je dois en enlever une fermante quand meme?


Remplace aussi tous tes tags <? par <?php
]
Ensuite en bas tu as la requête $mod=mysql_query("UPDATE mp3 SET artiste='$Artiste' ,titre='$Titre' ,img='$Visuel' ,son='$Mp3' WHERE ID=' ".$_GET['ID' a écrit :
."' "); mais d'où proviennent les variables $Artiste, $Titre, etc ... ? je ne les vois nul part dans ton script ;)


Ben... elle viennent du formulaire que j'ai plus haut,non?

]
Pour les requêtes MySQL, évite le SELECT *, mets plutôt le nom des champs dont tu as besoin (même si tu en as besoin de tous) : [url=http://www.vulgarisation-informatique.com/optimiser-mysql.php a écrit :
Optimiser MySQL[/url]

Tiens-nous au courant ;)

Je vais corriger le code selon tes conseils en attendant de mieux comprendre ce souci de variables que tu évoques
Au plaisir de te lire.
Cordialement
Hors ligneAnthony Le 16/05/2008 à 20:03 Profil de Anthony Configuration de Anthony

Admin
Si pour l'accolade fermante car je supprime toute la condition if($truc == NULL etc ...

Sinon pour les variables si elles proviennent d'un formulaire, il faut utiliser $_GET['champ'] ou $_POST['champ'], tout est détaillé ici : Variables de formulaires et adresses Web en PHP
--

Hors ligneMacfplus Le 21/05/2008 à 18:34 Profil de Macfplus Configuration de Macfplus

Re-
Mais je comprends pas ta question...
Bien sur que les variables proviennent du formulaire qui est plus haut...
Appelées dans les  Post situés plus bas...
Le souci c'est que l'update ne se fait pas

Merci pour ton aide
Hors ligneAnthony Le 21/05/2008 à 20:06 Profil de Anthony Configuration de Anthony

Admin
Fais un echo "UPDATE mp3 SET artiste='$Artiste' ,titre='$Titre' ,img='$Visuel' ,son='$Mp3' WHERE ID=' ".$_GET['ID']."' ";

et colle-le résultat dans phpmyadmin (onglet "sql") et vois ce que ça te renvoie ;)
--

Hors ligneMacfplus Le 22/05/2008 à 16:16 Profil de Macfplus Configuration de Macfplus

Hello!
Je n'ai pas encore testé ce que tu me conseilles, mais j'ai modifié ma requête en :

$ID = (isset($_GET['ID'])) ? abs(intval($_GET['ID'])) : 0;
$req = "UPDATE mp3 SET artiste='$Artiste',titre='$Titre',img='$Visuel',son='$Mp3' WHERE ID='$ID' ";
echo "REQUETE EFFECTUEE : ".$req."<br><br>"; 
$mod=mysql_query($req) or die(mysql_error());
$ok=mysql_query($mod);
if ($ok){echo mysql_error(), 'Données modifiées avec succès !';} 
else {echo mysql_error();}


et ça me renvoie ceci:

REQUETE EFFECTUEE : UPDATE mp3 SET artiste='test atrtiste',titre='test titre',img='test visuel6',son='test mp3' WHERE ID='0'

Si je comprends bien, il considère que l'ID est 0
or, si je remplace 0 par 1 dans la ligne:
$ID = (isset($_GET['ID'])) ? abs(intval($_GET['ID'])) : 1;
,
Alors le code me renvoie la requete faite sur l'ID 1 ...

Pourtant j'utilise cette syntaxe dans 3 autres parties de mes pages pour cette base et ça fonctionne sans ce souci...

Merci pour ton aide.
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels