move_uploaded_file()在我的情况下不起作用

时间:2014-11-20 21:55:43

标签: php mysql wamp

我使用带有mysql的wamp服务器并添加了以下代码

但它没有将文件插入数据库 它在数据库中创建名称,在wamp文件夹中创建tmp文件,但不将其移动到所需目录

看看代码

<form  method="post" action="insert_products.php" enctype="multipart/form-data">
    <table>
        <tr>
            <h2>Pleaset INPUT data to Insert Into database</h2>
        </tr>
        <tr>
            <th scope="col">Title</th>
            <td><input type="text" name="ptitle"></td>
        </tr>
        <tr>
            <th scope="col">catagory</th>
            <td><select name="pcats">
                    <option>Select A Catagory</option>
                    <?php

                  $get_cats = "select * from catagories";
                  $query =mysqli_query($conn,$get_cats)or die("Error: ".mysqli_error($conn));
                  while($get_cats = mysqli_fetch_array($query)){
                      $cat_id = $get_cats['cat_id'];
                      $cat_title = $get_cats['cat_title']; 
                                         echo " <option value='$cat_id'>$cat_title</option>";
                  }
                                          ?>
                </select></td>
        </tr>
        <tr>
            <th scope="col">Brand</th>
            <td><select name="pBrands">
                    <option>Select A Brand</option>
                    <?php

                  $get_brands = "select * from brands";
                  $query =mysqli_query($conn,$get_brands)or die("Error: ".mysqli_error($conn));
                  while($get_brands = mysqli_fetch_array($query)){
                      $brand_id = $get_brands['brand_id'];
                      $brand_title = $get_brands['brand_title']; 
                                         echo "<option value='$brand_id'>$brand_title</option>";
                  }
                                          ?>
                </select></td>
        </tr>
        <tr>
            <th scope="col">IMG1</th>
            <td><input type="file" name="pimg1"></td>
        </tr>
        <tr>
            <th scope="col">IMG2</th>
            <td><input type="file" name="pimg2"></td>
        </tr>
        <tr>
            <th scope="col">IMG3</th>
            <td><input type="file" name="pimg3"></td>
        </tr>
        <tr>
            <th scope="col">Price</th>
            <td><input type="text" name="pprice"></td>
        </tr>
        <tr>
            <th scope="col">description</th>
            <td><textarea name="pdesc"></textarea></td>
        </tr>
        <tr>
            <th scope="col">keywords</th>
            <td><input type="text" name="pkws"></td>
        </tr>
        <tr>
            <th scope="col">save / Update</th>
            <td><input type="submit" name="insert_product" value="Upload / Update"></td>
        </tr>
    </table>
</form>

概念代码

...

      if(isset($_POST["insert_product"])){



          //  datat text variable to insert product details into database
          $pTitle = $_POST['ptitle'];
          $pCats = $_POST['pcats'];
          $pbrands = $_POST['pBrands'];
          $pPrice = $_POST['pprice'];
          $pDesc = $_POST['pdesc'];
          $pKWS = $_POST['pkws'];

          $status = 'on';       

  // product images data container to transfer images rrelated data to database
          $pIMG1 = $_FILES['pimg1']['name'];
          $pIMG2 = $_FILES['pimg2']['name'];
          $pIMG3 = $_FILES['pimg3']['name'];
          //temporary images variables
           $temp_pIMG1 = $_FILES['pimg1']['tmp_name'];
          $temp_pIMG2 = $_FILES['pimg2']['tmp_name'];
          $temp_pIMG3 = $_FILES['pimg2']['tmp_name'];

      if($pTitle == '' OR $pCats =='' OR $pbrands =='' OR $pPrice == '' OR $pDesc =='' OR $pKWS=='' or $pIMG1=='')  {
          echo "<script>alert('Please fill all the fields')</script>";
          exit();
          }else{
                $uploads_dir = APP_PATH . DIRECTORY_SEPARATOR. '/pro_images/';
              if(is_uploaded_file($temp_pIMG1) or is_uploaded_file($temp_pIMG2) or is_uploaded_file($temp_pIMG3) ){
          move_uploaded_file($temp_pIMG1,"$uploads_dir/$pIMG1");
              move_uploaded_file($temp_pIMG2,"$uploads_dir/$pIMG2");
          move_uploaded_file($temp_pIMG3,"$uploads_dir/$pIMG3");
              }else{
                echo"error in file upload ";

              }
          $insert_product = "INSERT INTO products (cat_id,brand_id,date,pTitle,p_Img1,p_Img2,p_Img3,p_price,p_desc,p_status) values ('$pCats','$pbrands',NOW(),'$pTitle','$pIMG1','$pIMG2','$pIMG3','$pPrice','$pDesc','$status')";
          $run_products = mysqli_query($conn,$insert_product) or die('ERROR: '.mysqli_error($conn));
          if ($run_products){
             echo " <script>alert('Inserted')</script>";
              }
          }

      }
  ?>

3 个答案:

答案 0 :(得分:0)

检查您要上传的文件夹的权限。

应该允许写作。如果它在Web服务器上,则文件夹权限应为0755

答案 1 :(得分:0)

这可能是问题所在。

路径中有2个目录分隔符。所以试试

$uploads_dir = APP_PATH . '/pro_images/';

此外,我希望错误消息包含APP_PATH中的内容而不是文本APP_PATH。你真的把它设定为有价值吗?

测试时试试这个

$uploads_dir = APP_PATH . '/pro_images/';
echo '$uploads_dir = ' . $uploads_dir;

答案 2 :(得分:0)

嗨,大家好,感谢各位的支持。

我发现的唯一问题是我的浏览器缓存错误的图像位置,这是相互矛盾的

更多关注以下内容 $ uploads_dir = APP_PATH。 '/ pro_images /'; 我删除了 APP_PATH 修改后的代码如下:

$ uploads_dir ='。/ pro_images /';

它在实现这个之前解决了这个问题,我重新启动了我的电脑。

全部谢谢