Passage php4 vers php5

Le
Yannick
Bonjour,

N'étant pas très doué je n'arrive pas à modifié les 3 scripts suivants.
Il fonctionne très bien sous php4 mais rien à faire sous php5.
1) la recherche ne se fait pas
2) l'affichage dans le pop est vide

Merci à celui qui voudras bien me résoudre cet incident.

Amitiés

Début des scripts

INDEX.PHP

<?php /* echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; */?>
<?
//INCLUSION DU FICHIER DE CONNEXION
include("connect.inc");

//CONNEXION A LA BASE
$mysql_id=mysql_connect($server,$user,$pwd);

// Sortir du script en cas de problème de connexion
//au serveur.
if(!$mysql_id){
echo "Problème de connexion à la base : ".mysql_errno().":
".mysql_error()."<br />";
exit;
}

//SELECTION DE LA BASE
mysql_select_db($base,$mysql_id);

//SELECTION DE LA TABLE
$table = 'FP_Complet';

//CONSTRUCTION DE LA CLAUSE 'WHERE'
if ($nom){ // Si un nom est inscrit dans le formulaire
$where=" WHERE nom LIKE '%".$nom. "%'";
if ($prenom){ // Si le prénom est aussi renseigné
$where=" WHERE nom='".$nom."' AND prenom LIKE '%".$prenom. "%'";
}
}
else{ // Les deux champs sont vides
$where="";
}

//CONSTRUCTION DE LA CLAUSE 'LIMIT'
//Nombre d'enregistrements souhaités par page
$nb_par_page;

if (!$page){
$ligne_debut=0;
}
else{
$page=$page-1;
$ligne_debut=$page*$nb_par_page;
}

$limit=" LIMIT ".$ligne_debut.", ".$nb_par_page;

//REQUETE SQL
$qry="SELECT * FROM $table".$where." ORDER BY nom " .$limit;
//echo $qry;

//EXECUTION DE LA REQUETE
$result=mysql_query($qry);

$nb_pages=($nb_fiches_max/$nb_par_page);
$nb_pagesÎil($nb_pages);

//CALCUL DU NOMBRE DE PAGES

if (!$nb_pages) { // Si le nb de pages n'a encore jamais été calculé

if ($nom){
$nb_fiches_max=mysql_num_rows($result);
}
else{
$qry2="SELECT * FROM $table";
//echo $qry2;
$result2=mysql_query($qry2);
$nb_fiches_max=mysql_num_rows($result2);
}
$nb_pages=($nb_fiches_max/$nb_par_page);
$nb_pagesÎil($nb_pages);
}

// MESSAGE AU DESSUS DU TABLEAU
if ($nb_fiches_max > 0){ //S'il y a au moins un résultat
$page=$page+1;
$msg= "page ".$page." sur ".$nb_pages; //On affiche le nombre de
pages sur le total
}
else{
$msg="Désolé, aucun enregistrement trouvé !"; //Sinon, on signale
qu'il n'y a pas de résultats
}
?>

<!DOCTYPE php PUBLIC "-//W3C//DTD Xphp 1.1//EN"
"http://www.w3.org/TR/xphp11/DTD/xphp11.dtd">
<php xmlns="http://www.w3.org/1999/xphp" xml:lang="fr">
<head>
<title>Fonctionnaires</title>
<meta http-equiv="Content-Type" content="text/php; charset=iso-8859-1" />
<style type="text/css">

