有人可以帮我处理这个错误吗?我不知道用什么方法或方法摆脱这个错误。我是php新手并开始学习它。有人可以给我点子吗?
这是我的PHP代码。
<?php
include_once('connection.php');
$newsid = $_GET['news_id'];
if(isset($_POST['esubmit'])){
/* create a prepared statement */
if ($stmt = mysqli_prepare($con, "SELECT * FROM news WHERE news_id = ? LIMIT 1")) {
/* bind parameters */
mysqli_stmt_bind_param($stmt, "s", $newsid);
/* execute query */
mysqli_stmt_execute($stmt);
/* get the result set */
$result = mysqli_stmt_get_result($stmt);
/* fetch row from the result set */
$row = mysqli_fetch_array($result);
}
}
if(isset($_POST['update'])){
if(isset($_FILES['image'])){
$file=$_FILES['image']['tmp_name'];
/* Below is the line 30 causing the error*/
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
$image_name= addslashes($_FILES['image']['name']);
move_uploaded_file($_FILES["image"]["tmp_name"],"img/" . $_FILES["image"]["name"]);
$newsimage="img/" . $_FILES["image"]["name"];
$title = $_POST['titles'];
$date = $_POST['dates'];
$content = $_POST['contents'];
$sql ="UPDATE news SET news_title ='$title', news_date ='$date', news_content = '$content', news_image ='$newsimage' WHERE news_id = '$newsid'";
mysqli_query($con, $sql);
echo "oh it worked ";
}
else{
$title = $_POST['titles'];
$date = $_POST['dates'];
$content = $_POST['contents'];
$sql ="UPDATE news SET news_title ='$title', news_date ='$date', news_content = '$content' WHERE news_id = '$newsid'";
mysqli_query($con, $sql);
echo "oh it worked again ";
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<?php
if(isset($_POST['esubmit'])){
?>
<form method="post" action ="edit2.php?news_id=<?php echo $row['news_id']; ?>" enctype="multipart/form-data">
Title<input type ="text" name ="titles" value="<?php echo $row['news_title']; ?>"/><br>
Date<input type ="text" name="dates" value="<?php echo $row['news_date']; ?>" /><br>
Content<textarea name="contents"><?php echo $row['news_content']; ?></textarea>
<input class="form-control" id="image" name="image" type="file" accept="image/*" onchange='AlertFilesize();'/>
<img id="blah" src="<?php echo $row['news_image']; ?>" alt="your image" style="width:200px; height:140px;"/>
<input type="submit" name="update" value="Update" />
</form>
<?php
}
?>
<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#blah').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$("#image").change(function(){
readURL(this);
});
</script>
</body>
</html>
答案 0 :(得分:6)
为什么要为你的(临时)文件名添加slach?
你的第30行:
$image= addslashes(file_get_contents($_FILES['image']['tmp_name']));
所以要删除错误警告:
if(!empty($_FILES['image']['tmp_name'])
&& file_exists($_FILES['image']['tmp_name'])) {
$image= addslashes(file_get_contents($_FILES['image']['tmp_name']));
}
您可以/应该对此代码做很多其他事情,但我不能过多地详细介绍它,但基本上您应该检查$_FILES['image']['error'] == 0
以确保代码仅在文件成功上载时运行。
替换
if(isset($_FILES['image'])){
进行错误检查:
if($_FILES['image']['error'] == 0){
这意味着只有OK上传的文件才能运行IF
语句内容
停止添加斜杠,不需要。
为SQL查询使用预准备语句。
Move_uploaded_file
应该在完美的世界中给予绝对路径而不是相对路径。
您是否意识到您file_get_contents
正在获取文件中的 数据 ,而不是实际的二进制文件数据。看起来这不是你在这个阶段需要做的事情。您提供的代码中没有明确使用您的$image
值,正如 apokryfos 正确指出的那样,您实际上是在检索到的图像的归档数据中添加了斜杠。这只会让你的$image
变得混乱。
答案 1 :(得分:0)
对于 file_get_contents($ _ FILES ['image'] ['tmp_name']),如果出现错误不能为空,则表示它没有文件或代码的html部分未附加任何内容。因此,首先通过回显值 file_get_contents($ _ FILES ['image'] ['tmp_name'])来检查是否已附加任何内容。
答案 2 :(得分:0)
<?php
ini_set( 'display_errors', 0 );
error_reporting( E_ALL );
?>
答案 3 :(得分:0)
如果其他人仍然有此问题。这为我解决了。 将您的php.ini文件更改为
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
说明:php.ini文件的默认设置为
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
这就是为什么您不能上传大于2 MB的图像的原因。 对于Windows,您只需在底部菜单栏中的搜索栏中搜索php.ini。然后使用编辑器编辑属性。