2017-12-08 3 views
-1

두 테이블에 데이터를 삽입하는이 프로세스가 있고 잘 작동하지만 업로드 및 쿼리를 위해 3 개의 이미지를 선택한 경우와 양식을 제출할 때 문제가 발생합니다. 내가 데이터베이스에서 3 쿼리 삽입을 참조하고 투어에서 동일한 ID를 가진 3 테이블 삽입 및 3 삽입해야합니다 : (pid) 행에서 동일한 ID와 이미지 경로에 대한 테이블 poze_articol .. 뭔가 잘못되었습니다 여기에 뭔가가 잘못되었습니다삽입 pdo 쿼리 문제, 잘못된 테이블에 여러 삽입

PHP 코드 :

  <?php 
     $servername = ""; 
     $username = ""; 
     $password = ""; 
     $dbname = ""; 
     // Create connection 
     $conn = new mysqli($servername, $username, $password, $dbname); 
     // Check connection 

     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 
     if(isset($_POST['addtour'])) 
     { 

     #### START FROM HERE I THINK IS THE PROBLEM ### 
     define ("MAX_SIZE","9000"); 
     function getExtension($str) 
     { 
       $i = strrpos($str,"."); 
       if (!$i) { return ""; } 
       $l = strlen($str) - $i; 
       $ext = substr($str,$i+1,$l); 
       return $ext; 
     } 
     $valid_formats = array("jpg", "png", "bmp","jpeg"); 

      $uploaddir = "../../../img/carousel/"; //image upload directory 
      foreach ($_FILES['photos']['name'] as $name => $value) 
      { 

       $filename = stripslashes($_FILES['photos']['name'][$name]); 
       $size=filesize($_FILES['photos']['tmp_name'][$name]); 
       //get the extension of the file in a lower case format 
        $ext = getExtension($filename); 
        $ext = strtolower($ext); 

       if(in_array($ext,$valid_formats)) 
       { 
        if ($size < (MAX_SIZE*1024)) 
        { 
        $image_name=time().$filename; 

        $newname=$uploaddir.$image_name; 

        if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname)) 
        { 

     $sql2 = "INSERT INTO tours (titlu,durata,descriere,pret,ribbon,titlu_slider,desc_slider,descriere_box,titlu_box1,desc_box1,titlu_box2,desc_box2,titlu_box3,desc_box3,titlu_box4,desc_box4) VALUES (
     '".$_POST["oras_caseta"]."', 
     '".$_POST["durata_caseta"]."', 
     '".$_POST["descriere_caseta"]."', 
     '".$_POST["pret_caseta"]."', 
     '".$_POST["icon_caseta"]."', 
     '".$_POST["titlu_slider"]."', 
     '".$_POST["descriere_slider"]."', 
     '".$_POST["descriere_overview"]."', 
     '".$_POST["titlu_box1"]."', 
     '".$_POST["desc_box1"]."', 
     '".$_POST["titlu_box2"]."', 
     '".$_POST["desc_box2"]."', 
     '".$_POST["titlu_box3"]."', 
     '".$_POST["desc_box3"]."', 
     '".$_POST["titlu_box4"]."', 
     '".$_POST["desc_box4"]."')"; 

     if ($conn->query($sql2) === TRUE) { 
      $last_id = $conn->insert_id; 

      echo '<div class="alert alert-success" role="alert"> 
      <strong>Bravo!</strong> Ai adaugat cu succes un traseu pe site. 
     </div>'; 
     } else { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
     } 
     $sql = "INSERT INTO poze_articol (poza_articol,pid) VALUES ('img/carousel/$image_name','$last_id')"; 

     if ($conn->query($sql) === TRUE) {} 
      } 
      } 
     } 
    } 
} 
    $conn->close(); 
     ?> 
+0

그래서, 문제가 무엇 루프 할 수 있습니까? 지금 무슨 일이 일어나고있는거야? –

+0

내가 coret 방식을 제출하면 테이블 '투어'단 하나의 쿼리와 테이블 poze_articol, 하나, 둘, 셋 또는 얼마나 많은 사진을 내가 투어 테이블에서 동일한 ID로 삽입하도록 선택했는지 제출하는 것입니다. 다른 ID로 모두를 삽입하고 있습니다 .. – Alex

답변

-1

나는 잘 승, 당신은 당신을 이해하는 경우 이 경우 개미는

그래서 첫째, 데이터베이스 삽입의 모든 기타에, foreach 루프의 범위에있는, ...이 poze_articol 필드의 모든 여행 필드의 ID를 가지고 poze_articol

을 파일 필드의 수를 만들 foreach 루프 내부의 코드 부분은 루프가 반복하는 x 번 실행됩니다. (n 번 그가 $ _FILES [ 'photos'] [ 'name'] 님의 사례가 있습니다.).

문제를 해결하려면 먼저 foreach 외부에서 둘러보기 필드를 만들어 보겠습니다. 모든 파일이 모두 로컬 디스크 및 데이터베이스에 저장됩니다 있는지 확인 원하기 때문에

 $sql2 = "INSERT INTO tours (titlu,durata,descriere,pret,ribbon,titlu_slider,desc_slider,descriere_box,titlu_box1,desc_box1,titlu_box2,desc_box2,titlu_box3,desc_box3,titlu_box4,desc_box4) VALUES (
    '".$_POST["oras_caseta"]."', 
    '".$_POST["durata_caseta"]."', 
    '".$_POST["descriere_caseta"]."', 
    '".$_POST["pret_caseta"]."', 
    '".$_POST["icon_caseta"]."', 
    '".$_POST["titlu_slider"]."', 
    '".$_POST["descriere_slider"]."', 
    '".$_POST["descriere_overview"]."', 
    '".$_POST["titlu_box1"]."', 
    '".$_POST["desc_box1"]."', 
    '".$_POST["titlu_box2"]."', 
    '".$_POST["desc_box2"]."', 
    '".$_POST["titlu_box3"]."', 
    '".$_POST["desc_box3"]."', 
    '".$_POST["titlu_box4"]."', 
    '".$_POST["desc_box4"]."')"; 

    if ($conn->query($sql2) === TRUE) { 
     $last_id = $conn->insert_id; 

     echo '<div class="alert alert-success" role="alert"> 
     <strong>Bravo!</strong> Ai adaugat cu succes un traseu pe site. 
    </div>'; 
    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

, 당신은 무결성을 보장하기 위해 transaction를 사용할 수 있습니다. 투어 필드를 만든 후

Juste, 당신은

foreach ($_FILES['photos']['name'] as $name => $value) 
     { 

      $filename = stripslashes($_FILES['photos']['name'][$name]); 
      $size=filesize($_FILES['photos']['tmp_name'][$name]); 
      //get the extension of the file in a lower case format 
       $ext = getExtension($filename); 
       $ext = strtolower($ext); 

      if(in_array($ext,$valid_formats)) 
      { 
       if ($size < (MAX_SIZE*1024)) 
       { 
       $image_name=time().$filename; 

       $newname=$uploaddir.$image_name; 

       if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname)) { 

    $sql = "INSERT INTO poze_articol (poza_articol,pid) VALUES ('img/carousel/$image_name','$last_id')"; 

    if ($conn->query($sql) === TRUE) {} 
     } 
     } 
    } 
} 
+0

Many Thanks, Worked – Alex