body{
background-color:#ffffff;
font-family: Trebuchet MS,Verdana,Geneva,Arial,Helvetica,sans-serif;
}
table.result{
font-family:Arial,sans-serif;
border-collapse:collapse;
border:1px solid #333333;
margin-top:10px;
width:780px;
text-align: center;
}
td.nom {
padding:5px;
width: 200px;
border:1px solid #333333;
text-align: center;
background-color:#087417;
color:#ffffff;
}
td.prenom {
padding:5px;
width: 250px;
border:1px solid #333333;
text-align: center;
background-color:#087417;
color:#ffffff;
}
td {
border:1px solid #333333;
padding:3px;
text-align: left;
}
span.page{
padding-left: 10px;
}
div.pages{
text-align: center;
padding-top: 5px;
}
</style>
</head>
<div align="center">
<body bgcolor="#E7FFB3"><h1>Les fonctionnaires dans les registres</h1>
Vous trouverez ici les donn&eacute;es de fonctionnaires vues dans
les registres.<br>
<strong>Pourquoi cette base?</strong><br>
Le fait que les fonctionnaires soient appelés à se déplacer les rends
difficilement localisables.<br>
<br>
</div><center>
<?
##########################
# Recherche infos pour affichage des infos completes

$r=mysql_query("SELECT id FROM $table ORDER by id DESC LIMIT 1 " );
while($row =mysql_fetch_array($r))
{
echo ("<b><p>Il y a "); ?>
<font color="#006599">
<? echo (" $row[id] "); ?>
</font>
<? echo (" entrées dans la base <br> "); }

//$r=mysql_query("SELECT nom, id FROM $table ORDER by id LIMIT 1 ");
// while($row =mysql_fetch_array($r))
// {
// echo ("Pour "); ?>
<font color="#006599">
<? // echo (" $row[id] "); ?>
</font>
<?// echo (" patronymes dans la base<br></b>"); }
?>


<!-- FORMULAIRE -->
<form action="FP_adh.php" method="get" class="page">
<table align="center" style="border:0px;">
<tr>
<td style="border:0px;">NOM</td>
<td style="border:0px;"><input type="text" name="nom"
value="<?echo $nom?>" /></td>
<td style="border:0px;">Prénom</td>
<td style="border:0px;"><input type="text" name="prenom"
value="<?echo $prenom?>" /></td>
<td style="border:0px;"><input type="submit" name="submit"
value="Rechercher" /></td>
</tr>
</table>
</form>

</div>
<!-- FIN FORMULAIRE -->
<br><br>
Interrogez la base par départements<br>
<a href="FP_cartes.php">Lieux des registres</a><br>
<a href="FP_cartes_n.php">Lieux de naissances</a><br>
Lieux de décès à l'étude
<br>
<?php
echo "<br />"; //On passe une ligne
include ('../../Pied_page.php'); ?>
</center>
</body>
</html>



<?php /* echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; */?>
<?php
//INCLUSION DU FICHIER DE CONNEXION
include("connect.inc");

//CONNEXION A LA BASE
$mysql_id=mysql_connect($server,$user,$pwd);

// Sortir du script en cas de problème de connexion
//au serveur.
if(!$mysql_id){
echo "Problème de connexion à la base : ".mysql_errno().":
".mysql_error()."<br />";
exit;
}

//SELECTION DE LA BASE
mysql_select_db($base,$mysql_id);

//SELECTION DE LA TABLE
$table = 'FP_Complet'; // Le nom de cette table ne passe pas chez Sivit !

//CONSTRUCTION DE LA CLAUSE 'WHERE'
if ($nom){ // Si un nom est inscrit dans le formulaire
$where=" WHERE Nom LIKE '%". $nom. "%'";
if ($prenom){ // Si le prénom est aussi renseigné
$where=" WHERE nom='". $nom."' AND prenom LIKE '%".$prenom. "%'";
}
}
else{ // Les deux champs sont vides
$where="";
}

//CONSTRUCTION DE LA CLAUSE 'LIMIT'
//Nombre d'enregistrements souhaités par page
$nb_par_pageP;

if (!$page){
$ligne_debut=0;
}
else{
$page=$page-1;
$ligne_debut=$page*$nb_par_page;
}

$limit=" LIMIT ".$ligne_debut.", ".$nb_par_page;

//REQUETE SQL
$qry="SELECT * FROM $table".$where." ORDER BY nom " .$limit;
//echo $qry;

//EXECUTION DE LA REQUETE
$result=mysql_query($qry);

