2014-12-07 3 views
0

누군가 나에게 조언 할 수 있는지 궁금합니다. 데이터베이스에서 정보를 업데이트하는 페이지가 있는데 이전 페이지에서 새 이미지 (캡션 포함)를 게시하고 이미지 삭제를위한 체크 박스가 있습니다. 처리 페이지에서 다음 코드를 가지고 있습니다 :특정 순서로 MySQL 쿼리 실행하기

<?php 
    session_start(); 
    $dbhost = 'removed'; 
    $dbuser = 'removed'; 
    $dbpass = 'removed'; 
    $dbname = 'removed'; 

    function reArrayFiles($file_post) { 
     $file_ary = array(); 
     $file_count = count($file_post['name']); 
     $file_keys = array_keys($file_post); 
     for ($i=0; $i<$file_count; $i++) { 
      foreach ($file_keys as $key) { 
       $file_ary[$i][$key] = $file_post[$key][$i]; 
      } 
     } 
     return $file_ary; 
    } 
    try { 
     $dbo = new PDO('mysql:host=localhost;dbname='.$dbname, $dbuser, $dbpass); 
    }catch (PDOException $e) { 
     print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
    } 

    $query="SELECT * FROM `soldier_info` WHERE `soldier_id` = " . $_POST['soldier_id'] ; 
    foreach ($dbo->query($query) as $row) { 
     $soldier_pre_images = explode(",", $row['soldier_images']); 
    } 

    if($_POST['deletephoto']){ 
     $imagestodelete=$row['soldier_images']; 
     $captionstodelete=$row['soldier_images_captions']; 
     foreach($_POST['deletephoto'] as $todelete){ 
      $deleteexplode = explode("--",$todelete); 
      echo $deleteexplode; 
      $deleteexplodepath = $deleteexplode[0]; 
      $deletecaption=$deleteexplode[1]; 
      $imagesafterdelete= str_replace($deleteexplodepath.",","",$imagestodelete); 
      echo $imagesafterdelete; 
      $captionsafterdelete = str_replace($deletecaption."--","",$captionstodelete); 
      echo $captionsafterdelete; 
      $unlinkpath = str_replace('site url','..',$deleteexplodepath); 
      unlink($unlinkpath); 
     } 

     try { 
      $dbo = new PDO('mysql:host=localhost;dbname='.$dbname, $dbuser, $dbpass); 
      $dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $q = $dbo->prepare("UPDATE `soldier_info` SET `soldier_images`= :image, `soldier_images_captions`= :captions WHERE `soldier_id`= :id"); 
      $q->execute(array(":image" => $imagesafterdelete, ":captions" => $captionsafterdelete, ":id" => $_POST['soldier_id'])); 
     }catch (PDOException $e) { 
      $db_error = "Error!: " . $e->getMessage() . "<br/>"; 
      die(); 
     } 
    } 

    if ($_FILES['photo']) { 
     $file_ary = reArrayFiles($_FILES['photo']); 
     $capcount = 0; 
     foreach ($file_ary as $file) { 
      $allowedExts = array("gif", "jpeg", "jpg", "png"); 
      $temp = explode(".", $file["name"]); 
      $extension = end($temp); 
      if ((($file["type"] == "image/gif")||($file["type"] == "image/jpeg")||($file["type"] == "image/jpg")||($file["type"] == "image/pjpeg")||($file["type"] == "image/x-png")||($file["type"] == "image/png"))&&($file["size"] < 9000000) && in_array(strtolower($extension), $allowedExts)) { 
        if ($file["error"] > 0) { 
        $file_error = "Return Code: " . $file["error"] . "<br>"; 
        } else { 
        $newfilename = "../assets/uploads/images/" . $_POST['soldier_id'] . "/" . $file["name"]; 
        $file_fullname = "site urlv/assets/uploads/images/" . $_POST['soldier_id'] . "/" . $file["name"]; 
        $new_caption = $_POST['image_captions'][$capcount]; 
        if (file_exists($newfilename)) { 
         $file_exists = $file["name"] . " already exists. "; 
        } else { 
         if(is_dir("../assets/uploads/images/" . $_POST['soldier_id'])){ 
          move_uploaded_file($file["tmp_name"],$newfilename); 
          if (strlen($uploaded_images)>1){ 
          $uploaded_images = $uploaded_images . ",". $file_fullname; 
          }else{ 
          $uploaded_images = $file_fullname; 
          } 
          if (strlen($uploaded_captions)>1){ 
          $uploaded_captions = $uploaded_captions . "--". $new_caption; 
          }else{ 
          $uploaded_captions = $new_caption; 
          } 
         }else{ 
          mkdir("../assets/uploads/images/" . $_POST['soldier_id'], 0777, true);  
          move_uploaded_file($file["tmp_name"],$newfilename); 
          if (strlen($uploaded_images)>1){ 
          $uploaded_images = $uploaded_images . ",". $file_fullname; 
          }else{ 
          $uploaded_images = $file_fullname; 
          } 
          if (strlen($uploaded_captions)>1){ 
          $uploaded_captions = $uploaded_captions . "--". $new_caption; 
          }else{ 
          $uploaded_captions = $new_caption; 
          } 
         } 
        } 
        if (strlen($row['soldier_images'])>1){ 
        $uploaded_images = $row['soldier_images'] . ",". $uploaded_images; 
        }else{ 
        $uploaded_images = $uploaded_images; 
        } 
        } 
       } else { 
        $file_invalid = "The file is not a jpg/gif/png file, or is larger than 20mb. Please try again."; 
       } 
       $capcount = $capcount+1; 
     } 
     try { 
      $dbo = new PDO('mysql:host=localhost;dbname='.$dbname, $dbuser, $dbpass); 
      $dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $q = $dbo->prepare("UPDATE `soldier_info` SET `soldier_images`= :image, `soldier_images_captions`= :captions WHERE `soldier_id`= :id"); 
      $q->execute(array(":image" => $uploaded_images, ":captions" => $uploaded_captions, ":id" => $_POST['soldier_id'])); 
     }catch (PDOException $e) { 
      $db_error = "Error!: " . $e->getMessage() . "<br/>"; 
      die(); 
     } 
    } 

    $query="SELECT * FROM `soldier_info` WHERE `soldier_id` = " . $_POST['soldier_id'] ; 
    foreach ($dbo->query($query) as $row) { 
     $firstname = $row['firstname']; 
     $surname = $row['surname']; 
     $yearofbirth = $row['yearofbirth']; 
     $dateofdeath = date("d/m/Y", strtotime($row['dateofdeath'])); 
     $ageatdeath = $row['ageatdeath']; 
     $regiment = $row['regiment']; 
     $battallion_brigade = $row['battallion_brigade']; 
     $Coybty = $row['Coy/bty']; 
     $rank = $row['rank']; 
     $solider_number = $row['soldier_number']; 
     $Next_of_Kin = $row['Next_of_Kin']; 
     $CWGC = $row['CWGC']; 
     $Place_Died = $row['Place_Died']; 
     $Connection_to_Wymeswold = $row['Connection_to_Wymeswold']; 
     $Cemetery = $row['Cemetery']; 
     $LRoH = $row['LRoH']; 
     $Grave = $row['Grave']; 
     $Memorial = $row['Memorial']; 
     $Pier_Face = $row['Pier_Face']; 
     $Other_Mem = $row['Other_Mem']; 
     $Other_Details = $row['Other_Details']; 
     $soldier_images = explode(",", $row['soldier_images']); 
     $soldier_images_captions = explode("--", $row['soldier_images_captions']); 
    } 
    $dbo = null; 
    ?> 

