在php中上传图片时出现错误
注意:未定义的索引:第33行的C: xampp htdocs page1.php中的图片
警告: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>
你会得到第一个警告,因为你在同一个文件中使用了整个代码,而不是在$_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"
您可能还想从中删除value="picture"
<input name="picture" type="file" value="picture">
可能会给你带来问题。
你也在header之前输出,所以取消注释你的代码的第一部分,并摆脱session_start();
你现在拥有它。
移动session_start();
它位于$servername = "localhost";
之上$servername = "localhost";
并使用
<?php
session_start();
?>
<html>
<head>
<title>Basic Login Script</title>
...
边注:
exit;
之后,否则你的代码可能想继续执行。 将错误报告添加到文件顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在分期中完成,而不能生成。
添加$conn->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和准备好的语句中受益呢?