插入pdo查询问题,在错误的表中插入多个

时间:2017-12-08 13:13:18

标签: php mysqli pdo

有这个过程将数据插入两个表并且工作正常,但问题是如果我选择3个图像进行上传并将它们查询到db中,当我提交我的表单时,我看到3个查询在db中插入并且必须是一个表格游览和3个具有相同ID的插入游览:表poze_articol中的图像路径具有来自行(pid的游览中相同的ID ...这里有些错误

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();
        ?>

1 个答案:

答案 0 :(得分:-1)

如果我很了解你,你想在poze_articol创建多个文件字段,所有这个poze_articol字段都有旅游字段的id ......

如果是,

首先,所有数据库插入都在foreach循环范围内,换句话说,foreach循环中的代码部分将执行x循环迭代的次数。 (n次他在$ _FILES ['照片'] ['名称']上有项目你的情况。)

要解决此问题, 我建议你首先在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) {} 
         }
      }
   } 
}