2013-03-22 3 views
0

PHP, MYSQL 및 JQuery를 사용하여 두 가지 수준의 드롭 다운 선택 상자를 만듭니다. 모든 것이 잘 보이지만 부모 카테고리에 자식이 없거나 자식을 선택하지 않으면 오류가 발생하며이 오류의 의미와 해결 방법을 이해할 수 없습니다. 너 도움이 필요해.MySQL 알림 : 정의되지 않은 인덱스 : 해결 방법

오류 : 가 Notice: Undefined index: f_child_cat in C:\xampp\htdocs\pathtofile\index.php on line 58 You selected 12 & You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

여기 내 선단부 코드

<?php if(isset($_POST['submit'])){ 
    $drop = $_POST['first_child_cat']; 
    $f_child_cat = $_POST['f_child_cat']; 
    echo "You selected "; 
    echo $drop." & ".$f_child_cat; 

    $query = mysql_query("SELECT * FROM qa_categories WHERE parentid = $f_child_cat") 
       or die(mysql_error()); 

       echo '<ul>'; 
       while($cats = mysql_fetch_array($query)) 
        echo '<li>',$cats['title'],'</li>'; 

       echo '</ul>'; 
} 
?> 
+0

어디 당신은 그것을 얻고있다 :이 쿼리의 일부이기 때문에

, 난 당신과 같이 쿼리를 포장하는 것이 좋습니다까요? – Pete

+0

죄송합니다. 질문을 다시 업데이트했습니다. 다시 한 번 확인해 주시겠습니까? 감사합니다. –

답변

1

즉, $_POST['f_child_cat']이 정의되지 않았습니다 (존재하지 않음)는 것을 의미합니다. SQL 삽입을 막기 위해 바인드 된 매개 변수를 사용해야하며 mysqli_ 또는 PDO 함수를 사용해야합니다.

오류 무엇입니까
if(isset($_POST['f_child_cat']) && !empty($_POST['f_child_cat'])) { 
    ... call db 
} 
else { 
    echo "You didn't select this" 
} 
+0

그래, 내가 이해하지만이 오류를 해결하는 방법보다? 이것은 선택 사항이며 드롭 다운에서 사용할 수있는 것보다 카테고리가있는 경우 사용자가 제출할 때가 아니라 오류가 발생합니다. 또한 우연히 사용자가 오류보다 두 번째 레벨 범주를 선택하지 않은 경우에도 해결 방법은 무엇입니까? –

+0

@pixelngrain 쿼리의 일부로 코드를 전송하기 때문에 코드가 비어있는 경우 수행 할 것으로 예상되는 질문에 대답해야합니다. 내 업데이트를 참조하십시오. – Kermit

+0

많은 도움을 주셔서 감사 드리며 'Ibu' 두 코드 모두 잘 작동합니다 .. 어느 것이 더 나은지 알고 싶습니까? 또한 자식 고양이가 두 번째 드롭 다운을 표시하지 않을 수있는 방법보다 데이터베이스에 존재하지 않는다면 하나의 빠른 관련 질문이 있습니까? –

1

$_POST['f_child_cat']있는 값을 사용하기 전에 제 존재하는지 확인을 정의하지 않는다.

$f_child_cat = isset($_POST['f_child_cat'])?$_POST['f_child_cat']:false; 

if ($f_child_cat){ 
    $f_child_cat = mysql_real_escape_string($f_child_cat); // always escape 

    /// your query. 
} 

참고 mysql_로 * 함수가 사용 depricated mysqli 또는 대안으로 PDO된다.

+0

이것은 훌륭하지만 코드가 더 좋거나'왕자'코드라는 것을 이해하는 것이 좋습니다. 제발 저를 잘못 받아들이지 마세요.하지만 저는 전문가입니다. 두 코드 모두 잘 작동하기 때문에 마스터가 아닙니다. –

+0

** 확인은 ** 색인이 정의되어 있는지 확인하는 것입니다. 그러므로'isset ($ _ POST [ 'f_child_cat'])'이것은 에러를 방지합니다; – Ibu

+0

@Ibu'$ _POST [ 'f_child_cat']'는 정의 할 수 있지만 비워 둘 수 있습니다. – Kermit

관련 문제