$nb_pages=($nb_fiches_max/$nb_par_page);
$nb_pagesÎil($nb_pages);

//CALCUL DU NOMBRE DE PAGES

if (!$nb_pages) { // Si le nb de pages n'a encore jamais été calculé

if ($nom){
$nb_fiches_max=mysql_num_rows($result);
}
else{
$qry2="SELECT * FROM $table";
//echo $qry2;
$result2=mysql_query($qry2);
$nb_fiches_max=mysql_num_rows($result2);
}
$nb_pages=($nb_fiches_max/$nb_par_page);
$nb_pagesÎil($nb_pages);
}

// MESSAGE AU DESSUS DU TABLEAU
if ($nb_fiches_max > 0){ //S'il y a au moins un résultat
$page=$page+1;
$msg= "page ".$page." sur ".$nb_pages; //On affiche le nombre de
pages sur le total
}
else{
$msg="Désolé, aucun enregistrement trouvé !"; //Sinon, on signale
qu'il n'y a pas de résultats
}
?>

<!DOCTYPE php PUBLIC "-//W3C//DTD Xphp 1.1//EN"
"http://www.w3.org/TR/xphp11/DTD/xphp11.dtd"><head>
<title>Fonctionnaires</title>

<center><h1>Les fonctionnaires dans les registres</h1></center>
<?php
echo $msg.""; // On écrit le message au dessus du tableau
?>


<!-- EN-TÊTES DU TABLEAU -->
<center>
Pour obtenir les informations complètes vous devez accepter les 'pop-up'
de ce site<br><br>
Cliquez sur la ligne de votre choix.
<link rel="stylesheet" href="base_resultat.css" type="text/css">

<table class="result">
<tr>
<td class="nom"><strong><font size="3">Nom</font></strong></td>
<td class="prenom"><strong><font size="3">Prénom</font></strong></td>
<td class="date_N"><strong><font size="3">Date
Naissance</font></strong></td>
<td class="lieu_N"><strong><font size="3">Lieu
Naissance</font></strong></td>
<td class="dpt_N"><strong><font size="3">Département
Naissance</font></strong></td>
</tr>

<!-- FIN EN-TÊTES DU TABLEAU -->

<!-- REMPLISSAGE DU TABLEAU -->

<?php
while($row=mysql_fetch_object($result)){
echo "<tr style="cursor: hand;"
onmouseover="this.style.backgroundColor='#6C81B9'"
onmouseout="this.style.backgroundColor = ''"
onclick="javascript:window.open('pop_FP_adh.php?id=$row->id&choixpop_FP_adh','widthH0,height00,left=0,top=0,toolbar=no,menubar=no,resizable=no,scrollbars=yes');return(false)">";
echo "<td>$row->nom</td>";
echo "<td>$row->prenom</td>";
echo "<td>$row->date_n</td>";
echo "<td>$row->lieu_n</td>";
echo "<td>$row->dpt_n</td>";
echo "</tr>";
}
?>

</table>
</center>
<!-- FIN REMPLISSAGE DU TABLEAU -->
</div>

<!-- LIENS VERS LES AUTRES PAGES -->
<div align="center" class="pages">
<?php
$i=0;
while ($i <= $nb_pages-1):
$j=$i+1;
if ((!$nom) AND (!$prenom)){
echo "<span class="page"><a
href="FP_adh.php?page=".$j."&nb_pages=".$nb_pages."">".$j."</a></span>";
}
else if (($nom) AND ($prenom)) {
echo "<span class="page"><a
href="FP_adh.php?page=".$j."&nb_pages=".$nb_pages."&nom=".$nom."&prenom=".$prenom."">".$j."</a></span>";
}
else{
echo "<span class="page"><a
href="FP_adh.php?page=".$j."&nb_pages=".$nb_pages."&nom=".$nom."">".$j."</a></span>";
}
$i++;
endwhile;
?>
</div>
<!-- FIN LIENS VERS LES AUTRES PAGES -->
<?php
echo "<br />"; //On passe une ligne
include ('../../Pied_page.php'); ?>
</body>
</html>




