未定义的数组键"image"和尝试访问类型为 null 和未捕获值的值的数组偏移量错误:路径不能为空错误



我想在数据库中插入一个图像。数据库中的字段类型为longblob,但我不断得到一个错误。

我改变了表单方法从POST到GET,但我仍然有同样的问题。我试图用if(isset())验证每个输入名称,但我有同样的问题。

HTML代码

<form  method="post" action="contact.php" enctype="multipart/form-data">
<?php
if(isset($error)){
foreach($error as $error){
echo '<span class="error-msg">'.$error.'</span>';
};
};
?>
<div class="control-group">
<input type="text" class="form-control border-0 p-4" name ="matricule" required placeholder="Matricule" />
<p class="help-block text-danger"></p>
</div>
<div class="control-group">
<input type="text" class="form-control border-0 p-4" name ="residence" required placeholder="Quartier de residence" />
<p class="help-block text-danger"></p>
</div>
<div class="drag-area">
<div class="icon"><i class="fas fa-cloud-upload-alt"></i></div>
<header>Glisser & Deposser le photo de votre CNI</header>
<span>OR</span>
<button type="button">Importer Fichier </button>
<input type="file" name="image" hidden required >
</div>
<div class="drag-area1">
<div class="icon"><i class="fas fa-cloud-upload-alt"></i></div>
<header class="header">Glisser & Deposser la photo de votre recu </header>
<span>OR</span>
<button class="button" type="button">Importer Fichier </button>
<input type="file" name="img" hidden class="input" required >   
</div>
PHP代码

<?php
@include 'connect.php';
if($_SERVER['REQUEST_METHOD']=="POST")
{
if(isset($_POST['submit'])){ 
if(isset($_POST['matricule']) || isset($_POST['residence']) || isset($_POST['image']) || isset($_POST['img'])){
$matricule = $_POST['matricule'];
$residence = $_POST['residence'];
$image1 = $_FILES['image']['tmp_name'];
$image1 = base64_encode(file_get_contents(addslashes($image1)));
$image2 = $_FILES['img']['tmp_name'];
$image2 = base64_encode(file_get_contents(addslashes($image2)));
}
$age = "SELECT *, DATEDIFF(CURDATE(),DATENAISSANCE) AS nbjour FROM etudiant WHERE  MATRICULE = '$matricule'";
$rb = mysqli_query($conn,$age);
while($list = mysqli_fetch_array($rb)){
extract($list);
$age = floor($nbjour/365);
}
$sql ="SELECT * FROM etudiant WHERE MATRICULE = '$matricule'";
$sqp = "SELECT * FROM candidat WHERE MATRICULE = '$matricule'";
$result = mysqli_query($conn,$sql);
$result1 = mysqli_query($conn,$sqp);
if(mysqli_num_rows($result1) > 0)
{
$error[] = "vous avez deja une candidature";
}
if(mysqli_num_rows($result) > 0 && $age < 23){
$insert = "INSERT INTO candidat(MATRICULE,RESIDENCE,CNI,RECUEPAIEMENT) VALUES('$matricule','$residence','$image1','$image2')";
mysqli_query($conn,$insert);
$error[] = "Votre candidature a ete envoyer avec success";
}else
if($age >= 23){
$error[] = "Desoler vous ne pouvez plus postuler pour une chambre car vous avez plus de 22 ans".$age;
// }else
// if(isset($image1) == false){
//     $error[] = "Selectionner l'image de votre CNI";
// }else
//     if(isset($image2) == false){
//         $error[] = "Selectionner l'image de vos recus ";
}else{
$error[] = "Vous n'etes pas inscrite";
}

}
}
?>

我尝试使用if(isset($_POST['']))对我所有的输入名称文件,但它仍然给我相同的错误。

我在我的服务器上测试了你的代码,从表单的数据只是张贴。

如果图片没有在你的服务器上发布,那么也许你需要改变你的php.ini中的一些设置,并检查你的phpinfo以确保限制在你的服务器上是正确的。

如果您输入phpphpinfo();,重新加载页面,然后搜索upload_max_filesizepost_max_size,其值可能是2M和8M。可以使用ini_set()函数或在php.ini文件中调整该值。

<?php 
// Adjust the values to your needs  
ini_set('post_max_size', '6M');
ini_set('upload_max_filesize', '10M');

或在php.ini中查找并更改:

post_max_size=6M 
upload_max_filesize=10M 

一定要确保帖子限制比文件限制高一点。另外,通过检查max_file_uploads值来检查服务器在一次post中可以处理的文件数量,大多数情况下该值默认为20。

也是为了防止未定义的错误,总是在使用它之前先检查发布的数据是否存在。还要确保上传的文件是图片。

将图像作为base64字符串存储在数据库中并不是最好的解决方案,您可以在验证后将图像保存在目录中,并将图像名称保存在数据库列中。这将保持您的数据库大小分配较小,并将使您的应用程序随着时间的推移分配更快

最新更新