【问题标题】:errors while uploading images in php在php中上传图片时出错
【发布时间】:2015-08-14 21:08:54
【问题描述】:

注意:未定义索引:C:\xampp\htdocs\page1.php 第 33 行中的图片

警告:pathinfo() 期望参数 2 很长,字符串在第 35 行的 C:\xampp\htdocs\page1.php 中给出 抱歉,只允许使用 JPG、JPEG、PNG 和 GIF 文件。抱歉,您的文件未上传。用户登录

//<?PHP
//session_start();
//if (!isset($_SESSION['login_user'])) {
    //header ("Location: page2.php");/
//}
//?>  
    <html>
    <head>
    <title>Basic Login Script</title>


    </head>
    <body>
    
        
    <?php
           
            
            session_start();
            $servername = "localhost";
            $username = "root";
            $passwor = "";
            $dbname = "form";
            $name = $_SESSION['login_user'];
            echo $name; 
    
    $conn = new PDO("mysql:host=$servername;dbname=form", $username, $passwor);
        
    $stmt = $conn->prepare("SELECT id, username, password FROM users where username='$name'");
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    echo "Connected successfully";      
       $target_dir= "htdocs" ."basketball/";
       $target_file = '$target_dir' .basename($_FILES['picture']['name']); //heres an error    
       $uploadOk = 1;
       $imageFileType=pathinfo('$targetfile','PATHINFO_EXTENSION');//heres an error
       
       if(isset($_POST["submit"])) 
       {
        $check = getimagesize($_FILES['picture']['tmp_name']);
        if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
       }   
    else {
           echo "File is not an image.";
           $uploadOk = 0;
          }
}
       if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) 
       {
         echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
         $uploadOk = 0;
       } 
       if ($uploadOk == 0) 
       {
         echo "Sorry, your file was not uploaded.";
       } 
       else 
       {
    if (move_uploaded_file($_FILES['picture']['tmp_name'], $target_file)) {
        echo "The file ". basename( $_FILES["picture"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
     ?>
    
    
    
    
    
    
    
    
User Logged in<br/><br/>
<form action="page1.php" method="post" enctype="multipart/form-data">
<input name="picture" type="file" value="picture">
<input name="Upload Now" type="submit" value="Upload Image">
</form>

<P>
<?php

if(isset($_POST['logout'])){
//$_SESSION['user_login'] = '';
//die;
session_destroy();
header("Location: login.php");}
?>
    </body>
    </html>

【问题讨论】:

  • 使用isset()!empty()。修复此Notice: Undefined index: picture in C:\xampp\htdocs\page1.php on line 33,其余的将随之而来。
  • @Fred-ii- 那么第一件事是:这里的问题是什么?
  • @Rizier123 这不言自明 - 喵喵喵!
  • 你不能把session_start() 之后你有输出HTML。
  • @JayBlanchard 他们已经评论了那部分 Sam - 不知道为什么。

标签: php


【解决方案1】:

您收到第一个警告是因为您在同一个文件中使用了整个代码,而不是在您的 $_FILES 数组上使用 isset()!empty()

对该行使用条件语句并将单引号更改为双引号。变量不会在单引号内解析。

$target_file = '$target_dir' .basename($_FILES['picture']['name']);

if(!empty($_FILES['picture'])){
   $target_file = "$target_dir" .basename($_FILES['picture']['name']);
...
}

这样做,其余的就会随之而来。

  • 还要确保文件夹具有适当的写入权限。

但是这一行:

$target_dir= "htdocs" ."basketball/"

不清楚,会读作htdocsbasketball 作为文件夹。如果这不是您想要的并且那些是子文件夹,那么在htdocs 之后添加一个/


你也没有一个元素来匹配你的条件语句:

if(isset($_POST["submit"]))

我认为这与您的提交按钮被命名为name="Upload Now"有关

应该读作name="submit"

您可能还想从
&lt;input name="picture" type="file" value="picture"&gt; 中删除可能会给您带来问题的value="picture"


您还在标头之前输出,因此请取消注释您的代码的第一部分,并删除您现在拥有的 session_start();

session_start();移动到$servername = "localhost";上方的位置并使用

<?php
session_start();
?>
<html>
<head>
<title>Basic Login Script</title>
...

旁注:

  • 在标头后添加exit;,否则您的代码可能需要继续执行。

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。

在打开连接后立即添加$conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$conn = new PDO("mysql:host=$servername;dbname=form", $username, $passwor);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

捕捉其他潜在错误。


脚注:

  • 这一行 if(isset($_POST['logout'])){ - 您发布的代码没有名为“logout”的元素,除非它不相关。

  • 既然您使用的是 PDO,为什么不从使用 PDO with prepared statements 中受益?

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2020-04-24
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多