Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e) (modifié)

Bonjour tous le monde les gens !

 

Je développe un module pour mon CMS KWSphp, et j'ai un soucie, que je n'arrive pas a trouver.

 

Voila un code, c'est celui (a la base) du traitement d'une édition d'une fiche.

 

<?php
// --------------------------------------------------------------------
// ----
// --------------------------------------------------------------------

require('modules/km_club/securite.php');

if(get_grade() >= GRD_MEMBR)
bloc_head('Editer sa fiche :');

{
	$id = $_POST['id'];
	echo "$newklm";	 // vérification de la valeur du nouveau nombre de klm   (la valeur arrive bien)
	echo "$id";		 // id de la page concerné				(l'id arrive bien)

$req = mysql_query("SELECT `klm`, `nbr_klm`, FROM `klmclub` WHERE `id`='".$id."';");
$row = mysql_fetch_array($req);

$valeur_total = $df_ligne->klm;

$nombre_de_saisie = ($df_ligne->nbr_klm +1);

$klm_final = $valeur_total+$newklm;


mysql_query('UPDATE `klmclub` SET `klm`="'.$klm_final.'", `nbr_klm`="'.$nombre_de_saisie.'" WHERE id="'.$id.'";');
header("Location: index.php?mod=km_club&ac=detail&id=".$id."");



}

close_table();
?>

 

la variable $newklm qui est rentré dans une autre page, via un formulaire s'affiche bien dans l'echo "$newklm"

 

Mais ce code (si dessus) est censé updaté la table (et plus particulièrement les champs `klm`& `nbr_klm` )

 

Mais en faite se code écrase les champs, et remplace par la valeur $newklm et reste a 1 pour $nbr_klm alors qu'a chaque enregistrement il est censé faire +1.

 

l'id correspond bien (vue que c'est le bon champ du bon pseudo qui est updater[updater,ouais enfin écraser]).

 

Merci a ceux qui sauront trouvé le soucie.

Modifié par julkien

Posté(e)

tu as essayé de faire un echo des différentes variables que tu calcules? (avant de faire la requête UPDATE; que tu peux commenter ou afficher)

Posté(e)
tu as essayé de faire un echo des différentes variables que tu calcules?

 

Salut Greywolf, je test tout de suite.

 

echo "$df_ligne->klm"; me ramène a rien (donc problème)

echo "$klm_final"; me ramène a $newklm (donc problème)

echo "$nombre_de_saisie"; me ramène a 1 donc soucie, quoi que c'est un +1 simplement.

 

Bon toujours est-il que je débute depuis un bon mois en PHP, donc je bidouille avec mes maigres connaissances. (un peu comme mon français)

 

Voili voilou, en espérant que tu puisse m'aider ^^

Posté(e)

(...)
  $row = mysql_fetch_array($req);

$valeur_total = $df_ligne->klm;
(...)

C'est moi, ou le "$df_ligne" de la seconde ligne de cet extrait devrait être "$row" ? (ou l'inverse)

 

Hum...

 

Je n'ai pas compris pourquoi tu as des accolades après ton if (vu que le if ne concerne que la ligne qui suit, vu comment c'est construit)...

 

Je sais que les programmeurs PHP sont friands d'inclusions de quotes / guillemets / backquotes en tous genres et dans tous les sens, mais par chez moi dans une requête SQL il ne faut pas de backquote (ni quoi que ce soit) autour des noms de table et de colonnes, et il n'en faut surtout pas autour des valeurs numériques...

 

Mon premier réflexe serait de changer cette ligne...

mysql_query('UPDATE `klmclub` SET `klm`="'.$klm_final.'", `nbr_klm`="'.$nombre_de_saisie.'" WHERE id="'.$id.'";');

... en ceci ...

mysql_query("UPDATE klmclub SET klm = " . $klm_final . ", nbr_klm = " . $nombre_de_saisie . " WHERE id = " . $id);

 

Ensuite, j'éviterais d'utiliser des variables temporaires inutiles.

	$nombre_de_saisie = $df_ligne->nbr_klm + 1;
$klm_final = $df_ligne->klm + $newklm;

Et je pousserais même le bouchon plus loin en zappant complètement ces variables...

mysql_query("UPDATE klmclub SET klm = " . ($df_ligne->klm + $newklm) . ", nbr_klm = " . $df_ligne->nbr_klm . " + 1 WHERE id = " . $id);

 

Et si j'étais vraiment mesquin j'éviterais carrément le SELECT :

mysql_query("UPDATE klmclub SET klm = klm + " . $newklm . ", nbr_klm = nbr_klm + 1 WHERE id = " . $id);

 