<?
//INCLUSION DU FICHIER DE CONNEXION
include("connect.inc");

//CONNEXION A LA BASE
$mysql_id=mysql_connect($server,$user,$pwd);

// Sortir du script en cas de problème de connexion
//au serveur.
if(!$mysql_id){
echo "Problème de connexion à la base : ".mysql_errno().":
".mysql_error()."<br />";
exit;
}

//SELECTION DE LA BASE
mysql_select_db($base,$mysql_id);

//SELECTION DE LA TABLE
$table = 'FP_Complet'; // Le nom de cette table ne passe pas chez Sivit !

//REQUETE SQL
$qry="SELECT * FROM $table WHERE id='".$id."'";
//echo $qry;

//EXECUTION DE LA REQUETE
$result=mysql_query($qry);

//AFFECTATION DES VALEURS RENVOYEES AUX VARIABLES
while($row=mysql_fetch_object($result)){
$adh_nom_prenom=$row->adh_nom_prenom;
$adh=$row->adh;
$depot=$row->depot;
$dpt_depot=$row->dpt_depot;
$cote=$row->cote;
$prenom=$row->prenom;
$date_n=$row->date_n;
$lieu_n=$row->lieu_n;
$dpt_n=$row->dpt_n;
$titre=$row->titre;
$nom=$row->nom;
$profession=$row->profession;
$acte=$row->acte;
$qualite=$row->qualite;
$date_acte=$row->date_acte;
$description=$row->description;
$commentaire=$row->commentaires;
}

//DECLARATIONS DES FONCTIONS RIGHT ET LEFT QUI N'EXISTENT PAS EN PHP !
function left($chaine,$num) {
return substr($chaine,0,$num);
}

function right($chaine,$num) {
return substr($chaine,-$num);
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Fonctionnaires</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">

body{
background-color:#FEE7FE;
font-family: Trebuchet MS,Verdana,Geneva,Arial,Helvetica,sans-serif;
}
span.bold{
font-weight: bold;
}
a:link {
color: #0A42A7;
text-decoration:underline;
padding-right: 6px;
padding-left: 6px;
}
a:visited {
color: #0A42A7;
text-decoration:underline;
padding-right: 6px;
padding-left: 6px;
}
a:hover{
text-decoration:none;
color:#0A42A7;
padding-right: 6px;
padding-left: 6px;
}
</style>
</head>
<body bgcolor="#FFDFFC">
<div align="center"><h1>Les fonctionnaires dans les registres</h1>
<h3 style="text-align: center">Ensemble des informations sur</h3>
<h2 style="text-align: center;"><? echo $nom." ".$prenom;?></h2>
<? //dépôt?>
<div style="padding-left: 15px;"><span class="bold">Dépôt :
</span><span><? echo $depot." ".$dpt_depot;?></span></div>

<hr width="50%" />
<?
//Cote
if ($cote){
echo "<div style="padding-left: 15px;"><span class="bold">Cote du
document: </span><span>$cote</span></div>";
}

//Titre
if ($titre){
echo "<div style="padding-left: 15px;"><span class="bold">Titre du
document: </span><span>$titre</span></div>";
}
?>
<hr width="50%" />
<?
//Profession
if ($profession){
echo "<div style="padding-left: 15px;"><span
class="bold">Profession: </span><span>$profession</span></div>";
}

//LIGNE NAISSANCE
if (($date_n) AND ($lieu_n) AND ($dpt_n)) { // Si le lieu et la date de
naissance sont présents
echo "<div style="padding-left: 15px;"><span class="bold">Né le
</span><span>$date_n</span><span class="bold"> à
</span><span>$lieu_n</span> (<span>$dpt_n</span>)</div>";
}
else if (($date_n) AND (!$lieu_n) AND ($dpt_n)){ // Si la date de
naissance est présente mais pas le lieu
echo "<div style="padding-left: 15px;"><span class="bold">Né le
</span><span>$date_n</span> dans le <span>$dpt_,</span></div>";
}
else if ((!$date_n) AND ($lieu_n) AND ($dpt_n)){ // Si le lieu est
présent sans la date de naissance (si ça existe ;-))
echo "<div style="padding-left: 15px;"><span class="bold">Né à
</span><span>$lieu_n</span> (<span>$dpt_n</span>)</div>";
}

