Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script ok PHP4 mais pas avec PHP5

5 réponses
Avatar
Beryl
Bonjour à tous.
M'étant remis il y a peu à PHP, je me heurte à une problème.
J'ai une base de données MySQL. A l'aide d'un formulaire, je crée une
interface dont les listes déroulantes se remplissent en fonction de
certains champs de ma base.
Jusqu'ici tout va bien.
Fatalement, j'ai un bouton "Envoyer" qui m'appelle une routine
m'affichant un tableau avec le résultat de la requête SQL suivant mes choix.

Tout cela fonctionne parfaitement avec PHP 4 et MySQL 4 sous ma vieille
Mandriva 10.1
Mais sous ma nouvelle Kubuntu 6 (PHP 5.1 et MySQL 5) mon formulaire
(méthode POST) n'envoie rien à ma routine d'interrogation de la base.

Je suis pas sûr d'être très clair, là ;)

Un bout de ma routine (formulaire) :


<form action="appel_base.php" method="post" name="param_base">
<div id="boutonjeu">
<?php
liste("aide_scenar","jeu","jeu");
?>
</div>
<div id="boutongenre">
<?php
liste("aide_scenar","genre","genre");
?>
</div>
<div id="boutonvalider">
<input type="submit" name="Envoyer" value="Envoyer">
</div>
</form>


La fonction liste permet de remplir les listes déroulantes après
interrogation de la base. Si ça peut aider, la voici :

function liste($table,$name,$champ)
{
global $res,$db;
echo "<select name=\"$name\" size=1>";
echo "<option value='' selected>Sélectionnez un champ</option>";
echo '<option value="*">*</option>';
$sql="select $champ from $table group by $champ";
$res=send_sql($db,$sql);
while ($rang=mysql_fetch_array($res))
{
$tabpipo[]=$rang[$champ];
}
sort($tabpipo);
foreach ($tabpipo as $nom)
{
echo "<option value=\"$nom\">$nom</option>";
}

echo '</select>';
}

Elle fonctionne très bien.
Seulement la routine "appel_base.php" ne reçoit rien.

Je soupçonne un réglage de paramètre dans le php.ini ou peut-être Apache.

Qu'en pensez-vous ?

En espérant ne pas avoir fait trop long ! Merci.

5 réponses

Avatar
Olivier Miakinen

J'ai une base de données MySQL. A l'aide d'un formulaire, je crée une
interface dont les listes déroulantes se remplissent en fonction de
certains champs de ma base.
Jusqu'ici tout va bien.
Fatalement, j'ai un bouton "Envoyer" qui m'appelle une routine
m'affichant un tableau avec le résultat de la requête SQL suivant mes choix.

Tout cela fonctionne parfaitement avec PHP 4 et MySQL 4 sous ma vieille
Mandriva 10.1
Mais sous ma nouvelle Kubuntu 6 (PHP 5.1 et MySQL 5) mon formulaire
(méthode POST) n'envoie rien à ma routine d'interrogation de la base.

[...]

Elle fonctionne très bien.
Seulement la routine "appel_base.php" ne reçoit rien.


Rien, c'est-à-dire que la requête ne parvient pas au serveur web ?
Qu'elle arrive au serveur web mais que le script appel_base.php n'est
pas appelé ? Que le script est appelé mais qu'il n'y a rien dans le
tableau $_REQUEST[] ?

Je soupçonne un réglage de paramètre dans le php.ini ou peut-être Apache.


Regarde déjà les logs d'Apache. Tu peux aussi faire une page statique
censée contenir le formulaire que tu génères en PHP, et essayer à partir
de cette page statique.

Qu'en pensez-vous ?


J'en pense que peut-être le problème ne vient pas de PHP, mais ça tu es
le seul à pouvoir nous le dire.

Avatar
Beryl

Rien, c'est-à-dire que la requête ne parvient pas au serveur web ?
Qu'elle arrive au serveur web mais que le script appel_base.php n'est
pas appelé ? Que le script est appelé mais qu'il n'y a rien dans le
tableau $_REQUEST[] ?


Les deux variables $jeu et $genre envoyées à la routine appel_base
arrivent vides.
appel_base est correctement appelé et teste ces deux variables. Comme
elles ne contiennent rien (testé dans la routine), il ne va pas plus loin.


Regarde déjà les logs d'Apache. Tu peux aussi faire une page statique
censée contenir le formulaire que tu génères en PHP, et essayer à partir
de cette page statique.


Ce qui me fait penser à un réglage de paramètre est que tout cela
fonctionne sous PHP4 avec MySQL 4. Et manifestement pas avec les
versions 5...
Pour la page statique, très bonne idée : j'essaie de suite !

J'en pense que peut-être le problème ne vient pas de PHP, mais ça tu es
le seul à pouvoir nous le dire.


Une dernière chose : sous Mandrake je suis en iso8859-15 et sous Kubuntu
en utf-8. Je ne pense pas que le problème vienne de là mais comme je
galère pour trouver je préfère donner toutes les indications !

Merci.

Avatar
Legeais Vincent
Les deux variables $jeu et $genre envoyées à la routine appel_base
arrivent vides.


Remplace $jeu par $_REQUEST["jeu"] et de même pour $genre.
Si ça résout le problème alors c'est juste un problème de config de
php.ini : mettre les variables globales à On au lieu de Off
(ou les laisser à Off et utiliser les $_XXX)

--
Vincent

Avatar
Olivier Miakinen


Rien, c'est-à-dire que la requête ne parvient pas au serveur web ?
Qu'elle arrive au serveur web mais que le script appel_base.php n'est
pas appelé ? Que le script est appelé mais qu'il n'y a rien dans le
tableau $_REQUEST[] ?


Les deux variables $jeu et $genre envoyées à la routine appel_base
arrivent vides.


Tu veux dire $name et $champ de la fonction liste() qui sont censées
valoir soit "jeu" soit "genre" ? Ou alors tu espères que le script
appel_base.php reçoive magiquement des variables globales $jeu et
$genre comme cela se faisait avant PHP 4.2 et qui nécessitait de
modifier register_globals quand on avait trop la flemme de vérifier
ses variables ?

Voir :
http://faqfclphp.free.fr/#rub2.7
http://fr3.php.net/manual/fr/security.globals.php

appel_base est correctement appelé et teste ces deux variables. Comme
elles ne contiennent rien (testé dans la routine), il ne va pas plus loin.


Attention de ne pas appeler « routine » (souvent synonyme de fonction)
ce qui est en réalité un « script » (appelable directement de
l'extérieur par n'importe qui, avec les paramètres qu'il veut).


Avatar
Beryl
Les deux variables $jeu et $genre envoyées à la routine appel_base
arrivent vides.


Remplace $jeu par $_REQUEST["jeu"] et de même pour $genre.
Si ça résout le problème alors c'est juste un problème de config de
php.ini : mettre les variables globales à On au lieu de Off
(ou les laisser à Off et utiliser les $_XXX)



Bien vu !!!!
C'est exactement ça !
Je me doutais bien qu'un mauvais paramétrage était cause de tout cela.

Désolé pour l'amalgame routine/srcipt. J'ai davantage d'expérience avec
l'assembleur et quelques autres langages plus évolués (Pascal, Basic, E,
etc.)
J'avoue que PHP me pose quelques problèmes... Surtout le mélange avec le
HTML que j'apprécie très peu.
Je bricole aussi avec Python en ce moment. Je trouve ce langage vraiment
génial ! Mais je ne parviens pas encore à en faire ce que je veux,
notamment pour le web, alors je me suis remis au PHP.

Encore merci pour votre coup de main !