PHP $_GET et $_POST undefined problème
Je suis nouveau en PHP donc je m'excuse si c'est un problème simple...
Je suis passer en PHP, site d'un serveur à un autre. Le nouveau serveur IIS 7.0, PHP 5.2.1, avec de courtes balise d'ouverture est réglé Sur "on", et je ne sais pas comment le serveur d'origine a été mis en place (je viens de donner le code).
Ce qui suit est la première section de code sur l'une des pages:
<?
ob_start();
session_start();
if($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16)
{
include("test/query/test_query.php");
}
?>
Lorsque cette page s'exécute, l'erreur suivante est affichée:
PHP notice: Undefined index: confirmer dans [emplacement du fichier].php on line 6
Aussi, les utilisateurs d'accéder à cette page en étant redirigés à partir de la page d'accueil (qui est une page HTML standard). L'URL complète lorsque bien navigué, est la suivante:
... Je comprends pourquoi l'erreur est levée. Ce que je ne comprends pas, c'est comment ce code pourrait jamais travailler comme il le fait sur le serveur d'origine. Pourrais-je être absente d'un paramètre de configuration?
* * * * Ce même problème se produit dans des dizaines d'endroits sur tout le site. C'est juste une occurrence spécifique de la question.
OriginalL'auteur | 2009-08-31
Vous devez vous connecter pour publier un commentaire.
Le nouveau serveur a
error_reporting
mis à E_ALL. Ce que vous voyez est un avis, pas une erreur. Essayez:Avec l'erreur de déclaration définis à E_ALL, l'accès à un membre d'un groupe qui n'est pas définie génère une erreur. Si vous ne souhaitez pas baisser votre niveau de rapport d'erreur, avant de vérifier $_GET['var'], modifiez votre code pour:
par l'ajout de l'appel à la fonction isset() avant d'accéder à
$_GET['confirm']
, vous permettra de vérifier que vous n'êtes pas d'accéder à un membre du groupe qui n'est pas défini. ($_GET['confirm']
ne sera définie que si l'URL se termine par?confirm=...
ou?something...&confirm=...
)OriginalL'auteur Josh
Je suggère d'optimiser le code pour la lecture:
Et je suis totalement d'accord avec Josh proposition.
OriginalL'auteur tuergeist
Puisqu'il n'est pas de l'index $_GET['valider'], PHP lance un avis que vous êtes à la recherche à un undefined index. L'avis est affiché, car le nouveau serveur a la
E_NOTICE
indicateur défini dans la fonction error_reporting quelque part, que ce soit en php.ini ou dans certains fichier de config ou bootstrap qui est exécuté sur pageloads.Du manuel php,
E_NOTICE
: "au moment de l'Exécution des avis. Indiquer que le script a rencontré quelque chose qui pourrait indiquer une erreur, mais pourrait également se produire dans le cours normal de l'exécution d'un script."Vous pouvez essayer de désactiver les notifications si vous n'êtes pas inquiet pour eux, ou de les utiliser pour traquer les endroits où il peut y avoir des problèmes.
Pour le code que vous avez posté, une solution facile serait de changer le conditionnel pour
De cette façon, PHP écope d'évaluation de la condition, si il n'y a pas de "confirmer" index.
OriginalL'auteur Johrn
isset()
est une fonction utile. Il retourne "true" si la variable existe et "faux" sinon. Généralement, les gens de l'utiliser en conjonction avec une superglobale comme$_GET
ou$_POST
pour déterminer si vous êtes envoyé à partir d'une autre page sur le site - ce qui vous permet de créer des actions différentes en fonction de la localisation de l'utilisateur et les données de marquage. Il empêche également les erreurs en essayant d'utiliser des variables que vous n'avez pas encore défini, comme l'OP. Donc au lieu d'avoir à écrire deux différents .les fichiers php et se soucier de l'envoi de votre utilisateur sur le mauvais, vous pouvez tout faire en une seule page.Jay,
Je serais prudent au sujet de votre utilisation de certains de ces appels.
<?php
est plus susceptibles de travailler que<?
. J'ai entendu session_start() doit être la première chose ensemble pour le navigateur, ou il peut provoquer de l'en-tête des questions. Et oui, vous avez besoin d'avoir une variable déclarée à l'avant de l'utiliser - si vous n'êtes pas à taper dans[file].php?confirm=[some number]
que votre URL de votre page de pause, sauf si vous modifier afin de permettre les pauses.OriginalL'auteur Cyathus
C'est parce que
confirm
variable de chaîne de requête ne semble pas être défini, vous pouvez le vérifier comme:OriginalL'auteur Sarfraz