// Type acte
if ($acte){
echo "<div style="padding-left: 15px;"><span class="bold">Type
d'acte: </span><span>$acte</span></div>";
}

// Date de l'acte
if ($date_acte){
echo "<div style="padding-left: 15px;"><span class="bold">Date de
l'acte: </span><span>$date_acte</span></div>";
}

// Qualité
if ($qualite){
echo "<div style="padding-left: 15px;"><span class="bold">Qualité:
</span><span>$qualite</span></div>";
}
?>
<hr width="50%" />
<?

// Description
if ($description){
echo "<div style="padding-left: 15px;"><span
class="bold">Description de
l'acte:<br></span><span>$description</span></div>";
}

// Commentaires
if ($commentaire){
echo "<div style="padding-left: 15px;"><span
class="bold">Commentaires:</span><br><span>$commentaire</span></div>";
}
?>
<hr width="50%" />
<div align="center"><font size="-2">Informations relevées par: <? echo
$adh_nom_prenom;?></font>
</div>
<br>
<? include('../../Pied_page.php');?>
</body>
</html>
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 7
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #19062731
Bonjour,

Le 06/04/2009 11:36, Yannick a écrit :

N'étant pas très doué je n'arrive pas à modifié les 3 scripts suivants.
Il fonctionne très bien sous php4 mais rien à faire sous php5.
1) la recherche ne se fait pas
2) l'affichage dans le pop est vide



Tu as un message d'erreur ? Par ailleurs ce serait bien que tu nous
donnes une URL pour qu'on puisse se rendre compte par nous-mêmes où ça
coince, MAIS PAS TOUT DE SUITE ! En tout premier lieu, il faudrait que
tu vérifies, au cas où connect.inc contiendrait des identifiants de
connection (mot de passe...), qu'il ne soit pas accessible directement
par http://...chemin.d.accès.../connect.inc !

<?



Tu autorises les « balises courtes » (short tags en anglais) ? Si oui,
c'est OK. Sinon, il faut écrire « <?php ».

//INCLUSION DU FICHIER DE CONNEXION
include("connect.inc");



ACHTUNG ! C'est une habitude très dangereuse de mettre un fichier avec
identifiants de connexion dans l'arborescence accessible directement
depuis l'extérieur, qui plus est avec une extension différence de .php
(et donc le risque qu'il soit présenté en clair à l'appelant au lieu
d'être exécuté).

//CONNEXION A LA BASE
[...]



Je ne lis pas tout, c'est bien trop long.

<!DOCTYPE php PUBLIC "-//W3C//DTD Xphp 1.1//EN"
"http://www.w3.org/TR/xphp11/DTD/xphp11.dtd">



;-)

Joli DOCTYPE. Il y a des navigateurs qui le comprennent ?




Intéressant. Quel est le Content-Type transmis avec ce fichier dans les
entêtes HTTP ?

<head>
<title>Fonctionnaires</title>
<meta http-equiv="Content-Type" content="text/php; charset=iso-8859-1" />



Ah... (???)

[...]
</html>



Je n'ai pas loupé une étape ? C'est bien l'élément ouvert par <php> qui
est fermé par </html> ? Bon, j'ai peut-être un peu trop coupé : essaye
de nous mettre les fichiers un par un sur un site tel que cjoint.com par
exemple afin que ce soit plus clair.

[...]



Bon, je ne cite pas le reste, il y a déjà fort à faire avec ce qui
précède (mais si l'une de mes remarques t'a semblé pertinente, bien sûr
tu peux la reporter dans les autres fichiers).