Soit, au final

<?php
// --------------------------------------------------------------------
// ----
// --------------------------------------------------------------------

require('modules/km_club/securite.php');

if(get_grade() >= GRD_MEMBR) {
bloc_head('Editer sa fiche :');
}

$id = $_POST['id'];
echo "$newklm";	 // vérification de la valeur du nouveau nombre de klm   (la valeur arrive bien)
echo "$id";		 // id de la page concerné				(l'id arrive bien)

mysql_query("UPDATE klmclub SET klm = klm + " . $newklm . ", nbr_klm = nbr_klm + 1 WHERE id = " . $id);

close_table();
?>

 

Maintenant, le souci c'est peut-être le manque de vérification d'existence d'un enregistrement portant l'id $id ?

Posté(e) (modifié)

Nouvelle Question :

 

j'ai rajouter un champs dans la table klmclub se nomant `description`. ( `description` text NOT NULL, )

 

J'ai rajouter sur la page d'édition, ceci :

 

echo "<input type='text' name='newdesc' maxlength='400' size='110' value='".$newdesc."' />";

 

je n'est pas mis de textearea pour une histoire de présentation...

 

j'ai ensuite repris ton code Kewlcat, que j'ai mis a la place du mien hier, et j'ai modifier comme ceci :

 

mysql_query("UPDATE klmclub SET klm = klm + " . $newklm . ", nbr_klm = nbr_klm + 1, description = " . $newdesc . " WHERE id = " . $id);

 

Mais plus rien ne rentre dans la table, si je laisse comme ça...

 

Mais si je vire mon descrition = " . $newdesc . " alors sa refonctionne, pourtant je ne voit rien d'anormal

 

Il est ou le soucie, parce que je cherche depuis quelques heures et je trouve pas...

 

Merci de ton aide.

Modifié par julkien
Posté(e)
dans une requête SQL il ne faut pas de backquote (ni quoi que ce soit) autour des noms de table et de colonnes, et il n'en faut surtout pas autour des valeurs numériques...
Aurais-je oublié de rappeler que c'est cependant absolument indispensable autour des chaînes de caractères ?

 

mysql_query("UPDATE klmclub SET klm = klm + " . $newklm . ", nbr_klm = nbr_klm + 1, description = '" . $newdesc . "' WHERE id = " . $id);

Autre chose, ce n'est pas prudent de prendre le contenu saisi par un utilisateur et le coller tel-quel dans une requête. Je ne sais pas quels filtres tu as prévu (magic_quotes et tout le bazar) mais tu devrais attendre qu'un pro du PHP t'explique comment faire. En attendant, évite de saisir une apostrophe dans ton champ de saisie ;-)

 

Ah, un autre truc...

echo "<input type='text' name='newdesc' maxlength='400' size='110' value='".$newdesc."' />";

En HTML, on utilise des guillemets (impérativement) pour délimiter les valeurs des attributs. Il faut donc profiter de ce que PHP n'est pas rigoureux à ce niveau-là pour écrire plutôt :

echo '<input type="text" name="newdesc" maxlength="400" size="110" value="' . $newdesc . '" />';

Posté(e) (modifié)

merci Kewlcat ^^

 

Sinon je vient de me rendre compte que je n'est pas assoscier la table klmclub_final a ma requete, qui doit donc diminuer au contraire e klmclub, enfin sur une variable.

 

Je m'explique,

 

la table klmclub-final contient plusieurs champ (mais un seul m'interesse pour l'instant) c'est le champ `global` qui est en faite le total prévu par le club, et qui diminue en fonction de chaque users qui rajoute ses nouveaux Km.

 

voilà donc ce que j'ai penser faire mais sa fonctionne pas : (ps j'ai pas encore mis ton code si dessus)

mysql_query("UPDATE klmclub SET klm = klm + " . $newklm . ", nbr_klm = nbr_klm + 1 WHERE id = " . $id);
mysql_query("UPDATE klmclub_final SET global = klm - " . $newklm . " WHERE id");
header("Location: index.php?mod=km_club&ac=detail&id=".$id."");

 

je pense qu'il y'a comme une histoire de AND quelque part ou autre chose, mais comme je l'est dit nettement plus haut, je débute :P et j'aime apprendre sur le tas, donc bon...

 

Merci de ton aide en tout cas ^^

 

EDIT: je vient de mettre ton code, et après recherche (car il fonctionnais pas) j'ai trouver, y'avais une inversion de quote et doublequote sur une de mes lignes...

Modifié par julkien

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...