PHP : problème la suite

Pages: [1] 2

Magus

  • Administrateur
  • 6487 posts
16 août 2010, 08:16
J'ai bossé toute la journée sur un moyen de faire un petit module d'administration permettant d'éditer la variable d'une liste. En gros, il me liste mes 50 articles et je modifie machinalement comme dans un tablea les données d'une colone.

Ca à l'air super simple comme ça, mais en gros dès que j'édite un article, c'est la donnée du 1er qui est édité, pas celui que je veux.

J'aimerai savoir si quelqu'un a déjà codé un script semblable que je puisse m'en inspirer.

Pour info, voilà le code où je reste bloqué

<?php
mysql_connect
("localhost","root","");
mysql_select_db("spip");

$requete mysql_query("SELECT * FROM `spip_articles` ORDER BY `id_rubrique` ASC");
$article mysql_fetch_array($requete);
$Prix $_POST['Prix'];

while(
$article mysql_fetch_array($requete))
{
echo 
$article['titre'].$article['Prix'].'';
echo 
'<form action="liste.php?article='.$_GET['article'].'&action=modification" method="post" name="form">
<input name="Prix" type="text" size="20" maxlength="100" value="'
.stripslashes($article['Prix']).'">
<input type="submit" size="20" maxlength="100" value="Envoyer">
</form><br /> '
;
}

if(
$_GET['action'] == "modification" && isset($_POST['Prix']))
{
// Liste des champs
$Prix $_POST['Prix'];
$articleid $article['id_article'];
mysql_query("UPDATE spip_articles SET Prix='".$Prix."' WHERE id_article='".$articleid."'") or die(mysql_error());
echo
'Prix modifiés';
$requete mysql_query("SELECT * FROM `spip_articles` WHERE `id_article`=".$article) or die(mysql_error());
$article mysql_fetch_assoc($requete);
}
?>

Je sais que c'est super crade et bricolé.
« Modifié: 31 août 2010, 08:06 par Konrad »

Weby

  • Invité
16 août 2010, 13:36
Wow, c'est quoi ce code pourri ??? xD

Attends j'te corrige ça.

Weby

  • Invité
16 août 2010, 13:55
Voilà !

<?php
mysql_connect
("localhost","root","");
mysql_select_db("spip");

//Jusque l&#224;, c'est bon.



if(isset($_GET['action']) and !empty($_GET['action'])) //on fout &#231;a ici en haut, de sorte que la modification soit prise en compte dans la page de suite. Ajax aurait &#233;t&#233; parfait l&#224; :P
{
if($_GET['action']=="modification" and isset($_POST['prix']) and !empty($_POST['prix']))
{
  $prix $_POST['prix'];
  $articleid $article['id_article'];
  mysql_query("UPDATE spip_articles SET Prix=`".$prix."` WHERE id_article==`".$articleid."`") or die(mysql_error()); //TRES IMPORTANT LE DOUBLE EGAL DANS UNE VERIFICATION !
  echo 'Prix modifi&#233;s';
  $requete2 mysql_query("SELECT * FROM `spip_articles` WHERE `id_article`=".$article) or die(mysql_error());
  $article mysql_fetch_assoc($requete); //j'suppose que ces deux lignes vont te servir &#224; quelque chose plus tard, j'te les laisse... Sinon elles sont inutiles mdr... Ah, et vu que j'l'ai mise en haut, faut changer la variable $requete en $requete2, ou autre chose...
}
}


$requete mysql_query("SELECT * FROM `spip_articles` ORDER BY `id_rubrique` ASC"); //L&#224; c'est bon aussi, mais pourquoi ORDER BY id_rubrique ? Pourquoi pas id_article ?

//$article = mysql_fetch_array($requete);    // Lol, wtf ??? On enl&#232;ve &#231;a ! Ainsi que le $prix = $_POST['prix'], qui se trouve plus bas.

while($article mysql_fetch_array($requete)) //Voil&#224;, l&#224; &#231;a suffit...
{
echo 
$article['titre'].$article['Prix'].'';
//Ok.

echo '<form action="liste.php" method="post" name="form">'//un ptit peu de nettoyage
echo '<input type="hidden" name="article" value="'.$article['id_article'].'" />'//ouais, $article['id_article'] plut&#244;t que te baser sur un $_GET qu'on sait pas d'ou il vient...
echo '<input type="hidden" name="action" value="modification" />'//voil&#224; tes variables
echo '<input name="prix" type="text" size="20" maxlength="100" value="'.stripslashes($article['Prix']).'">'//L&#224;, &#231;a ira tant que dans ta BDD, Prix prend une majuscule... Pense &#224; le v&#233;firier...
echo '<input type="submit" size="20" maxlength="100" value="Envoyer"></form><br /> ';
}
?>
« Modifié: 16 août 2010, 13:56 par Weby »

Pierick

  • Membre
  • 1446 posts
16 août 2010, 14:50
Ah ouai, plus propre la version de weby.

