2011-03-10 3 views
2

데이터베이스에 데이터를 제출하려고합니다. 데이터를 데이터베이스에서 필드로 가져 오는 여러 필드가있는 업데이트 양식이 있습니다. 제출하면 데이터베이스의 데이터가 갱신됩니다. 두 필드는 내가 가지고있는 두 개의 이미지 업 로더와 관련이 있습니다. 페이지에 단 하나의 이미지 업 로더가있을 때이 작업을 성공적으로 수행했지만 두 번째를 추가 할 때 조건부 구문을 감쌀 수 없습니다. 다음은 이미지 업 로더가 하나 뿐인 양식에 사용하는 코드입니다. 제출 된 요소가 비어 있는지 확인합니다. 그렇다면 update 문을 실행하고 image 변수를 제거합니다. 이미지 변수가 비어 있지 않으면 문에 추가 된 해당 필드를 사용하여 update 문을 실행합니다.PHP/mysql 조건부 업데이트 쿼리

if($imgProfileFull == ""){ 
$query = "update students set `nameFirst` = '$nameFirst', `nameLast` = '$nameLast', `profile` = '$profile', `priority` = '$priority', `active` = '$active', `_modifiedDate` = '$_modifiedDate' where `id` = '$id'"; 
}else{ 
if((($_FILES["image"]["type"] == "image/jpeg") 
|| ($_FILES["image"]["type"] == "image/pjpeg")) 
&& ($_FILES["image"]["size"] < 500000)) 
{ 
    if($_FILES["image"]["error"] > 0){ 
    header("location:students.php?file=error"); 
    }else{ 
    move_uploaded_file($_FILES["image"]["tmp_name"], 
    "../images/students/full/" . $imgProfileFull); 
    } 
}else{ 
    header("location:students.php?file=error"); 
} 
$query = "update students set `imgProfileFull` = '$imgProfileFull', `nameFirst` = '$nameFirst', `nameLast` = '$nameLast', `profile` = '$profile', `priority` = '$priority', `active` = '$active', `_modifiedDate` = '$_modifiedDate' where `id` = '$id'"; 
} 

어떻게하면 다른 이미지 필드를 포함하도록 내 업데이트 문을 쓸 수 있습니까? 변수는 $imgProfileThumb입니다. 기본적으로 데이터베이스가 비어 있지 않은 경우에만 두 개의 이미지 열을 업데이트하려고합니다. 이미지가 실제로 업로드되지 않는 한 양식이 작성되는 방식이므로 이미지 필드는 기술적으로 항상 비어 있기 때문입니다. 이견있는 사람? 감사!!

답변

4

if 문을 사용하여 동적으로 쿼리를 만들 수 있습니다.

$query = "UPDATE students SET "; 

if ($imgProfileFull !== ""){ 
    $query .= "`imgProfileFull` = '$imgProfileFull', "; 
} 

if ($imgProfileThumb !== ""){ 
    $query .= "`imgProfileThumb` = '$imgProfileThumb', "; 
} 

$query .= "`nameFirst` = '$nameFirst', 
      `nameLast` = '$nameLast', 
      `profile` = '$profile', 
      `priority` = '$priority', 
      `active` = '$active', 
      `_modifiedDate` = '$_modifiedDate' 
      WHERE `id` = '$id'"; 

당신은 또한 당신이 아직 시도하지 경우 문자열 데이터에 대한 mysql_real_escape_string을 사용하실 수 있습니다.

+0

감사합니다. 나는 그것을 시도 할 것이다. 나는 당신에게 한 지점을 부딪쳐서 시험 할 때 그것이 작동하는지 확인해 보겠습니다. :) – RyanPitts

+0

나는 이것을 테스트했으며 제대로 작동하는 것 같습니다! 감사합니다 @ 마크! – RyanPitts