이것은 현재 라이브 사이트가 아니며/dev를 테스트 중입니다. 그러나 내가보고있는 문제는 모든 쿼리가 실행되고 있지만 선택이 처음 실행 된 것처럼 페이지가로드된다는 것입니다. 즉, 처리 된 업데이트 전의 레코드가 반환됩니다. 마지막으로 실행하여 최신 레코드를 가져 오도록 하시겠습니까?

+0

마지막으로 실행하도록 선택 했습니까? – krzysiej

+0

준비된 문장을 사용하십시오 : http://php.net/manual/en/mysqli.quickstart.prepared-statements.php else http://xkcd.com/327/ – idstam

+0

@krzysiej이 마지막으로 실행하고 싶습니다 : $ query = "SELECT * FROM'soldier_info' WHERE'soldier_id' =". $ _POST [ 'soldier_id']; – Stefan

답변

0

다른 연결에서 쿼리를 실행하기 때문에 마지막 선택에서 '원본'데이터를 얻게됩니다. 따라서 격리되지 않은 트랜잭션 제대로 같은 PDO 개체 모두를 실행하면 마지막 선택이 실행됩니다.

가 나는 그것이 작동 생각하면 최선을 다하고 있습니다.

(당신이 POST 매개 변수를 가지고 SQ로를 연결할 경우 L 서버가 해킹 당할 것입니다. 시간 문제 일 뿐이며 누구나 볼 수있는 URL이 있습니다.)

+0

조언을 주셔서 감사합니다. 지금 보아라. 나는 오늘 위생 처리를보고있다 (나는이 실행 명령을 분류하면된다) – Stefan