Pour son tri selon id_rubrique et pas id_article, ça doit être pour les avoir selon un thème général, ce qui me fait remarqué que j'ai vraiment dit de la merde dans mon message précédent...

Weby

  • Invité
16 août 2010, 15:24
Ca sert à rien d'appeler la variable prix_IDDELALIGNE, vu qu'il ne peut éditer qu'un formulaire à la fois ;)

Ah, et on est pas en java, form.prix n'existe pas.

ICSVE

  • Membre
  • 16840 posts
16 août 2010, 15:31
Si tu changeais les couleurs ce serait plus fashion j'crois

Sainior

  • Membre
  • 6362 posts

Weby

  • Invité
16 août 2010, 15:37
Blaireau, les couleurs sont automatiques.

Pierick

  • Membre
  • 1446 posts
16 août 2010, 15:41
Ouaip, j'avais juste survolé le code, donc j'avais pas calculé le coup du un seul formulaire à la fois...

La dernière fois que j'ai fait un truc du genre, c'était une seule validation pour toute mes lignes et une checkbox pour sélectionner celles que je voulais.

<?php
echo '<form name="monform" ... >';
while(
parcourslarequete){
/* élément du formulaire, identifiés par l'id, ligne à ligne */
echo '<input type="checkbox" ...><input ...>';

}
echo 
'<input type="submit" value="valider">';
echo
'</form>';
?>


Un truc du genre, pour une interface de configuration des droits en fonction de profils et de niveau.

L'écriture form.prix, c'est plus pour la rapidité d'écriture, le $_GET['prix'] étant reloud à écrire ;)

[edit]
Je retiens dans un coin ton code pour un cas qui risque de me faire chier plus tard par contre.
« Modifié: 16 août 2010, 15:43 par Pierick »

ICSVE

  • Membre
  • 16840 posts
16 août 2010, 15:44
Blaireau, les couleurs sont automatiques.
Je sais bien couillon, juste que j'viens faire le con, voilà

Weby

  • Invité
16 août 2010, 16:04
Ouaip, j'avais juste survolé le code, donc j'avais pas calculé le coup du un seul formulaire à la fois...

La dernière fois que j'ai fait un truc du genre, c'était une seule validation pour toute mes lignes et une checkbox pour sélectionner celles que je voulais.

<?php
echo '<form name="monform" ... >';
while(
parcourslarequete){
/* élément du formulaire, identifiés par l'id, ligne à ligne */
echo '<input type="checkbox" ...><input ...>';

}
echo 
'<input type="submit" value="valider">';
echo
'</form>';
?>


Un truc du genre, pour une interface de configuration des droits en fonction de profils et de niveau.

L'écriture form.prix, c'est plus pour la rapidité d'écriture, le $_GET['prix'] étant reloud à écrire ;)

[edit]
Je retiens dans un coin ton code pour un cas qui risque de me faire chier plus tard par contre.

Par contre, form.prix serait valable, si prix était un champ de la base de données form ;)

Magus

  • Administrateur
  • 6487 posts
16 août 2010, 19:38
Weby, c'est normal que ca n'enregistre pas les modifications ? Dès que je clique, rien ne se passe.

J'ai vérifié les variables (majuscules ... etc) et tout est bon

Weby

  • Invité
16 août 2010, 20:39
Ca recharge la page, ou pas ?

Magus

  • Administrateur
  • 6487 posts
16 août 2010, 20:52
Ca recharge

Ck-Ub

  • Membre
  • 4767 posts
16 août 2010, 21:16
Pq tu bosses pas directement via ton SGBD ?

Magus

  • Administrateur
  • 6487 posts
16 août 2010, 21:19
Pq tu bosses pas directement via ton SGBD ?

Je suis en stage, on m'a demandé de faire un module d'édition que je ne sais pas faire.

Morsula

  • Membre
  • 4745 posts
16 août 2010, 21:26
PHP pour les nuls knows your answer.

En vrai souvent les trucs sur lesquels on passe des heures c'est juste parce qu'on a oublié une virgule ou truc du genre.

J'aurais bien testé ton script mais j'ai pas easyPHP installé donc un peu la flemme du coup. En plus ça fait un moment que je n'ai pas touché à la prog'.

Weby

  • Invité
16 août 2010, 23:46
LOL oui erreur basique :') j'ai mis GET['action'] au lieu de POST :')
<?php
mysql_connect
("localhost","root","");
mysql_select_db("spip");

//Jusque l&#224;, c'est bon.



if(isset($_POST['action']) and !empty($_POST['action'])) //on fout &#231;a ici en haut, de sorte que la modification soit prise en compte dans la page de suite. Ajax aurait &#233;t&#233; parfait l&#224; :P
{
if($_POST['action']=="modification" and isset($_POST['prix']) and !empty($_POST['prix']))
{
  $prix $_POST['prix'];
  $articleid $article['id_article'];
  mysql_query("UPDATE spip_articles SET Prix=`".$prix."` WHERE id_article==`".$articleid."`") or die(mysql_error()); //TRES IMPORTANT LE DOUBLE EGAL DANS UNE VERIFICATION !
  echo 'Prix modifi&#233;s';
  $requete2 mysql_query("SELECT * FROM `spip_articles` WHERE `id_article`=".$article) or die(mysql_error());
  $article mysql_fetch_assoc($requete); //j'suppose que ces deux lignes vont te servir &#224; quelque chose plus tard, j'te les laisse... Sinon elles sont inutiles mdr... Ah, et vu que j'l'ai mise en haut, faut changer la variable $requete en $requete2, ou autre chose...
}
}


