2017-09-03 1 views
0

Lutter pour coder ce qui devrait être une simple instruction if/else-type en PHP. Nous avons un long formulaire Web qui recueille la liste des équipes d'un sport (avec le nom, la note et la date de naissance pour chaque jeune joueur), puis envoie ces données au commissaire de la ligue pour archivage pour référence future.Collé sur un PHP If Statement

J'ai mis ce formulaire en place il y a plus d'un an et ça fonctionne très bien. Cependant, je voudrais le modifier un peu pour vérifier que tous les champs ont été complétés avant d'exécuter le script (en cas d'erreur de l'utilisateur). Voici le code que je suis en train de faire le travail:

//Validate player 1: 
if (!empty($_POST['player1'])) { 
    $player1 = $_POST['player1']; 
    $player1_dob = $_POST['player1_dob']; 
    $player1_grade = $_POST['player1_grade']; 
} elseif (!empty($_POST['player1_dob'])) { 
    echo "You forgot to enter Player 1's date of birth.<br>"; 
    $validate = 'false'; 
} elseif (!empty($_POST['player1_grade'])) { 
    echo "You forgot to enter Player 1's grade.<br>"; 
    $validate = 'false'; 
} else { 
    $validate = 'true'; 
} 

Cela semble être la façon la plus logique (pour moi) pour coder la déclaration. Cependant, le script ne vérifie pas la date de naissance et la note comme prévu. Clairement, il me manque un concept important et je n'utilise pas le if/elseif correctement. Peut-être qu'un utilisateur aimable peut m'aider à me diriger dans la bonne direction?

+2

'! Empty()' 'vs empty()' – JAAulde

Répondre

3

Le empty par rapport à !empty fait partie de celui-ci. Mais aussi vous devez vérifier les pièces AVANT de dire "tout va bien". Essentiellement flip:

//Validate player 1: 
if (!empty($_POST['player1'])) { 
    if (empty($_POST['player1_dob'])) { 
     echo "You forgot to enter Player 1's date of birth.<br>"; 
     $validate = 'false'; 
    } elseif (empty($_POST['player1_grade'])) { 
     echo "You forgot to enter Player 1's grade.<br>"; 
     $validate = 'false'; 
    } else { 
     $player1 = $_POST['player1']; 
     $player1_dob = $_POST['player1_dob']; 
     $player1_grade = $_POST['player1_grade']; 
     $validate = 'true'; 
    } 
} 

Il est pas clair de votre code ce que vous voulez faire si vide (player1) - à savoir, ne pas la validation ou tout simplement sauter toute la section, mais l'un peut être manipulé facilement.

+1

Modifiez le dernier '};' à '}' – matiaslauriti

+1

@manassehkatz - Cela m'a vraiment aidé car il m'a montré comment imbriquer correctement les instructions if dans if, ce que je devais faire tout le temps. C'était le moment "aha". Merci beaucoup! – 712Jefferson

1

Je voudrais complètement refactoriser ce que vous faites, mais si vous voulez le faire fonctionner, vous devez supprimer ! des statuts elseif. Vous dites if is not empty player 1 date of birth, error, alors ici je pense que vous voulez dire if IS empty.

+0

Oops. Vous avez totalement raison. Je suis un idiot. Merci pour l'ensemble frais des yeux. Par curiosité, à quoi faites-vous référence par "refactor"? Merci encore! – 712Jefferson

+1

En pratique, cela signifie "refaire différemment". – deg

+1

Pas de problème. Je dis que ce n'est pas bien comme vous le faites, vous dites: Si les données de player1 ne sont pas vides, je vais sauvegarder toutes les données, et si elles sont vides, je les analyserai. Mais si player1_dob est vide, mais pas player1, vous enregistrez une donnée vide. – matiaslauriti

1

Vous pouvez également utiliser la fonction isset

$validate=true; 
if (!empty($_POST['player1'])) { 
    $player1 = $_POST['player1']; 
    $player1_dob = $_POST['player1_dob']; 
    $player1_grade = $_POST['player1_grade']; 
} 
if(!isset($player1_dob)) { 
    echo "You forgot to enter Player 1's date of birth.<br>"; 
    $validate = 'false'; 
} 
if (!isset($player1_grade)) { 
    echo "You forgot to enter Player 1's grade.<br>"; 
    $validate = 'false'; 
    } 
    if($validation) {.... }