IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

PHP 5.5 en local est devenu obsolète


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut PHP 5.5 en local est devenu obsolète
    Bonjour à tous,

    Je travail sur un site web en local qui est un clone de la version en ligne. Le site est actuellement hébergé chez OVH et il m'est indiqué que je dois mettre à niveau PHP mais je ne peux pas puisque je dois revoir toutes les fonctions de mon code. En effet, j'ai encore beaucoup de fonctions à base de mysql_query qui sont obsolètes. Tout fonctionnaient pour le mieux et du jour au lendemain j'ai eu ce message sur mon site en local :
    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in ...
    Je comprends totalement le message comme quoi je dois revoir mes fonctions, car elles sont obsolètes et que je dois passer par PDO. Mais je ne vois pas en quoi cela apparaît sur le site en local. À ce que je sache, MAMP me permet de travailler avec pratiquement n'importe quelle version de PHP.

    Certaines variables ne sont plus du tout reconnu, et j'ai ce message d'erreur :
    Notice: Undefined index: titre in /Applications/MAMP/htdocs/Site/www/recherche.php on line 134
    Pourtant, quand je vais à la ligne indiquée, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_POST['titre']))
    {
         $titre = $_POST['titre'];
    }
    Je ne comprends vraiment pas pourquoi du jour au lendemain ça ne fonctionne plus.

    Auriez-vous une idée svp ?

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Quand j’ai été confronté au même problème j’ai fait comme ça.

    https://www.developpez.net/forums/d1...-mysql-mysqli/

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut
    Et disons dans le cas où je souhaite vraiment passer au PHP 7.x est-ce qu'il m'est recommandé de passer d'abord par mysqli ou direct en PDO ? Je tiens également à préciser que le projet en cours à uniquement été écrit en procédural.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour une nouvelle application, je recommande fortement de démarrer avec PDO, mais si tu veux juste rendre ta vieille application compatible PHP7, mysqli fera très bien l'affaire. Fondamentalement, mysqli en mode procédural a été conçu pour permettre de remplacer facilement l'ancienne API mysql.
    Quant à pourquoi tu vois les messages sur ton environnement local, tu as peut-être tout simplement monter le niveau d'erreur affiché. (mysql est obsolète depuis PHP 5.5, donc les messages sont présents à partir de cette version)

    @Badaze : c'est une bonne technique ton système. Évidemment, ça n'apprend pas au dev à coder avec les nouvelles API, mais pour un patch sur de l'existant, ça suffit très bien.
    Il manque juste la fonction d'échappement mysql_real_escape_string. Au passage, si c'est pour une application PHP7, tu n'as même pas besoin de renommer les fonctions en x_mysql, vu que les fonctions mysql n'existent plus.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut
    Citation Envoyé par Celira Voir le message
    Pour une nouvelle application, je recommande fortement de démarrer avec PDO, mais si tu veux juste rendre ta vieille application compatible PHP7, mysqli fera très bien l'affaire. Fondamentalement, mysqli en mode procédural a été conçu pour permettre de remplacer facilement l'ancienne API mysql.
    Quant à pourquoi tu vois les messages sur ton environnement local, tu as peut-être tout simplement monter le niveau d'erreur affiché. (mysql est obsolète depuis PHP 5.5, donc les messages sont présents à partir de cette version)
    Et ça ne gêne en rien de réécrire l'application en utilisant PDO pour les échanges avec la BDD et tout en restant en procédural? J'ai beaucoup trop de fichiers pour passer tout en POO.

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Citation Envoyé par Celira Voir le message
    ...
    @Badaze : ...
    Il manque juste la fonction d'échappement mysql_real_escape_string. Au passage, si c'est pour une application PHP7, tu n'as même pas besoin de renommer les fonctions en x_mysql, vu que les fonctions mysql n'existent plus.
    Effectivement. Dans mon cas les paramètres passés aux requêtes sont normés et donc facilement contrôlés et je n’ai pas de fonction de recherche.

    J’ai dû mettre un x_ devant les noms de fonctions car j’ai fait les évolutions alors que j’était encore en 5.x en local et en prod.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par getPrenom() Voir le message
    Et ça ne gêne en rien de réécrire l'application en utilisant PDO pour les échanges avec la BDD et tout en restant en procédural? J'ai beaucoup trop de fichiers pour passer tout en POO.
    Basiquement, PDO est une classe, donc tu vas forcément faire un tout petit peu de POO. Mais l'avantage de PHP c'est que tu peux tout à fait utiliser des objets dans un code procédural
    Si tu fais un remplacement simple, tu peux très bien passer de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query = 'SELECT * FROM foo WHERE bar=1;';
    $result = mysql_query($query);
    $arr = mysql_fetch_assoc($result);
    à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $query = 'SELECT * FROM foo WHERE bar=1;';
    $result = $pdo->query($query);
    $arr = $result->fetch();
    Cela dit, la grande force de PDO, ce sont les requêtes préparées et là, il va te falloir pas mal de réécritures. Si tu t'intéresses à PDO tu peux lire le mini-tuto : PDO une soupe et au lit ! et son grand-frère Comprendre PDO.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut
    Merci, et dans le cas ou je souhaite remplace ce code $affiche_last_edition=mysql_fetch_array($exec_select_last_edition);, je fais comment ?

    Je sais que je peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while($affiche_annee=$exec_select_annee->fetch()){
          //code quelconque
    }
    Mais il y a des moments dans le code ou je vois uniquement le fetch array sans qu'il n'y ait de while. Est-ce que cela sert à quelque chose de faire $affiche_last_edition=mysql_fetch_array($exec_select_last_edition); sans boucle while ? J'ai de voir si ça me retourne quelque chose et il n'y a rien d'intéressant. Je suis désolé d'insister avec mes questions mais j'ai vraiment besoin de comprendre.

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    fetch() (dans PDO) ou mysql(i)_fetch_array remonte une seule ligne de résultat.
    Si ton résultat doit/peut retourner plusieurs lignes et que tu veux toutes les récupérer, il te faut une boucle (ou utiliser fetchAll pour PDO)
    En revanche, si le résultat ne retourne qu'une seule ligne (pour un comptage par exemple, ou si tu cherches une ligne sur sa clé primaire), tu peux appeler fetch une seule fois pour récupérer la 1ere ligne.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut
    Merci pour l'information. Malheureusement, la méthode de @badaze ne fonctionne pas. Je tiens juste à rappeler que je suis en style procédurale et que j'ai changé toutes les fonctions mysql_* en leur équivalents mysqli_* et ajoutant des paramètres si nécessaire.
    Par contre, je rencontre un gros souci que je n'arrive pas à résoudre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
                        if(isset($_GET['id_prog']))
                            $select_programmes="SELECT * FROM cc_prog_ponctuelle WHERE cc_prog_ponctuelle_id = ".$_GET['id_prog'];
                        else
                            $select_programmes="SELECT * FROM cc_prog_ponctuelle WHERE cc_prog_ponctuelle_date >= NOW() ORDER BY cc_prog_ponctuelle_date ASC, cc_prog_ponctuelle_heure ASC";
     
                        $exec_select_programmes = mysqli_query($connexion, $select_programmes);
    Voici le message d'erreur :
    Warning: mysqli_query() expects parameter 1 to be mysqli, string given in /Applications/MAMP/htdocs/DL_Site_CC_new/www/seances_ponctuelles.php on line 183
    La ligne 183 correspond à la dernière ligne ici.

    Je ne vois pas où est le problème étant donnée que j'ai fourni le paramètre de connexion sachant que ma variable de connexion correspond à cette ligne : $connexion = mysqli_connect('localhost', 'root', '', 'nomBDD');Au départ, je faisais un require_once 'bdd.php'; pour faire appel à la connexion.

    NB : je suis au courant qu'il faut une requête préparé pour la première requête mais je vais apporter cette modif plus tard. C'est un projet que j'ai récupéré donc j'ai pas mal de choses à changer.

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    "String given" ça veut dire qu'il y a une chaine dans ta variable. Donc ça sous-entend que quelque chose a écrasé la valeur retournée par la fonction mysqli_connect entre l'ouverture de la connexion et l'appel à la requête.
    Pour résoudre ce genre de choses, il n'y a pas 36 possibilités : tu peux faire un var_dump de $connexion juste avant de l'utiliser pour voir ce qu'il y a dedans, mais en dehors de ça, il va falloir que tu parcours ton code pour vérifier si il n'y a pas un $connexion = ... quelque part.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut
    Super pour l'astuce, merci. J'ai essayé de faire un var_dump() mais je ne l'avais pas placé au bon endroit. Je vais essayer de faire fonctionner ça de suite !

  13. #13
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Citation Envoyé par getPrenom() Voir le message
    Merci pour l'information. Malheureusement, la méthode de @badaze ne fonctionne pas. Je tiens juste à rappeler que je suis en style procédurale et que j'ai changé toutes les fonctions mysql_* en leur équivalents mysqli_* et ajoutant des paramètres si nécessaire.
    Par contre, je rencontre un gros souci que je n'arrive pas à résoudre.
    Comment cela ? Ma méthode permet justement de ne pas toucher au code existant.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 16
    Par défaut
    Salut @badaze, bizarrement avec ta méthode j'avais des problèmes de variables qui n'étaient pas reconnu. J'ai mis à jour toutes les fonctions mysql_* en mysqli_* manuellement. Cependant, je rencontre toujours ce message d'erreur :

    Notice: Undefined index: nom_generique in /Applications/MAMP/htdocs/DL_Site_CC_NEW/www/recherche.php on line 134
    Je n'ai jamais eu ce genre de souci sous mysql_* mais depuis mysqli_* ça l'embête. Est-ce que vous auriez une idée?

  15. #15
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il faut voir ce qu’il y a à cette ligne. Est-ce qu’il y a un index qui se nomme nom_generique dans ta base ?

Discussions similaires

  1. (Easy PHP) sur un réseau locale
    Par Furius dans le forum Développement
    Réponses: 17
    Dernier message: 19/08/2011, 10h23
  2. Réponses: 0
    Dernier message: 19/03/2010, 11h02
  3. [AJAX] Éxécuter du php lorsque qu'un tableau est cliqué
    Par tyarak dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 10/10/2006, 18h24
  4. [PHP-JS] Mettre si il est vide
    Par kevinf dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2006, 09h34
  5. IE est devenu fou :(
    Par kagura dans le forum IE
    Réponses: 13
    Dernier message: 06/08/2006, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo