8798 sujets

Développement web côté serveur, CMS

Bonjour a tous,

La semaine dernière mon code fonctionnait très bien jusqu'à ce que je face quelques ajouts....
Puis depuis impossible d'insérer quelque chose dans ma base de données.
J'ai donc tout repris a zéro en début de mâtiné, tranquillement et surement et la je coince sur quelque chose de complètement simple qui m'a pris l'aprem.

Cette ligne fonctionne très bien:
mysql_query("INSERT INTO commentaires VALUES('.$id_article.', '', 'commentaire', 'date', 'qui', '0', 'ip')");


Mais si je met
<?php if ($_POST['action'] == 'submitted') {
// On ajoute une entrée avec mysql_query
mysql_query("INSERT INTO commentaires VALUES('.$id_article.', '', 'commentaire', 'date', 'qui', '0', 'ip')");
}
?>

alors plus rien ne se passe. C'est comme si la variable _POST n'existait pas.

Voici le code du formulaire correspondant.
<div class="articles">
<form action="index.php?id_article=<?php print $id_article?>" method="post"> 
<fieldset>
<legend>Ajouter un commentaire</legend>
<p>
Pseudo : <input type="text" name="qui_commentaire" /><br />
Message : <textarea rows="3" cols="51" name="commentaire_ajoute"></textarea><br />
<input type="submit" value="Envoyer" />
</p>
</fieldset>
</form>
</div>


Merci à la bonne âme qui voudra bien m'expliquer pourquoi ma condition ne marche pas or que j'ai toujours fait de cette manière.
Bonne soirée
Salut,

C'est plutôt l'index "action" qui n'existe pas, et encore moins sa valeur "submitted". Tu les as inventés ?
Bonjour Agylus,

Merci pour ta réponse.
Honte à moi. L'erreur était trop grosse pour que je puisse la voire... Smiley sweatdrop
J'ai quand même tourné autour toute l'aprem or qu'il manque juste un champ input caché avec ces valeurs pour que cela puisse fonctionner...

Je suis confus Smiley confused

Sujet résolu

Merci Agylus
Modifié par Dim (24 Jun 2009 - 19:42)
La meilleure méthode pour tester l'envoi d'un formulaire est d'aller chercher l'information là où elle se trouve, et non d'utiliser des moyens détournés :

if ( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' )
{
   // Formulaire posté
}
Merci Agylus pour ce petit supplément bien que je ne comprenne aucun mot de ce que tu viens d'écrire...

Tu n'aurais pas quelques liens à me proposer pour que je comprenne ce code?

Merci encore.
Qu'est-ce que tu n'as pas compris exactement ..? C'est pourtant on ne peut plus simple ce que j'ai utilisé comme syntaxe. Smiley ohwell
a écrit :
C'est pourtant on ne peut plus simple ce que j'ai utilisé comme syntaxe. ohwell

J'ai peut être oublié de préciser que je suis pas expert en php...
Du coup je connais les bases mais strlolower je ne connais pas et j'ai jamais vu. Après le reste je suppose que $_SERVER c'est un array qui vient du serveur... mais qu'est ce qu'il contient? Puis enfin REQUEST_METHOD, je suppose qu'il demande qu'elle méthode est utilisé (post ou get)...

Dans tout les cas je vois pas bien le liens qu'il y a entre le formulaire et ce code.

Merci pour tes réponses et ton aide.
strtolower est une fonction, comme (je l'espère) tu l'avais remarqué. Son utilité, comme son nom l'indique si bien (faut pas avoir un niveau bien élevé en anglais pour le comprendre je pense, sinon au pire, y a la doc PHP), est de transformer la chaine en minuscules.

Pour savoir ce que contient la globale $_SERVER, quoi de mieux que de l'afficher ? Donc je te laisse faire un var_dump de cette variable.

En gros, par défaut la méthode de transfert de données se fait en GET, et si la variable serveur utilisée contient POST c'est qu'un formulaire a été posté. C'est tout.
Merci Agylus pour cette explication même si à te lire j'ai le sentiment d'être idiot.

Tu m'excusera pour mon niveau d'anglais mais je vis à Londres depuis 4mois plus 4mois l'année dernière et je n'ai jamais utilisé strto(inconnu au dico d'ailleurs) et lower pour "plus petit" alors à en déduire que strtolower signifie "transformer la chaine en minuscule" y a quand même un petit chemin à faire... Smiley rolleyes (pour moi en tout cas)

Pour savoir ce que contient la global $_SERVER je m'y attache tout de suite... mais vu mon niveau php je ne connaissais pas var_dump je vais donc tester et faire des recherches.

Enfin une petite question si je peut me le permettre. Pourquoi ne pas mettre tout simplement POST en majuscule dans ton code? On aurait pas besoin de strtolower dans ce cas, non? Y a t-il une autre contrainte qui oblige de l'écrire ainsi?

Encore merci de m'avoir répondu.
Bonne soirée.
str en informatique signifie string, donc chaine. Si on décompose : string 2 lower [case (sous-entendu)] = chaine en minuscules. Par opposition on a strtoupper. Il y a des nombreuses fonctions PHP qui se basent sur ce type de nomination.

Tu as raison, on aurait pu s'abstenir d'utiliser strtolower et écrire POST. L'intérêt n'est que portabilité du code dans les versions futures de PHP. On ne peut pas savoir par exemple si dans les prochaines versions de PHP ce texte sera en minuscules ou restera en majuscules. On se prémunit donc de l'appel de la fonction avec une comparaison en minuscules (on aurait très bien pu la faire en majuscules, entendons-nous) qui fonctionnera quelle que soit la version et l'évolution de PHP.
Merci beaucoup pour toutes ces explications... c'est sûr ce soir je me couche moins bêtes
Smiley cligne

Je te tiens au courant si j'ai réussi ou pas à implémenter ce code dans le mien et si j'ai réussi ou pas à savoir ce que contient la globale $_SERVER.

Encore un grand merci.
Bonne soirée
Modérateur
Salut tout le monde, Smiley smile

@Agilus : Merci de ton dernier message intéressant. Smiley smile

@Dim : La plupart des fonctions PHP reprennent des mots anglais. ex :

* nl2br (new line TO br) saut de ligne
* str_replace = (string replace) remplacement de texte
* strtr = (string translate) tradustion de texte
etc.

Toutefois, je suis d'accord avec toi que ce n'est pas évident de comprendre. Souvent lorsque je code en php, je traduis en anglais ce que je désire faire. Ça aide pas mal je crois.

++
Modifié par Nolem (25 Jun 2009 - 02:47)
Bonjour tout le monde,

Merci Nolem pour ces petites precisions supplementaires.

J'ai teste le var_dump de la globale $_SERVER ce matin (hier soir mon hebergeur ne fonctionnait plus). C'est plutot impressionant ce qu'elle contient. Je suis bleufe.
Du coup je comprend entierement la simplicite du code que tu m'a donne et je l'ai implemante dans mon formulaire et tout fonctionne a merveille.

Merci beaucoup pour cette aide.

Juste par curiosite, existe t-il une liste des "raccourcis" php avec leur significations. Exemple : str=string ? Si oui je serais curieux d'apprendre le language informatique...

Merci beaucoup.
Bonne journee
Modifié par Dim (26 Jun 2009 - 15:54)
Salut,

Agylus a écrit :
if ( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' )
{
   // Formulaire posté
}
D'habitude j'utilise
if ( $_SERVER['REQUEST_METHOD']  == 'POST' )
Est-ce que cela veut dire qu'un serveur pourrait renvoyer cette chaîne en minuscule pour avoir besoin du strtolower ?
Salut Heyoan,

Comme je l'ai écrit un peu plus haut, l'intérêt n'est que d'éviter les effets de bords potentiels dan le futur.

a écrit :
on aurait pu s'abstenir d'utiliser strtolower et écrire POST. L'intérêt n'est que portabilité du code dans les versions futures de PHP. On ne peut pas savoir par exemple si dans les prochaines versions de PHP ce texte sera en minuscules ou restera en majuscules. On se prémunit donc de l'appel de la fonction avec une comparaison en minuscules (on aurait très bien pu la faire en majuscules, entendons-nous) qui fonctionnera quelle que soit la version et l'évolution de PHP.

Donc ton test fonctionne maintenant, mais dans l'avenir ? Autant avoir le minimum de code à retoucher lors de passage à d'autres versions.
Modifié par Agylus (25 Jun 2009 - 20:18)
Agylus a écrit :
Comme je l'ai écrit un peu plus haut, l'intérêt n'est que d'éviter les effets de bords potentiels dan le futur.
Ah... OK. Désolé je n'avais jeté qu'un coup d'œil en diagonale. Smiley cligne