php
  • sql
  • 2012-09-12 2 views 0 likes 
    0

    세 개의 옵션 값이있는 선택 상자가 있습니다. 사용자가 하나를 선택할 때 ajax를 사용하여 데이터베이스에서 해당 값을 자동으로 업데이트하려고합니다. 이 SQL은 내가 성취하고자하는 목적에 유효합니까?유효한 SQL 구문은 무엇입니까?

    UPDATE 
        Orders 
    SET 
        status='".$_POST[order_status]['.$i.']."' 
    WHERE 
        ID='".$_POST[order_no]  ['.$i.']."'; 
    

    많은 감사.

    +4

    같이하십시오. 방금 큰 보안 구멍을 만들었습니다. – Quentin

    +2

    [바인딩 된 인수] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php) – Quentin

    +0

    을 사용하십시오. 1. 앞서 말했듯이 다음과 같은 쿼리를 작성하지 마십시오. 그것의 큰 보안 위협. 2. 귀하의 질의를 인쇄하고 http://www.dpriver.com/pp/sqlformat.htm을 통해 확인할 수 있습니다. – shkschneider

    답변

    1

    함께 문자열을 분쇄하여 SQL을 구축하지 마십시오이

    $sql ="UPDATE Orders SET 
    status='".$_POST['order_status'][$i]."' 
    WHERE ID='".$_POST['order_no'][$i]."' "; 
    
    0
    하기 잘못 문자열 내부의 concats을 사용하는

    :

    UPDATE Orders 
        SET status='".$_POST['order_status'][$i]."' 
        WHERE ID='".$_POST['order_no'][$i]."'; 
    

    이유는 이미 문자열을 분할하는되고 당신은 배열 내부의 값을 사용하고 싶습니다.

    은 무엇 당신이 가진 것은 문자열입니다

    UPDATE Orders SET status=' 
    

    당신은 그것에 변수 concat'ing됩니다 등등

    $_POST['order_status'][$i] 
    

    및 ...

    당신은 CONCAT를 사용을 문자열 사이에 포함 할 수 있으며 포함하는 배열 내에서 사용할 필요가 없습니다.

    참고로 $_POST 데이터를 쿼리에 사용하는 것은 위험합니다. 준비된 문장을 사용해야합니다. 즉, 변수를 안전하게 바인딩 할 수 있습니다.

    +0

    왜 downvote입니까? – Fluffeh

    +0

    아마 당신이 그를 concat하는 방법을 가르쳐 때문입니다. 그건 나빠. – idstam

    관련 문제