Cordialement,
--
Olivier Miakinen
Eric Demeester
Le #19064501
dans (in) fr.comp.lang.php, Yannick
Bonjour,

N'étant pas très doué je n'arrive pas à modifié les 3 scripts suivants.
Il fonctionne très bien sous php4 mais rien à faire sous php5.
1) la recherche ne se fait pas
2) l'affichage dans le pop est vide



En plus des pertinentes remarques d'Olivier, je constate que :

INDEX.PHP


[...]
//CONSTRUCTION DE LA CLAUSE 'WHERE'
if ($nom){ // Si un nom est inscrit dans le formulaire



D'où sort $nom ?

Dans le formulaire on voit que :

<!-- FORMULAIRE -->



Le nom est donc envoyé en GET au script suivant.

Tout ça me fait penser à un problème de transfert de variables d'un
script à l'autre. Si register_globals est à On en PHP4 et à Off en PHP5,
(à vérifier dans un phpinfpo()), il est normal que plus rien ne
fonctionne.

Pour voir si le problème vient de là, essaye ça en début du script qui
traite le formulaire :

$nom = "";
if (isset($_REQUEST['nom']) & !empty($_REQUEST['nom'])) {
$nom = $_REQUEST['nom'];
echo 'Nom : ' . $nom . '<br />';
} else {
echo 'Le problème est ailleurs...<br />';
}

Si le nom s'affiche, tu as trouvé la solution.

Voir : http://www.manuelphp.com/php/ini.register-globals.php

Bon courage.

--
Eric
Yannick
Le #19066891
Olivier Miakinen a écrit :
Bonjour,

Bon, je ne cite pas le reste, il y a déjà fort à faire avec ce qui
précède (mais si l'une de mes remarques t'a semblé pertinente, bien sûr
tu peux la reporter dans les autres fichiers).

Cordialement,



Bonjour,

Tes remarques sont pertinentes et je modifierais les fichiers en
conséquences.
Non je n'ai pas de message d'erreur

voici les deux URL à tester
http://fp.voyeaud.org:81/ pour le php5
http://fp.voyeaud.org/ pour le php4

Le php4 marche mais pas le php5
Teste avec 'ma' en Nom tu comprendras ce qui ne colle pas

Merci de prendre le temps de m'aider.

--
Yannick VOYEAUD
Denis Beauregard
Le #19071781
Le 06 Apr 2009 20:14:08 GMT, Yannick fr.comp.lang.php:

Olivier Miakinen a écrit :
Bonjour,

Bon, je ne cite pas le reste, il y a déjà fort à faire avec ce qui
précède (mais si l'une de mes remarques t'a semblé pertinente, bien sûr
tu peux la reporter dans les autres fichiers).

Cordialement,



Bonjour,

Tes remarques sont pertinentes et je modifierais les fichiers en
conséquences.
Non je n'ai pas de message d'erreur

voici les deux URL à tester
http://fp.voyeaud.org:81/ pour le php5
http://fp.voyeaud.org/ pour le php4

Le php4 marche mais pas le php5
Teste avec 'ma' en Nom tu comprendras ce qui ne colle pas



De façon évidente, les paramètres n'arrivent pas à destination.

Je ferais une intégration de tous les fichiers en un fichier
unique et affichage des données intermédiaires pour voir où les
données se perdent.


Denis
Eric Demeester
Le #19074411
dans (in) fr.comp.lang.php, Denis Beauregard

De façon évidente, les paramètres n'arrivent pas à destination.



C'est aussi mon avis, d'autant plus après avoir testé les versions php4
et 5 des pages proposées par Yannick.

Je persiste à penser qu'il y a un problème de configuration entre php4
et php5, et que ce problème concerne register_globals.

--
Eric
Yannick
Le #19074421
Eric Demeester a écrit :

Tout ça me fait penser à un problème de transfert de variables d'un
script à l'autre. Si register_globals est à On en PHP4 et à Off en PHP5,
(à vérifier dans un phpinfpo()), il est normal que plus rien ne
fonctionne.

Pour voir si le problème vient de là, essaye ça en début du script qui
traite le formulaire :

$nom = "";
if (isset($_REQUEST['nom']) & !empty($_REQUEST['nom'])) {
$nom = $_REQUEST['nom'];
echo 'Nom : ' . $nom . '<br />';
} else {
echo 'Le problème est ailleurs...<br />';
}

Si le nom s'affiche, tu as trouvé la solution.

Voir : http://www.manuelphp.com/php/ini.register-globals.php

Bon courage.



Bonsoir,

Oui lorsque j'ai rajouté tes lignes et mis 'ma' dans le formulaire il
m'a été affiché Nom : ma
et ensuite il m'a affiché la même page ne répondant pas à ce critère

donc si je te suis c'est ce type de problème
Comment je le résoud dans mon script? Je n'ai pas accès à la modif vers
ON ce qui d'ailleurs ne semble pas recommandé de faire.

La variable $nom que tu me signale en début de script est réellement
crée à partir du formulaire

Amitiés

--
Yannick VOYEAUD
Yannick
Le #19074931
Eric Demeester a écrit :

Je persiste à penser qu'il y a un problème de configuration entre php4
et php5, et que ce problème concerne register_globals.




Re,

Je pense que tu as raison!
C'est bien pour cela que j'ai mis TOUS les éléments de compréhension du
problème en diffusant le code des 3 pages concernées.

L'un des modérateurs m'a suggéré une page que je suis allé voir et je ne
suis pas sûr d'avoir bien compris:

À chaque fois que j'ai une ligne de type URL je dois mettre juste avant
$toto=$_REQUEST['toto']
où toto est la variable utilisée dans l'adresse url après le '?' et ce
quelque soit leur nombre cad si mon url contient un & pour dire de
prendre une seconde variable je dois faire le même rajout pour la
seconde variable

Hors apparemment ce n'est pas totalement exact selon un autre modérateur!

Que dois-je faire?

Au passage une bonne poignée de main à l'ami Denis du Québec.

Amitiés

--
Yannick VOYEAUD
Eric Demeester
Le #19079751
dans (in) fr.comp.lang.php, Yannick
Bonjour Yannick,

Oui lorsque j'ai rajouté tes lignes et mis 'ma' dans le formulaire il
m'a été affiché Nom : ma
et ensuite il m'a affiché la même page ne répondant pas à ce critère



C'est parce qu'il faut appliquer le même traitement à toutes les
variables passées à ton script. Il reste peut-être d'autres erreurs,
mais il faut procéder par élimination...

donc si je te suis c'est ce type de problème
Comment je le résoud dans mon script? Je n'ai pas accès à la modif vers
ON ce qui d'ailleurs ne semble pas recommandé de faire.



Mieux vaut laisser register_globals à Of pour des raisons de sécurité,
effectivement.

Je vais essayer de t'expliquer le mécanisme...

Dans un formulaire, tu as :

- une script de destination (action="traitement.php") ;
- une méthode de transmission des données (GET ou POST) ;
- une succession de champs (nom, prenom, etc.) ;
- un bouton d'envoi (submit) provoquant l'appel à la page de
destination.

Voir par exemple :
http://www.siteduzero.com/tutoriel-3-13596-les-formulaires.html#ss_part_1
pour des explications détaillées.

Pour utiliser les variables (le contenu des champs du formulaire) dans
le script de destination, il faut d'abord les récupérer, car avec
register_global à Off, elles ne sont pas directement disponibles, mais
contenues dans un tableau ($_GET ou $_POST).

On fait cela au début du script, avant d'effectuer des traitements sur
les variables, selon la syntaxe que je t'indiquais.

// initialisation des variables (non indispensable mais
// je trouve ça plus propre)
$nom = "";
$prenom = "";

// récupération des variables. j'utilise $_REQUEST qui permet de
// récupérer indifféremment les variables passées et GET ou en
// POST, mais chacun ses goûts ;)

// Le nom
// On vérifie que la variable existe et est non vide
if (isset($_REQUEST['nom']) & !empty($_REQUEST['nom'])) {
$nom = $_REQUEST['nom'];
}

// Le prénom
if (isset($_REQUEST['prenom']) & !empty($_REQUEST['prenom'])) {
$prenom = $_REQUEST['prenom'];
}

L'opération est à renouveler pour toutes les variables transmises,
qu'elles soient contenues dans un formulaire ou passées directement dans
l'URL.

S'il n'y a pas d'autres erreurs, ton script devrait s'exécuter
correctement.

--
Eric
Yannick
Le #19082141
Eric Demeester a écrit :

Pour utiliser les variables (le contenu des champs du formulaire) dans
le script de destination, il faut d'abord les récupérer, car avec
register_global à Off, elles ne sont pas directement disponibles, mais
contenues dans un tableau ($_GET ou $_POST).

On fait cela au début du script, avant d'effectuer des traitements sur
les variables, selon la syntaxe que je t'indiquais.



Bonsoir,

En ayant vraiment souffert je crois avoir trouvé!
C'est à mettre, $nom=$_REQUEST['nom'], avant le traitement de la requête
SQL de la page qui va recevoir les informations.

J'ai renommé mes fichiers en index_2.php pour tester et je crois que
cela marche. Il ne resterait plus que les bas de pages à traiter de la
même façon.

Pour récapituler je ne touche pas à index.php mais je tritures
FP_adh.php et Pop_FP_Adh.php

Où puis-je faire passer les deux copies (avant et après) pour servir à
d'autres. Je ne dois sûrement pas être le seul à avoir ce soucis de
passage 'forcé' de php4 à php5?

Amitiés
Eric Demeester
Le #19084371
dans (in) fr.comp.lang.php, Yannick
Bonjour,

En ayant vraiment souffert je crois avoir trouvé!
C'est à mettre, $nom=$_REQUEST['nom'], avant le traitement de la requête
SQL de la page qui va recevoir les informations.



Oui.

Tu peux généraliser à tout passage de variables entre scripts en
respectant cet ordre :

1. on initialise les variables
2. on les récupère via $_REQUEST en vérifiant au passage si elles
existent et sont non vides)
3. on effectue les traitements associés aux variables (interrogation
de la base de données ou tout autre traitement)
4. on affiche les résultats

