2012-07-15 3 views
2

J'ai une boîte d'entrée qui avec php fera écho sur les noms tapés po Le problème est que lorsque l'utilisateur appuie sur l'espace, il fera écho sur le caractère vide. J'ai cherché et n'ai pas trouvé une réponse absolue. Je sais qu'en utilisant !empty s'il y a absoutely quelque chose dans le champ d'entrée mais s'il y a un espace est nul supposé fonctionner. Comment éviter l'écho s'il y a un espace vide dans l'entrée?PHP: Vide/Null et si logique enquête

if (!empty($name['name']) || null) { 
    echo 'Your name is '.$name; 

} 
{ 

//do nothing 

} 
+1

Il est généralement conseillé d'utiliser [ 'trim()'] (http://php.net/trim) sur les entrées comme celles-ci – jprofitt

+0

utilisez 'trim ($ name [ 'nom']) ' – hjpotter92

Répondre

3

appels à la fonction empty() sera vraie si elle est détruite, null, chaîne vide, booléen false, ou 0. Pourtant, j'aime éviter la logique lourde dans les conditions ... sortir la coupe et préparer la ficelle avant de tester.

$nameString = empty($name['name'])?null:trim($name['name']); 
if(!empty($nameString){ 
    //go to town here 
} 

Pour apaiser les fanatiques à l'avance, je dois ajouter aussi que vous devez échapper à toute entrée de l'utilisateur avant de l'imprimer. De cette façon, vous vous protégez contre XSS. Pour être plus sûr ajouter essayez ceci:

$nameString = empty($name['name'])?null:trim($name['name']); 
$nameString = htmlentities($nameString, ENT_QUOTES); 
if(!empty($nameString){ 
    //go to town here 
} 

Cependant, une note de côté ... l'appel htmlentities() ne protège pas contre l'injection SQL, donc si ces données va dans un db, vous aurez à faire plus TRAVAIL DE Comme votre question n'indique pas que vous faites autre chose que d'imprimer à l'écran, nous pouvons suspendre la discussion sur l'injection SQL pour un autre jour.

+0

Très bien expliqué! J'avais des difficultés à envelopper ma tête autour de vide, null, assiette, etc mais maintenant c'est beaucoup plus clair. Mais oui, je vais les stocker dans DB et cherchera à éviter les injections sql. – CodingWonders90

+1

@cholomanCoding ne stockez pas directement votre chaîne échappée htmlentity dans la base de données ... créez une seconde chaîne à partir de l'original pour la protéger et la stocker ou vous obtiendrez un désordre de courrier indésirable dans vos colonnes de base de données ... – Ray

0

Vous voulez vérifier s'il y a un espace, vous voudrez peut-être faire ceci:

if ($name['name'] != null && trim($name['name']) != "" && !strpos(trim($name['name']), " ")) 
{ 
    // work with $name['name'] 
} 
else 
{ 
    // nothing 
} 
0

Soyez prudent en utilisant empty(), il retournera TRUE si l'utilisateur entre '0'.

Vous pouvez utiliser strlen()