2013-09-22 1 views
0

나는 Joomla 사이트에 대한 데이터베이스 업데이트 쿼리을 작성했으며 아래 코드와 같습니다. 물론 이것은 단지 예일뿐입니다. 실제 검색어는 50 name_x입니다. 내가하고 싶은 것은 그것을 "더 작게"만드는 것입니다. 즉, name_x의 경우 for 또는 while을 사용하고 하나씩 작성하지 않으려면 어떻게해야합니까? 난 그냥 구문 ... 데이터베이스에 정보를 업데이트 할 수있는 매우 안전하지 않은 방식으로, 모든 입력 필드 name="name[]" 그래서 그들이 얻을 HTML 페이지의 이름을 모두의 두 번째 우선 잘FOR 또는 WHILE을 데이터베이스 업데이트 쿼리에 어떻게 사용할 수 있습니까?

if (isset($_POST['button_save']) or isset($_GET['button_save'])){ 
    $gmdb = & JFactory::getDBO(); 
    $update_query = "UPDATE jos_tablename 
         SET id  = '".$_POST["id"]."', 
          name_1 = '".$_POST["name_1"]."', 
          name_2 = '".$_POST["name_2"]."', 
          name_3 = '".$_POST["name_3"]."', 
          name_4 = '".$_POST["name_4"]."', 
          name_5 = '".$_POST["name_5"]."', 
          name_6 = '".$_POST["name_6"]."' 
         WHERE id  = 'something'"; 
    $gmdb->setQuery($update_query); 
    $gmdb->query();} 

답변

0

을 알아낼 수 없습니다 당신이 할 수있는 배열로 보낼 수있는 간단한 루프를 통해 foreach($_POST["name"] as $array)

+0

답장을 보내 주셔서 감사합니다. 이런 식으로하는 안전한 방법은 무엇입니까? –

0

쿼리는 단지 문자열입니다. 다른 루프처럼 루프 안에 빌드 할 수 있습니다. 다음 예제를 확인하십시오.

쿼리에 이스케이프 처리되지 않은 POST 데이터를 추가하는 것은 매우 바람직하지 않은 방법입니다.

$set_array = array(
    // In real world you must escape POST data! 
    "id = '".$_POST["id"]."'" 
); 
for ($i = 1; $i < 100500; $i++) { 
    // In real world you must escape POST data, check that it exists, etc. 
    $set_array[] = "name_".$i." = '".$_POST["name_".$i]."'"; 
} 
$update_query = "UPDATE jos_tablename SET ".join(', ', $set_array)." WHERE id = 'something'"; 
$gmdb->setQuery($update_query); 
$gmdb->query(); 
+0

예를 들어 주셔서 감사합니다 !!! 내가 브리저에게 물었을 때, 이런 식으로하는 안전한 방법은 무엇입니까? –

+1

불행히도 Joomla가 그 대답에 익숙하지 않습니다. 이에 따르면 http://docs.joomla.org/Secure_coding_guidelines#Constructing_SQL_queries $ db-> quote ($ field)를 사용해야합니다. 그것은 따옴표를 추가한다는 점에 유의하십시오. –

+1

Joomla가 테이블 이름에 접두사를 사용하기 때문에'jos_tablename'을'#__ tablename'으로 변경하십시오. 나는 또한 쿼리와'$ _POST' 변수에 대해 [Joomla 2.5 코딩 표준] (http://docs.joomla.org/Selecting_data_using_JDatabase)을 사용할 것이다. – Lodder

관련 문제