2013-07-26 3 views
0

이 코드를 실행할 때 다음과 같은 오류를 받고 있어요 :적절한 양식 유효성 검사 (PHP/MySQL의)

구문 분석 오류 : 구문 오류, 예기치 않은 ','기대 ')'에서/응용 프로그램/XAMPP/... results.php on line 43

라인 43은 아래의 쿼리 라인에 해당합니다.

여기 내 코드입니다. 변수는 설문지 페이지에서 양식 입력과 관련됩니다. $source_of_fund_1$source_of_fund_1은 라디오 버튼 양식 입력과 관련이 있습니다. 다른 변수는 텍스트 필드/영역과 관련됩니다. 라디오 버튼 변수에 대해 isset 검증을 사용하고 있고 텍스트 필드/영역에 !empty을 사용하고 있습니다.

<?php 

$source_of_fund_1 = $_POST['source_of_fund_1']; 
$source_of_fund_2 = $_POST['source_of_fund_2']; 
$repayment_date = $_POST['repayment_date']; 
$do_differently = $_POST['do_differently']; 

require_once 'connect.inc.php'; 

$query = "INSERT INTO tablename 
      (source_of_fund_1, source_of_fund_2, repayment_date, do_differently) 
      VALUES 
      ('$source_of_fund_1', '$source_of_fund_2', '$repayment_date', '$do_differently')"; 

$result = @mysqli_query($link, $query); 

if (($result) && !empty($repayment_date, $do_differently) 
     && isset($source_of_fund_1, $source_of_fund_2)) { 
    echo 'Thank you for your submission.'; 
} else { 
    echo 'We were unable to process your information.'.mysqli_error($link).'Please ensure all required fields were filled out.'; 
} 

mysqli_close($link); 

?> 

아무런 도움이 필요하지 않습니다. 고맙습니다!

+0

PHP에서 복수 줄 문자열을 사용할 수 없습니까? –

+3

** 경고 ** 코드가 SQL 주입 공격에 취약합니다! –

+0

MySQL 쿼리를 실행 한 후 모든'$ _POST' 데이터가 채워지는지 확인하는 이유는 무엇입니까? –

답변

0

즉각적인 문제는 내가 생각이다 - isset는 달리, 그것은 단지 소요 하나.

그러나 몇 가지 다른 문제가 있습니다.

  1. @와 오류를 억제하지 마십시오 - 뭔가가 잘못되면, 당신이 그것에 대해 알고 싶어 , 당신이 적절하게 처리 할 수 ​​있습니다.

  2. 온 전성 검사없이 $ _POST의 내용을 SQL에 직접 전달합니다. 이것은 안전하지 않습니다. 최소한 mysqli_real_escape_string을 사용해야합니다. 그러나 mysqli를 사용하는 경우 준비된 명령문으로 만들지 말고 대신 변수를 바인딩하십시오. 훨씬 더 안전합니다.

+0

안녕하세요, 감사합니다. 준비된 진술서를 작성하고 변수를 바인딩하면 무엇을 의미합니까? – user2547925

+0

이 답변을 살펴 보려면 http://stackoverflow.com/a/60496/1315962 -보다 안전한 코드를 작성하는 데 도움이되는 방법입니다. 일이 진행되면 누군가가 아포스트로피가 포함 된 데이터를 입력하면 쿼리를 중단하게됩니다. 아마도 훨씬 더 많이 악화시킬 수 있습니다. 준비된 진술은 그러한 일을 피하는 데 도움이됩니다. – andrewsi

+0

고마워요! 매우 감사! – user2547925

3

문제는 빈 호출입니다.

!empty($repayment_date, $do_differently) 

가 있어야한다 : 그것은 하나 개 이상의 매개 변수를 사용하지 않는 여러 매개 변수를 empty를 사용하고 있기 때문에,

!empty($repayment_date) && !empty($do_differently) 
+0

위대한 - 감사합니다! – user2547925

+0

도와 드리겠습니다. 그것이 당신을 위해 일했다면, 사람들이이 질문을 접할 때 나중에 참고할 수 있도록 대답을 받아 들여야합니다. – immulatin

+0

네, 고마워요! – user2547925