2010-10-10 13 views
3

comment puis-je empêcher PHP de retourner une erreur non définie chaque fois que j'essaie de vérifier une variable si elle a un contenu et que certaines variables n'ont pas encore été utilisées? Dans ma configuration précédente, je peux vérifier $ _POST ['email'] même si je n'y ai encore rien ajouté. Il renvoie simplement un résultat vide ou vide. C'est comme ça que je veux que ma configuration PHP fonctionne mais pour la vie de moi, je n'arrive pas à trouver comment la configurer. :(

Exemple:.

<?php 
if ($_POST['info'] != '') { 
    // do some stuff 
} 
?> 
<form method="post"> 
<input type="text" name="info" /> 
<input type="submit" /> 
</form> 

Lorsque vous utilisez le script ci-dessus dans une page PHP unique et l'exécuter sur ma configuration actuelle, il renvoie une Undefined variable de l'erreur Sur ma configuration précédente, ce script a travaillé comme un charme. quelqu'un peut-il partager un peu de lumière sur ce problème à moi. Si vous avez besoin de détails, dire tellement et je vais essayer d'ajouter plus de détails à ce poste.

Je sais sur le isset () ch ecking mais je ne veux pas l'utiliser sur tous mes scripts. Je veux pas être que restrictif sur les variables.

+0

connexes: http://stackoverflow.com/questions/1960509/isset-et-vide-make-code-laid –

+1

Ce n'est pas une erreur. C'est un E_NOTICE. Beaucoup de producteurs de cargaison ne s'en rendent pas compte, mais c'est un message de débogage. 'error_reporting (E_ALL)' renvoie de nombreux avis de débogage redondants, alors désactivez-le. Activez-le une fois, lorsque vous déboguez votre code. Ne l'obscurcissez pas avec isset, car cela pourrait obstruer le traçage quand vous en avez besoin. Btw, 'if ($ _POST ['info'])' suffit. http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting – mario

Répondre

3

Ce n'est probablement pas une erreur mais un avertissement. Vous pouvez configurer PHP pour ne pas afficher les erreurs/avertissements si vous le souhaitez. Il suffit d'ajouter ceci au début de votre code:

ini_set('display_errors', 0); 

Altough, je vous recommande de ne pas être paresseux et que votre code n'affiche des erreurs, avertissements, avis que ce soit, mieux vaut prévenir que guérir.

Et la meilleure façon de faire ce que vous voulez faire est

<?php 
if (isset($_POST['info'])) { 
    // do some stuff 
} 
?> 
<form method="post"> 
<input type="text" name="info" /> 
<input type="submit" /> 
</form> 
+1

Ou vérifiez réellement si vous gérez un POST: 'if ($ _SERVER ['REQUEST_METHOD'] == ' POST ') {...} ' –

3

Vous pouvez utiliser la fonction empty, qui retourne true si la variable est soit inexistant ou vide (soit une chaîne de longueur nulle, 0 , NULL, fALSE et ainsi de suite):

if(!empty($_POST['variable'])){ 
    /* ... */ 
} 

C'est à peu près le même test que celui que vous faites maintenant, sauf que, il retournera faux (pas courir le bloc), sans avertissement préalable, lorsque la variable n'est pas définie.

0

Je l'ai parfois fait ce qui suit pour faire une comparaison et d'éviter l'avertissement concernant une variable unset:

if(@$_POST['variable'] == 'value') 
{ 
    ... 
} 

Bien que PHP serait encore appeler les gestionnaires d'erreur personnalisés, alors je dois peut-être revenir sur cette stratégie.

0

Utilisez-vous votre propre serveur? Si c'est le cas, vous pouvez modifier error_reporting via PHP.INI. Au-dessus de la ligne

"error_reporting = E_ALL;" (peut-être pas E_ALL) Il y aura une petite documentation expliquant le type d'erreur que vous pouvez montrer.

Si vous utilisez un serveur partagé d'une société d'hébergement Web, je crois que certains peuvent offrir une gestion PHP rapide sous votre compte d'hébergement Web CP.

j'espère aidé,/

PS- Si vous avez votre propre serveur, vous devrez redémarrer Apache. Je ne sais pas comment cela se fait dans Ubunto (si c'est ce que vous utilisez) mais pour CentOS c'est:

/sbin/service httpd restart 
0

La variable sera toujours SET aussi longtemps que vous avez envoyé le form. Il est donc préférable de vérifier la variable n'est pas empty.

if(!empty($_POST['var']))

+1

Dépend du type d'entrée. Certains types, comme la case à cocher, ne sont pas envoyés dans le post de soumission s'ils ne sont pas vérifiés ou d'une autre manière interagir avec pour leur donner une valeur. – Geowil

0

Si vous souhaitez définir $ _POST vars, ayant beaucoup de ces déclarations vraiment encombre votre code:

if (isset($_POST['info'])) 
    $info = $_POST['info']; 
... etc.... 

Comment cela?

function setPostVar(&$v) { 
    $trace = debug_backtrace(); 
    $vLine = file(__FILE__); 
    $fLine = $vLine[ $trace[0]['line'] - 1 ]; 
    preg_match("#\\$(\w+)#", $fLine, $match); 
    eval("\$v = isset(\$_POST[\"$match[1]\"])?\$_POST[\"$match[1]\"]:'';"); 
} 

Maintenant, aussi longtemps que vous êtes des variables de nommage heureux similaires à votre POST vars

ie. $Foo = $_POST['Foo']; 

vous pouvez simplement faire ceci:

setPostVar($Foo); // equivalent to if(isset($_POST['Foo']) $Foo = $_POST['Foo']; 
setPostVar($Bar); // ditto 
setPostVar($Baz); // ditto