Passage de php4 à php5.6 : site perso down

Résolu/Fermé
Recoh Messages postés 37 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021 - 2 févr. 2021 à 18:36
Recoh Messages postés 37 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021 - 2 févr. 2021 à 21:16
Configuration: Linux / Firefox 85.0

Bonjour,
J'ai été sensibilisé par l'un de vous pour passer en php5.6.
Pourquoi 5.6 ?
Parce que free.fr migre vers la 5.6 !
Pourquoi free.fr ?
Parce que j'ai pas envie de payer pour un site perso et j'utilise free.fr depuis (très) longtemps pour mon site perso et d'autres sites que je crée. Et ça me va bien même s'ils ont "20 ans de retard" !
Alors pour ce faire, j'ai collé un fichier htaccess à la racine de mon ftp, contenant :
<IfDefine Free>
php56 1
</IfDefine>

Depuis : site en berne !
J'ai révisé mes pages dont surtout la page d'accueil (index.php) qui contient des "include" tout simples mais certains blocages résistent à mon analyse et mon niveau de programmation (j'ai appris comme ça, sur le tas) :
À plusieurs reprises, j'inclue un genre de switch hyper simple dont voici le contenu :
<?php
if ($spot == 1) {
	include 'page1.inc.php';
} elseif ($spot == 2) {
	include 'page2.inc.php';
} else {
	include 'default.inc.php';
}
?>

Le lien qui donne la variable "spot" est un lien comme celui-ci :
<a href="?spot=1"><img src="img.jpg"></a>

ou comme ça :
<a href="?spot=2&nav=1"><img src="img.jpg"></a>

Constat :
-
?spot=1
est devenu inopérant depuis que j'ai collé le htaccess. Quand je l'enlève, ça refonctionne.
-
?spot=2&nav=1
est aussi inopérant avec le htaccess, et lorsque je reviens à php4, le caractère
&
est en rouge à l'affichage du code source, et la variable "nav" est inopérante...
J'avais contruit un lien à 3 variables du genre
?spot=1&nav=2&oxy=3
, c'était pire !! Et même en simplifiant ça ne marche pas.
J'ai compulsé des tonnes de forums, de liens, etc. sans trouver un switch aussi basique qui permette d'afficher un script avec des données supplémentaires en début de page (avant le <html>), dans le <head> et dans le <body>.
J'ai essayé de remplacer tous mes liens par :
/index.php?spot=1&...
./dossier/?spot=1&...
/dossier/?spot=1&...
http://monsite.free.fr/dossier/index.php?spot=1&...
etc.
Rien n'y fait, ça ne fonctionne pas.
Et lorsque je reviens à php4, c'est le script sql par le
try
qui plante au caractère
{
qui provoque une erreur (insoluble).
En gros : À L'AIDE !!!
Merci de votre lecture.

2 réponses

jordane45 Messages postés 38213 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 juin 2024 4 678
Modifié le 2 févr. 2021 à 18:47
Bonjour,

A l'époque, les variables transmises par POST ou GET étaient "automatiquement'" traduites en variables php...

Mais désormais, il faut les initialiser toi même.

Par exemple :
$spot = !empty($_GET['spot']) ? $_GET['spot'] : NULL;
$nav= !empty($_GET['nav']) ? $_GET['nav'] : NULL;
$oxy= !empty($_GET['oxy']) ? $_GET['oxy'] : NULL;

if ($spot == 1) {
 include 'page1.inc.php';
} elseif ($spot == 2) {
 include 'page2.inc.php';
} else {
 include 'default.inc.php';
}


A noter que ton if/elseif pourrait être réécrit un peu plus simplement

//si la variable $spot n'est pas null
if ($spot) {
 include 'page'.$spot.'.inc.php'; // on inclus la page contenant la valeur de $spot pour son "numéro"
} else {
 include 'default.inc.php';
}



0
Recoh Messages postés 37 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021
2 févr. 2021 à 19:52
waah !
Merci Jordane !
J'avais compris que ça devait passer par un code de ce genre mais là tu as été très généreux !
Je vais me baser sur ta réponse pour reconstruire mes pages, merci encore !
0
jordane45 Messages postés 38213 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 juin 2024 4 678 > Recoh Messages postés 37 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021
2 févr. 2021 à 19:55
A noter que la syntaxe
$spot = !empty($_GET['spot']) ? $_GET['spot'] : NULL;

Est ce qu'on appel l'écriture ternaire...
C'est une sorte de IF else
$maVariable = ( mon teste )  ? valeur si test ok : valeur si test ko ;

L'instruction !empty sert à s'assurer que la variable existe et n'est pas vide (ou false ou null ou =0 )

En gros, ça veut dire:
Si la variable $_GET['spot'] existe et n'est pas null/vide/false, alors je stocke la valeur de $_GET['spot'] dans la variable $spot, sinon j'y stocke la valeur NULL
0
Recoh Messages postés 37 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021 > jordane45 Messages postés 38213 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 juin 2024
2 févr. 2021 à 21:16
Merci pour ces infos.
Je me suis trouvé un livre sur php5.6, j'espère que ça sera accessible parce que j'ai des notions mais c'est plutôt de la débrouille à mon niveau !
0
Recoh Messages postés 37 Date d'inscription dimanche 19 juillet 2020 Statut Membre Dernière intervention 2 mars 2021
2 févr. 2021 à 21:10
Ça marche parfaitement ! J'ai retrouvé mon lien avec triple variable ;
?s=&n=&o=
, ça allège le tout c'est parfait.
Je te remercie, en plus je peux imaginer plein d'autres trucs...
Par contre, l'accès ou les requêtes sql en PDO sont pas encore fonctionnelles, mais aucune erreur signalée, je vais essayer de peaufiner.
Ciao !!
0