$requete mysql_query("SELECT * FROM `spip_articles` ORDER BY `id_rubrique` ASC"); //L&#224; c'est bon aussi, mais pourquoi ORDER BY id_rubrique ? Pourquoi pas id_article ?

//$article = mysql_fetch_array($requete);    // Lol, wtf ??? On enl&#232;ve &#231;a ! Ainsi que le $prix = $_POST['prix'], qui se trouve plus bas.

while($article mysql_fetch_array($requete)) //Voil&#224;, l&#224; &#231;a suffit...
{
echo 
$article['titre'].$article['Prix'].'';
//Ok.

echo '<form action="liste.php" method="post" name="form">'//un ptit peu de nettoyage
echo '<input type="hidden" name="article" value="'.$article['id_article'].'" />'//ouais, $article['id_article'] plut&#244;t que te baser sur un $_GET qu'on sait pas d'ou il vient...
echo '<input type="hidden" name="action" value="modification" />'//voil&#224; tes variables
echo '<input name="prix" type="text" size="20" maxlength="100" value="'.stripslashes($article['Prix']).'">'//L&#224;, &#231;a ira tant que dans ta BDD, Prix prend une majuscule... Pense &#224; le v&#233;firier...
echo '<input type="submit" size="20" maxlength="100" value="Envoyer"></form><br /> ';
}
?>

Weby

  • Invité
16 août 2010, 23:46
Et t'es en stage au chili ? oO

Weby

  • Invité
17 août 2010, 00:25
Ah, et un tout ptit "merci" suffira... J'aime pas me rendre important...

Magus

  • Administrateur
  • 6487 posts
17 août 2010, 02:43
Ah, et un tout ptit "merci" suffira... J'aime pas me rendre important...

Va te faire enculé


Un GRAND merci ;)

Weby

  • Invité

Ck-Ub

  • Membre
  • 4767 posts
17 août 2010, 03:29
auêmgeay go bqne konrad ila 1sulthé 1 membreu !11!1!

T'as rien de plus intelligent à dire?
Je ne del pas pour que les gens puissent à quel point tu es une lumière.


Ah bon on applique plus les règles alors ? Lez a été ban pour avoir dis mot pour mot la même phrase :)
« Modifié: 17 août 2010, 04:13 par Buck »

Magus

  • Administrateur
  • 6487 posts
17 août 2010, 05:25
Y'a une erreur

mysql_query("UPDATE spip_articles SET Prix=`".$prix."` WHERE id_article==`".$articleid."`") or die(mysql_error());

J'ai plus ou moins corrigé ce qui me semblait être une erreur de syntaxe et maintenant quand je valide j'ai :

Champ '10 000 pesos' inconnu dans field list

Renta

  • Membre
  • 2293 posts
17 août 2010, 05:30
Ah bon on applique plus les règles alors ? Lez a été ban pour avoir dis mot pour mot la même phrase :)
Je n'est pas encore d'accès à l'IA et je ne prend pas de tel décisions seul.

Magus

  • Administrateur
  • 6487 posts
17 août 2010, 06:14
mysql_query("UPDATE spip_articles SET Prix=`".$Prix."` WHERE `id_article`=".$articleid)


Avec le double égal ça donne ça :

Erreur de syntaxe près de '==3' à la ligne 1

3 étant l'id de l'article

Weby

  • Invité
17 août 2010, 11:41
C'est juste, enlève le double égal après le WHERE Oo.

Par contre, Pierick, tu parles beaucoup pour ne rien dire, ça m'énerve.

Et oui, pour l'écriture "pointée" avec les "double quotes" (on appelle ça la concaténation), c'est vrai, tu peux écrire directement les variables dans la requête. Mais j'aime pas tellement faire ça.

Pierick

  • Membre
  • 1446 posts
17 août 2010, 11:52
J'avais plus le terme en tête, désolé... j'suis en train de galérer sur du code pour le taff en fait, et je passe à l'arrache sur le forum lors de mes poses.

Désolé si ça t'énerve, c'était pas le but ^^'

Weby

  • Invité
17 août 2010, 11:53
 -> pour bien, il nous faudrait l'arborescence de ta BDD (une copie de sa structure quoi). Fais une exportation en .sql et copie-colle le texte rendu sous spoiler ici. Ca m'aiderait quand même.

Magus

  • Administrateur
  • 6487 posts
17 août 2010, 20:42
Prix modifiÞsChamp 'Array' inconnu dans where clause

et ça modifie toujours que l'article 1

je vois pas bien d'ou peut venir le problème

Pages: [1] 2    En haut ↑