我想在数据库中插入一个图像。数据库中的字段类型为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_filesize
和post_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字符串存储在数据库中并不是最好的解决方案,您可以在验证后将图像保存在目录中,并将图像名称保存在数据库列中。这将保持您的数据库大小分配较小,并将使您的应用程序随着时间的推移分配更快