【问题标题】:insert pdo query issue, multiple inserts in wrong table插入 pdo 查询问题,在错误的表中多次插入
【发布时间】:2017-12-08 13:13:18
【问题描述】:

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

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

【问题讨论】:

  • 那么,有什么问题呢?现在发生了什么?
  • 当我点击提交时,正确的方法是在表 tours 中插入一个查询,在表 poze_articol 中插入一张、两张、三张或我选择插入多少张相同的图片旅游表中的 id ..但是插入所有不同的 id ..

标签: php mysqli pdo


【解决方案1】:

如果我理解你的话,你想在poze_articol 中创建文件数字段,所有这个 poze_articol 字段都有游览字段的 id...

如果是的话,

首先,您的所有数据库插入都在 foreach 循环范围内,换句话说,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 来保证完整性。

在创建游览场之后,你可以做你的循环

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) {} 
         }
      }
   } 
}

【讨论】:

  • 非常感谢,辛苦了
猜你喜欢
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 2014-11-26
  • 2019-10-04
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多