J'ai renommé mes fichiers en index_2.php pour tester et je crois que
cela marche. Il ne resterait plus que les bas de pages à traiter de la
même façon.



Même principe que ci-dessus, il faut récupérer les variables et les
traiter _avant_ de les afficher. Après, l'endroit et l'ordre dans
lequels elles seront affichées dans la page importe peu...

Pour récapituler je ne touche pas à index.php mais je tritures
FP_adh.php et Pop_FP_Adh.php



index.php envoie des informations à telle ou telle page, elles sont
récupérées dans la page de destination, ensuite on applique l'ordre
indiqué ci-dessus, peu importe le nom de la page (ou du script) de
destination, c'est généralisable à la quasi-totalité des cas.

Où puis-je faire passer les deux copies (avant et après) pour servir à
d'autres. Je ne dois sûrement pas être le seul à avoir ce soucis de
passage 'forcé' de php4 à php5?



Le fait d'avoir rencontré ce problème lors du passage de php4 à php5 est
un cas particulier que tu as rencontré. La plupart des hébergeurs que je
connais ont imposé register_globals à Off dès php4, c'est d'ailleurs je
crois sa configuration par défaut.

La vraie difficulté est de comprendre les effets de register_globals sur
le comportement de PHP en terme de transmission d'informations entre
pages, c'est très largement documenté dans des tutoriels disponibles en
ligne. L'essentiel est que tu ais compris le mécanisme et résolu ton
problème. Inutile je pense, compte tenu du grand nombre de sites
traitant déjà de cela, d'écrire une documentation supplémentaire, même
si cette proposition t'honore :)

Amicalement,

--
Eric
Publicité
Poster une réponse
Anonyme