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

Langage PHP Discussion :

requête qui ne passe pas


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 29
    Points
    29
    Par défaut requête qui ne passe pas
    Bonjour,

    J'ai développé un site avec DW MX 2004, c'est vieux et ça générait du php en V4.55.
    A ce jour, mon hébergeur (mutualisé) m'oblige à adopter le php V5.5 et après test local, certaines requêtes induisent une erreur de type 'Notice: Undefined variable:....
    Notamment cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    mysql_select_db($bdd_connect, $connect);
    $query_rsveg = "SELECT * FROM cat WHERE cat.nbre > 0 AND cat.type IN ('ar','arb','gri','jp','bb','hl') AND cat.nom LIKE '$lettre%' AND cat.new LIKE '$nouveau%' ORDER BY cat.nom, cat.prix";
    $rsveg = mysql_query($query_rsveg, $connect) or die(mysql_error());
    $row_rsveg = mysql_fetch_assoc($rsveg);
    $totalRows_rsveg = mysql_num_rows($rsveg);
    ?>
    Et jusqu'à maintenant, le tableau alphabétique qui suivait m'affichait selon la lettre cliquée, la fraction du catalogue dont les noms commencent par telle ou telle lettre, par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td bordercolor="#000000" BGCOLOR="#FFFFed" onMouseOver="javascript:this.style.background='#FF9900'" onMouseOut="javascript:this.style.background='#FFFFed'"><div align="center"><a href="liste.php?lettre=a"><span class="menu_rouge_petit">Tous</span></a></div></td>
    Pourquoi cette requête semble convenir à php v4.55 et pas à php v5.5?

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de Kreepz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 681
    Points : 1 458
    Points
    1 458
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Avant tout mysql est de moins en moins utilisé, désormais c'est plutôt mysqli_.

    Et votre message d'erreur est seulement?
    Undefined variable:....
    Pensez à regarder nos cours et tutoriels PHP ainsi que notre FAQ PHP avant de poser votre question!
    Un message vous a aidé, n'oubliez pas le

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les requêtes ne provoquent pas des erreurs PHP.
    Ton problème vient du fait que $lettre n'est pas défini et que l'extension mysql est obsolète.
    A minima il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lettre = mysql_real_escape_string($_GET['lettre']);
    Mais sur le fond il faut remplacer l'extension mysql par PDO.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 29
    Points
    29
    Par défaut
    Oui, je sais que mysql sera déprécié mais j'ai 150 pages à revoir et si je dois remplacer par PDO, bon il faudra bien que je le fasse, dans un premier temps en mysqli en tout cas.
    Et oui, ce sont les 2 variables lettre et nouveau qui provoquent le message.
    Mais pourquoi ça passe en php 4.5 et pas en 5.5?

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Dans le cas particulier de ton erreur, je pense que le problème vient de la fonctionnalité register_gobals qui a disparu en PHP 5.4 et qui permettait (entre autres) de récupérer directement les paramètres de l'url dans une variable (typiquement $lettre pour l'url "liste.php?lettre=a").

    Il va donc falloir chercher tous les scripts qui reçoivent des paramètres par url ou par formulaire et les récupérer proprement via $_GET (pour les urls) et $_POST (pour les formulaires)

    Tu fais quand même une migration brutale de PHP 4 à PHP 5.5, soit plus de 10 ans de modifications d'un coup.
    A voir :
    Migration de PHP 4 à PHP 5.0.x
    Migration de PHP 5.0.x à PHP 5.1.x
    Migration de PHP 5.1.x à PHP 5.2.x
    Migration de PHP 5.2.x vers PHP 5.3.x
    Migration de PHP 5.3.x à PHP 5.4.x
    Migration de PHP 5.4.x à PHP 5.5.x
    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]

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 29
    Points
    29
    Par défaut
    maintenant j'ai une erreur de type index non défini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Notice: Undefined index: lettre in /opt/lampp/htdocs/liste.php on line 3
    Cependant, je dois peut-être reconsidérer que l'obsolescence de ce site est avérée, ce qui me fait penser qu'il est à refaire de A à Z mais mon temps est limité car ce n'est pas mon job et la date butoir de passage en php 5.5 sera fin septembre...

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Index non défini sur $_GET, ça veut dire que le paramètre n'est pas dans l'URL de la page (ou que tu as fait une faute de frappe). Il faut gérer le cas où le script peut être appelé sans paramètre dans l'url :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lettre = isset($_GET['lettre'])?$_GET['lettre']:'';
    Concernant l'obsolescence, tu as "juste" à passer en revue les requêtes (pour les migrer vers PDO ou mysqli, ou au moins pour ajouter les appels à mysql_real_escape_string qui ont l'air de manquer) et les récupérations de données extérieures (pour l'instant)
    Mais monter 5 version majeures d'un coup, c'est pas de la tarte, et tu risques de découvrir d'autres problèmes.
    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
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 29
    Points
    29
    Par défaut
    Merci à vous tous, je possède désormais quelques bases pour aller un peu plus loin mais je redoute un peu cette affaire.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    j'ai 150 pages à revoir et si je dois remplacer par PDO, bon il faudra bien que je le fasse, dans un premier temps en mysqli en tout cas.
    C'est plus compliqué de faire mysql->mysqli que de faire mysql->PDO ; mysql->mysqli->PDO je n'en parle même pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 29
    Points
    29
    Par défaut
    Merci de cette information, je vais tâcher d'apprendre. A bientôt.

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A la base, le mode procédural de l'API mysqli est conçu pour remplacer facilement l'API mysql.
    Le problème, c'est que c'est comme les ouvertures faciles sur les sachets de sauce à pizza : une fois sur 10, ça t'aide réellement, les 9 autres fois tu finis avec de la sauce partout sauf sur la pizza.

    A lire : 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]

  12. #12
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 29
    Points
    29
    Par défaut Problèmes apostrophes
    Bonjour,

    Je reprends le fil bien que ce ne soit plus tout à fait la même chose.
    J'ai donc migré tant bien que mal en php 5.6, ce qui supposait les déclarations de variables, de sessions etc..
    Immédiatement j'ai été confronté à l'affichage erroné des caractères accentués (remplacés par �) et j'ai forcé le charset avec l'entête suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php header('Content-Type: text/html; charset=ISO-8859-1'); // écrase l'entête utf-8 envoyé par php
    ini_set( 'default_charset', 'ISO-8859-1' ); ?>
    Ma base est en utf8
    Et dès lors, tout se passait pas mal mais je me suis aperçu que les lignes de la bdd qui contenaient des apostrophes ne sont pas lues correctement et provoquent une erreur de syntaxe sql!
    Un peu génant si l'on considère que cela concerne 200 ou 300 lignes.
    Que puis-je faire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Déboguer requête sql qui ne passe pas
    Par Kamoo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/02/2013, 11h09
  2. une requète qui ne passe pas
    Par JeanNoel53 dans le forum SQL
    Réponses: 0
    Dernier message: 14/12/2010, 10h47
  3. [ODBC] Requête qui ne passe pas
    Par tom06440 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 22/08/2008, 23h29
  4. [MySQL] Requête qui ne passe pas
    Par kirian dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/02/2007, 11h47
  5. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12

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