2017-10-18 3 views
0

J'ai un formulaire PHP simple que j'aimerais améliorer pour aider à combattre les soumissions de formulaires vides des bots.Vérifiez si les éléments du tableau sont vides

J'ai le tableau suivant qui contient les noms d'entrée d'une autre page.

$expected = array('Project-Inquiry','Name','Company-Name','Phone-Number','Email'); 

Je voudrais vérifier que ces éléments, en fait, ne contiennent contenu, car ils sont déjà vérifiées avec JS sur la page précédente. JS est seulement bon quand il est activé, donc je voudrais ajouter une couche supplémentaire de validation ici pour quand il est désactivé.

J'ai essayé les éléments suivants:

$expected = array_filter($expected); 

if (!empty($expected)) { 
// Do Something 
} 

et moi avons aussi essayé ce qui suit:

$error = false; 
foreach($expected as $field) { 
    if (empty($_POST[$field])) { 
     $error = true; 
    } 
} 
if ($error) { 
    // Do Something 
} 

Je semblent tomber à court. Aucune suggestion?

+2

Quel est le problème? –

+3

La première tentative ne peut pas fonctionner puisque vous vérifiez si votre tableau précédemment défini est vide. Deuxième exemple semble bon, quel est le problème avec ça? – clemens321

+0

Peut-être que dans le second exemple, vous attendez un comportement pour 'if ($ error === false)'? – RToyo

Répondre

0

Si vous voulez lutter contre les robots collecteurs

  1. Créer une entrée cachée que l'homme ne voit pas et les bots remplirai. Vous devez vérifier cette entrée avant de faire quoi que ce soit. Si cette entrée est remplie, cela signifie que le formulaire envoyé par bot n'est pas humain.

  2. Créer une session avec l'heure actuelle lorsque vous affichez un formulaire, en post-traitement, vérifiez le décalage horaire. si c'est moins de 3 secondes c'est un bot.

  3. utilisez le système captcha.

Si vous souhaitez valider les entrées

Ne pas faire la validation comme ce que vous avez fait sur votre question. Vous devriez essayer de valider chacun d'entre eux avec la méthode de validation appropriée. Par exemple, comment vous devez valider le courrier électronique est complètement différent du nom.

par exemple faire pour le courrier électronique:

$email = (isset($_POST['email']) && is_string($_POST['email']))? trim($_POST['email']) : ''; 
$email_error = (filter_var($email,FILTER_VALIDATE_EMAIL))? true : false; 

pour le nom est différent:

$name = (isset($_POST['name']) && is_string($_POST['name']))? trim($_POST['name']) : ''; 
$name_error = (strlen($name)>20 || strlen($name)<3)? true : false; 

Vous pouvez ajouter plusieurs filtres à mes exemples.

0

Laissez vos données attendues soient tableau soit

$expected = ['name', 'email', 'mobile']; 

let forme des valeurs de poste soit $ _POST

foreach($_POST as $key => $value) { 
    if (empty($value) && in_array($key, $expected)) { 
     if ($value=='') { 
      echo $key. ' is should not be empty'."<br/>"; 
      } 
    } 
} 

vous pouvez obtenir le résultat comme prévu

HTML FORMULAIRE

<form action="" method="post"> 
Name <input type="text" name="name"><br> 
email <input type="text" name="email"><br> 
mobile<input type="text" name="mobile"> 
    <input type="submit" value="Submit"> 
</form> 
+0

Ne faites jamais quelque chose comme ça. Obtenez juste $ _POST basé sur les clés que vous voulez. – ICE

0

Avoir yo Vous envisagez d'utiliser une bibliothèque pour valider?

Je vous recommande d'utiliser https://laravel.com/docs/5.5/validation, donc vous pouvez aussi valider des règles plus complexes, et c'est très clair.