2012-12-13 3 views
1

에 HTML 양식에서 설문 조사 응답을 전달하는 데 도움이 필요 나는 ... 조금 여기 난처한 상황에 빠진거야은 MySQL의 테이블

나는 DB 테이블에 저장됩니다 설문 조사 질문의 목록을 표시하는 웹 페이지를 가지고, 그리고 나는 각 질문에 대해 등급 응답을 수집하려고 노력하고 있습니다 (강력하게 동의 함 -> 강력하게 동의 함). 값을 내 DB의 다른 테이블로 다시 전달합니다. 여기

는 양식 코드의 조각이다 :

<form action="submitAnswers.php" name="subAns" method="post"> 
     <fieldset> 
      <legend>Survey Questions</legend> 
      <input type="hidden" name="survey_id" value="<?php echo ($survey_id); ?>"> 
      <table width=90% border=0 cellpadding='2' cellspacing='2'?> 

      <tr bgcolor=#D0D0D0> 

       <th>Question</th> 
       <th>Strongly Disagree</th> 
       <th>Somewhat Disagree</th> 
       <th>Neither Disagree nor Agree</th> 
       <th>Somewhat Agree</th> 
       <th>Strongly Agree</th> 
      </tr> 
      <tr>  
      <?php 
       while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) 
       { 
        echo "<td bgcolor='#E8E8E8'><font size='-1'>$row[quest_order]) $row[quest_text]</font></td>"; 

        for ($i = 0; $i < 5; $i++) 
        { 
        //echo "<input type='hidden' name='qID' value='$quest_id'>"; 

        echo "<td bgcolor='#E8E8E8'><input type='radio' name='$row[quest_id]' value='$i'></td>"; 
        }   

        echo "</tr>"; 
       } 
      ?>  

      <br>    
      </table><br> 
      <input type="submit" name="submitAnswers" value="Submit Survey"></fieldset> 
    </form> 

그리고 여기 'submitAnswers.php'파일에서 PHP의 :

$survey_id=$_POST['survey_id']; 

    $sql = "INSERT INTO survey_responses (survey_id) 
      VALUES ('$survey_id')"; 

    $res = send_sql($sql, $link, $db); 


    foreach($_POST['quest_id'] as $id=>$value) 
    { 

     $sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
      VALUES (LAST_INSERT_ID(), $id, '$value')"; 

     $res = send_sql($sql, $link, $db) or die("Cannot add survey"); 

    } 

'survey_responses'테이블에 내 삽입 문 그냥 작동 그래도 각 질문에 대한 응답 점수를 얻는 데 사용되는 라디오 버튼을 수정하는 방법을 모르겠습니다.

어레이 ([survey_id] => 4- [6] => 0 [5] => 1 [4 : 값 POST로 전달되고 (I는 예를 들어, 리턴되는 print_r($_POST);보고를 확인 ] => 2 [3] => 3 [2] => 4 [1] => 3 submitAnswers] =>)

을 설문 조사를 제출하지만 난 '으로 명확하게 나는이 문제에 대해 갈거야 성공적으로 반복 할 수 없으며 각각에 대한 질문 ID 및 응답 값을 삽입 할 수 없습니다.이 프로그램은 비교적 간단하지만 프로그램을 처음 사용하는 사람이라면이 프로그램을 몇 시간 동안 사용해보아야 할 것입니다. .

누군가가 나를 고칠 수 있도록 도움을 줄 수 있기를 바란다. 데이터베이스 레코드를 가져 와서 다양한 양의 정보를 db로 다시 전달하는 동적 크기 형식을 처리하는 방법을 다루는 훌륭한 리소스를 가르쳐 주거나 잘하면 프로세스를 더 잘 설명 할 수 있기를 바란다.

감사합니다.

+0

내가 유 $ _POST [ 'quest_id']에 아무것도 없어 생각 –

+0

quest_id 값 인 [6], [5], [4] , 위의 배열에서. quest_id = 6, 응답 값 (라디오 버튼 선택을 통해) = 0. 6 개의 질문과 응답을 분리하는 방법을 모르므로 테이블에 값을 삽입 할 수 있습니다. $ _POST가 그들을 보내고 있지만, 나는 그걸 잘못 처리하고 있다고 생각합니다 ... – PSUlion01

+1

해킹 당하지 않도록 데이터베이스 입력을 위생 처리하십시오. http://roshanbh.com.np/2007/12/sql-injection-attack-examples-and-preventions-in-php.html – span

답변

0

$sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
     VALUES ('".LAST_INSERT_ID()."', '".$id."', '."$value."')"; 

사용

대신

$sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
     VALUES (LAST_INSERT_ID(), $id, '$value')"; 
+1

이와 같은 코드를 제공하는 경우 코드가 SQL 삽입으로부터 보호되어야한다고 설명하는지 확인하십시오. http://roshanbh.com.np/2007/12/sql-injection-attack-examples-and-preventions-in -php.html – span

+0

행운을 빌어 요 ... 실제로 제 첫 번째 INSERT를 막아 내 코드를 대체했습니다. 나는 문법이 괜찮다고 생각한다. 나는 값들을 적절히 다루지 않을 뿐이라고 생각한다 ... – PSUlion01

+0

@span thanks - 나는 주입 위험에 대해 알고 있고, 나중에 그것을 다루는 계획을 가지고 있지만, 주요 기능을 얻으 려하고있다. 처음 일하는 ... – PSUlion01

0

좋아 난 더 나은 솔루션있을 수 있지만이, 핥았있어 생각합니다.

echo "<td bgcolor='#E8E8E8'><input type='radio' name='quest".$row[quest_id]."' value='$i'></td>"; 

유일한 변화는 name 속성의 ID 번호에 접두사로 '퀘스트'를 추가하고 다음과 같이 내 양식, 나는 읽는 라디오 버튼을 변경했습니다. 내 PHP 파일에서 :

foreach ($_POST as $name=>$value) 
{ 
    if (strpos($name, "quest") !== FALSE) 
    { 
    $qID = substr($name, 5); 
    $sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
     VALUES (LAST_INSERT_ID(), '$qID', '$value')"; 

    $res = send_sql($sql, $link, $db) or die("Cannot add survey"); 
    } 
} 

나는 다음 substr를 통해 ID 번호를 추출의 '탐구'접두사를 가진 사람들을 위해 포스트 값을 확인하고 있습니다.

나는 모든 귀 해요 더 좋은 방법이 있다면 ...