2017-02-26 6 views
0

사용자가 여러 질문에 답변하는 퀴즈를 만들려고합니다.PHP 검증 답변을위한 별도의 무선 및 스티커 폼이있는

나는 라디오를 사용하여 각 질문을 만들었고 라디오가 선택되어 있는지 확인하려고합니다. 라디오가 확인되지 않으면 오류가 표시됩니다. 나는 대부분 그 부분을 작동 시켰습니다.
질문 1에 라디오가 선택되어 있고 질문 2에 답변이없는 경우 사용자가 제출을 클릭하면 질문 1에 대한 답변이 사라 졌다고하는 것이 내 문제입니다.

저는 그들이 끈적한 양식처럼 확인한 대답을 유지하고 질문에 오류 (이 경우 질문 2) 만 표시합니다. 대답하지 않았습니다. 아래는 두 가지 방법으로 해결하려고했는데 그럴 수 없습니다.

이것은 PHP로 질문을 표시하는 방법입니다.

<tr> 
    <td> If a and b are negative numbers, and |a| < |b|, then b - a is negative. </td> 
    <td> <?php echo ($err['q[1]']? "<span style='color:red'>*".$err['q[1]']."</span><br>": "");?> 
     <input type="radio" name="q[1]" id="q[1]t" value="T" <?php if (isset($_POST['q[1]']) and $_POST['q[1]'] == 'T') { echo 'checked'; } ?> > TRUE 
     <input type="radio" name="q[1]" id="q[1]f" value="F" <?php if (isset($_POST['q[1]']) and $_POST['q[1]'] == 'F') echo 'checked'; ?> > FALSE 
    </td> 
</tr> 
<tr> 
    <td> The equation 2x + 7 = 2(x + 5) has one solution. </td> 
    <td> <?php echo ($err['q[2]']? "<span style='color:red'>*".$err['q[2]']."</span><br>": "");?> 
     <input type="radio" name="q[2]" id="q[2]t" value="T" <?php if (isset($_POST['q[2]']) and $_POST['q[2]'] == 'T') echo 'checked'; ?> > TRUE 
     <input type="radio" name="q[2]" id="q[2]f" value="F" <?php if (isset($_POST['q[2]']) and $_POST['q[2]'] == 'F') echo 'checked'; ?> > FALSE 
    </td> 
</tr> 

이것은 확인하는 방법입니다. 당신이 배열 표기법 []를 사용하여 입력이 양식을 제출하면

if (isset($_POST) && !empty($_POST)) { 

    if (isset($_POST['q[1]'])) { 
     $radio_input = $_POST['q[1]']; 
     echo $radio_input; 
     $error=false; 
    } else { 
     $err['q[1]']= "Please Select An Answer"; 
     $error=true; 
    } 
    if (empty($_POST['q[2]'])) { 
     $err['q[2]']= "Please Select An Answer"; 
     $error=true; 
    } else { 
     $error=false; 
    } 
+0

$err['q[1]'] !== $err['q'][1]가 같은 페이지에 제출 또는 다른 페이지로 제출하고 원본 페이지로 다시 리디렉션 기억? – Mikey

+0

@Mikey 내가 할 일은 같은 페이지에 보관하는 것입니다. 그럼 그들이 모든 질문에 대답했을 때 나는 대답과 함께 텍스트 파일을 비교하고 다음 질문 1과 테이블을 표시 올바른, 질문 2 잘못된 등 ... – m0d3r

답변

1

, 그들은 $_POST의 배열로 다시 올 것이다. 예를 들어 귀하의 입력에 액세스 할 수 있습니다. $_POST['q'][1].

그냥

<?php 
$err = array(); 
// check if form was submitted with POST 
if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // simplified 
    for ($i = 1; $i <= 2; $i++) { 
     // check if no answer was selected 
     if (empty($_POST['q'][$i])) { 
      $err["q[$i]"] = "Please Select An Answer"; 
     } 
    } 
} 
?> 

<form action="" method="post"> 
    <table> 
     <tr> 
      <td> If a and b are negative numbers, and |a| < |b|, then b - a is negative.</td> 
      <td> 
       <?php if (isset($err['q[1]'])) : ?> 
        <span style="color: red">* <?= $err['q[1]'] ?></span><br> 
       <?php endif ?> 
       <input type="radio" name="q[1]" id="q[1]t" value="T" <?= isset($_POST['q'][1]) && $_POST['q'][1] == 'T' ? 'checked' : '' ?>> TRUE 
       <input type="radio" name="q[1]" id="q[1]f" value="F" <?= isset($_POST['q'][1]) && $_POST['q'][1] == 'F' ? 'checked' : '' ?>> FALSE 
      </td> 
     </tr> 
     <tr> 
      <td> The equation 2x + 7 = 2(x + 5) has one solution. </td> 
      <td>  
       <?php if (isset($err['q[2]'])) : ?> 
        <span style="color: red">* <?= $err['q[2]'] ?></span><br> 
       <?php endif ?> 
       <input type="radio" name="q[2]" id="q[2]t" value="T" <?= isset($_POST['q'][2]) && $_POST['q'][2] == 'T' ? 'checked' : '' ?>> TRUE 
       <input type="radio" name="q[2]" id="q[2]f" value="F" <?= isset($_POST['q'][2]) && $_POST['q'][2] == 'F' ? 'checked' : '' ?>> FALSE 
      </td> 
     </tr> 
     <tr> 
      <td></td> 
      <td><input type="submit" value="Check"></td> 
     </tr> 
    </table> 
</form> 
+0

정말 고마워. 나는 당신이이 해결책을 쓸 때 정확하게 이것을 풀었다. 이것은 내 솔루션보다 백 배나 더 좋습니다. 내 모든 질문에 내 이름을 다른 변수로 바꿨지 만 이것은 더 논리적 인 방법입니다. 저는 PHP 초보자이며 방금 저를 가르쳐 준 것은 저를 아주 멀리 데려 갈 것입니다. 여러분의 도움과 지식에 진심으로 감사드립니다. – m0d3r

+1

문제 없습니다. 각 질문에 대해 동일한 HTML 구조를 사용하고 있으므로 질문을 배열에 저장하고 반복하여 각 질문을 인쇄하면 양식을 좀 더 간소화 할 수 있습니다. – Mikey

+0

신의 축복! 나는 지금 그 일을하고 그 일을하기 위해 최선을 다할 것입니다! – m0d3r