8721 sujets

Développement web côté serveur, CMS

Bonjour,

Je tente de faire évoluer le script d'un forum qui tourne jusqu'à php 5.6, mais pas 7 parce qu'il utilise mysql_.
Je viens de remplacer les quelques 500 mysql_ en mysqli_:
- Mysql_close
- Mysql_connect
- mysqli_result (Ajouté la fonction mysql_result)
- mysql_query vers mysqli_query($db, ...
- mysql_numrows vers mysqli_num_rows
- mysql_insert_id vers mysqli_insert_id
Mes connexions à la base de données semblent bien se passer mais le script ne tourne plus sur (php5): page blanche.
Le script est à un niveau trop élevé pour moi, bourré d'includes et je ne parviens à voir où il coïnce (pas de message d'erreurs, j'ai essayé l'utilisation d'echo de variables).

Ma question est la suivante: en passant à mysqli_, y a -t-il d'autre fonctions à modifier que celles évoquées ci-dessus?

Merci,

Pierre
Administrateur
Il y a quelques petites différences d'usage qui peuvent provoquer cela.

L'idéal serait tout de même de pouvoir afficher les erreurs. Si la page est blanche c'est peut être que le serveur est configuré pour ne pas les afficher par défaut. Il faut regarder s'il est possible de modifier ce comportement.
C'est parfois possible localement en appelant http://php.net/manual/fr/function.error-reporting.php :

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


Sans les erreurs, qui indiqueront quelles lignes posent problème, avancer à tâtons est extrêmement compliqué et long.
dew a écrit :
ini_set('display_startup_errors', 1);

Ah ! Merci pour le partage car je ne le connaissais pas celui-là...
Modifié par Olivier C (26 Jan 2017 - 07:13)
Bonjour,

Je n'ai pas eu d'avis de réponse et vous réponds tardivement. Je m'en excuse.

Où doit-on mettre ces lignes (ini_... et error...)?
Pour info, j'ai activé l'affichage des erreurs dans l'interface de paramétrage de php. Le serveur m'affiche des erreurs non bloquante parfois.

Cordialement,
Bonjour soriro,

Il faut ajouter ces lignes de code au début de l'exécution du script. Typiquement au début du fichier index.php, à la racine du site.
Merci pour ta réponse.
Après utilisation, j'ai effectivement vu s'afficher des messages d'erreur (avec php5.4). Ils proviennent des appels de variables du type:
"$_GET['scheme'];"

Si j'ajoute :
extract($_GET, EXTR_OVERWRITE );
extract($_POST, EXTR_OVERWRITE );
les messages d'erreurs disparaissent pour certaines pages.

Qu'en pensez-vous?
salut,

il est préférable d'éviter l'utilisation de extract. ces deux lignes pose problèmes car il y un risque d'écrasement des variables déjà existantes.

Pour palier la suppression du register_globals extract semble une bonne idée, mais il est préférable d'utiliser les tableaux $_GET et $_POST.
Cela permet de connaitre simplement la provenance de l'information rapidement.

Les fonctions isset ou empty permettent de vérifier que toutes les informations sont présentes dans l'url ($_GET) ou le formulaire ($_POST) et le cas échéant avoir une valeur par défaut.

C'est un peu long pour modifier mais ensuite cela évite de s'arracher les cheveux en cas d'erreur Smiley cligne (gain en maintenance)


@+
Merci pour ta réponse,
Est-il possible que tu m'indiques les lignes à ajouter?
Car en cherchant, il semble que cela soit assez compliqué et c'est impossible pour moi car je travaille sur un code qui n'est pas de moi et bcp trop compliqué pour moi (que des includes et des variables)
J'avais essayé de faire ceci:
$scheme = $_GET['scheme'];
mais sans résultat
Modifié par soriro (16 Feb 2017 - 10:16)
de rien, ce n'est pas une ligne précisément c'est une façon de faire.
si le extract répond a ton attente pourquoi pas, cela reste un bout de sparadrap.

il faut une vrai gestion des données issue de l'utilisateur et cela passe par les super globale $_GET et $_POST.
ensuite le problème est le même pour les variables de session, les cookies et autre.

c'est assez pénible de passer un code vers cette pratique (qui est la seule utilisable sur les dernière version de php) mais au final tu va y gagner.

un tuto sur la validation des formulaires http://www.lephpfacile.com/cours/8-recuperer-les-donnees-des-formulaires

@+
Merci, je comprends. Mais franchement, suivre les variables dans tous ces includes est trop dur, j'ai essayé.
Ceci étant dit, ces messages d'erreur s'affichent mais n'empêchent pas le site de tourner.
C'est quand je fais les transformations mysql -> mysqli que mon forum n'affiche plus rien: le fait que mes pages ne s'affichent pas (page blanche) vient d'autres erreurs, qui elles n'ont pas de message. Et c'est surtout celles-là que j'ai besoin d'identifier.