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 :

migration php vers php 7


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut migration php vers php 7
    Bonjour à tous,
    Je vais avoir besoin d'un coup de main, voila !!! avec les fêtes qui approche mes enfants m ont demandé (comme tous les ans) de remettre en ligne une petite application php "mygift" que j'avais trouvé sur le web il y a quelques années et qui leur plait beaucoup . Seulement voilà j'ai mis à jour ma debian cette année et évidemment l'application ne marche plus avec le php 7.3.
    Donc je vais avoir besoin de vous pour corriger tout les soucis (enfin j'espère).
    J'ai donc commencé par chercher un outil pour me permettre de trouver et lister toutes les [error] et [warning] que php 7.* me trouvent et j'ai trouvé .
    J'ai donc maintenant une liste de 4 pages d'erreurs qui s'affiche comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    > Line 9: [Error] PHP 4 constructors are now deprecated
        function GiftList($listId)
        {
        }
     
    File: /var/www/html/cadeaux/includes/Database.sqlite.class.php
    > Line 12: [Error] PHP 4 constructors are now deprecated
        function Database($server, $user, $password, $database)
        {
        }
     
     
    File: /var/www/html/cadeaux/includes/Category.class.php
    > Line 8: [Error] PHP 4 constructors are now deprecated
        function Category($id = '')
        {
        }
     
     
    File: /var/www/html/cadeaux/includes/Database.class.php
    > Line 13: [Error] PHP 4 constructors are now deprecated
        function Database($server, $user, $password, $database)
        {
        }
    > Line 69: [Error] Removed function "mysql_num_rows" called
        mysql_num_rows($result);
    > Line 70: [Error] Removed function "mysql_fetch_assoc" called
        mysql_fetch_assoc($result);
    > Line 76: [Error] Removed function "mysql_free_result" called
        mysql_free_result($result);
    > Line 89: [Error] Removed function "mysql_fetch_assoc" called
        mysql_fetch_assoc($result);
    > Line 93: [Error] Removed function "mysql_free_result" called
        mysql_free_result($result);
    > Line 105: [Error] Removed function "mysql_fetch_assoc" called
        mysql_fetch_assoc($result);
    > Line 106: [Error] Removed function "mysql_free_result" called
        mysql_free_result($result);
    etc.......

    n'étant vraiment pas très fort en PHP je m'adresse à vous pour m'aider à corriger .

    Merci d'avance à qui voudra bien m'aider

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    pour les constructeurs, il doivent s'appeler "__construct" :
    https://www.php.net/manual/fr/language.oop5.decon.php

    et pour l'accès à MySQL, ces fonctions n'existent plus donc vous devez les remplacer par PDO par exemple :
    https://www.php.net/manual/fr/book.pdo.php

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Par défaut construt
    Bonjour et merci de votre aide,

    je ne comprend pas se que vous appelez constructeur ? est-ce la même chose que ce que moi j'appelai "déclarer une fonction" ?

    dans mon cas j'ai plusieurs fonctions mais une seule class comment je fait ?
    pouvez-vous me corriger cette page que je comprenne mieux ? j'essairai de me debrouiller pour les autres ?
    déjà j'avais pas fait beaucoup de php mais en plus c'est loin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
    class GiftList {
     
      var $listId;
      var $gifts;
      var $ownerName;
     
      function GiftList($listId)
      {
        global $database, $user;
     
        if (empty($listId))
          $listId = $user->id;
     
        $this->listId = $listId;
        $sqlQuery =   "SELECT g.*, ".$database->timestamp("g.created")." as ts_created, ".$database->timestamp("g.updated")." as ts_updated, u.id as claimerId, u.name as claimerName, o.name as ownerName, cat.category as category_name  FROM gft_category cat, gft_gift g
                 LEFT OUTER JOIN gft_user o ON g.owner=o.id
                 LEFT OUTER JOIN gft_claim c ON c.giftId=g.id 
                 LEFT OUTER JOIN gft_user u ON c.userId=u.id ";
        $whereClause =  "WHERE forUser = '".addslashes($listId)."' AND g.category = cat.id ";
        if ($listId != $user->id) {
          $sqlQuery .= "LEFT OUTER JOIN gft_visibility v ON (v.giftId=g.id AND v.userId = '".addslashes($user->id)."') ";
          $whereClause .= "AND (restricted = 0 OR v.userId is not null) ";
        }
        $whereClause .= "ORDER BY offered, offeredOn, cat.category, g.name";
     
        $tmpGifts = $database->fetch($sqlQuery.$whereClause);
        $curTime = time();
        foreach ($tmpGifts as $tmpGift) {
          if (!is_array($this->categories) || !in_array($tmpGift["category_name"], $this->categories))
            $this->categories[] = $tmpGift["category_name"];
     
          if ($curTime-$tmpGift["ts_created"] < 4*24*3600)
            $tmpGift["new"] = true;
          else if ($curTime-$tmpGift["ts_updated"] < 4*24*3600)
            $tmpGift["recent"] = true;
          $this->gifts[$tmpGift["category_name"]][] = $tmpGift;
        }    
        $database->loadObject($this, "select name as ownerName from gft_user where id='".addslashes($listId)."'");
      }
     
      function numFree() {
        $numFree = 0;
        foreach ($this->gifts as $giftArr) {
          if (empty($giftArr["claimerId"]))
            $numFree++;
        }
        return $numFree;
      }
     
      function sendByEmail($to, $format = "")
      {
        global $user, $strings;
     
        //ob_start();
        $message = Controler::processTemplate("emailTextList", $user, $this);
        //$message = ob_get_contents();
        //ob_end_clean();   
        $result = $user->sendMail($to, $strings["LANG_EMAIL_SUBJECT"], $message, "X-Mailer: myGifts/PHP");
        //echo "$message";
        return $result; 
      }
     
      function getParams()
      {
      }
    }
     
    Controler::registerHandler("giftList", "display", "GiftList", array("id"));
    Controler::registerHandler("myList", "display", "GiftList", array("user"), 1);
    Controler::registerHandler("sendByEmail", "all", "GiftList", array("user", "to"));
     
    ?>

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le constructeur c'est la "fonction" qui est appelé quand on fait un nouvel objet :
    En PHP 4 cette fonction s'appelle comme la classe.

    Le squelette de ta classe convertie en PHP 7 ressemblerait à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class GiftList {
     
      private $listId;
      private $gifts;
      private $ownerName;
     
      public function __construct(int $listId)
      {
     
      }
     
      public function numFree() : int {
     
      }
     
      public function sendByEmail(string $to, string $format = "")
      {
     
      }
     
      public function getParams()
      {
      }
    }
    Pour être tout à fait honnête te lancer dans la conversion PHP 7 d'un script PHP 4 sans grande connaissance de PHP , ça va pas être évident. Une bonne vieille lettre au père noel serait plus simple
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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 les accès base, il faudrait nous montrer la classe Database.

    Quelques remarques générales sur l'ensemble du code :
    addslashes n'est pas une bonne solution d'échappement des données. Il vaut mieux utiliser les solutions natives à l'API que tu utilises (mysqli::real_escape_string, PDO::quote, à inclure dans une méthode de ta classe Database), ou carrément des requêtes préparées.

    Pour comparer des dates et manipuler des durées, je te conseille d'utiliser DateTime et consorts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $curTime = time();
    if ($curTime-$tmpGift["ts_created"] < 4*24*3600)
    Peut s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dateLimite = new DateTime("now +4days");
    if ($dateLimite < date_create("@"+["ts_created"])) {
    Au passage, as-tu besoin de comparer les 4 jours à la seconde près ?
    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]

Discussions similaires

  1. [WD11] Migration Windev vers Php
    Par snipes dans le forum WinDev
    Réponses: 2
    Dernier message: 17/03/2010, 17h43
  2. Réponses: 14
    Dernier message: 16/12/2009, 13h57
  3. Script PHP de migration Postgresql vers MySQL
    Par CinePhil dans le forum Outils
    Réponses: 0
    Dernier message: 10/12/2009, 10h46
  4. Migration PHP 4 vers PHP 5
    Par Moull dans le forum Langage
    Réponses: 7
    Dernier message: 10/08/2009, 10h12
  5. [Wamp] Migration Access vers PHP
    Par w0lf dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 27
    Dernier message: 06/06/2006, 12h58

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