如果使用php将图像字段为空,如何插入数据

时间:2016-02-08 06:12:35

标签: php mysql

您好我正在尝试标题,描述和图像等数据。如果我只提供标题和描述而不添加图像,数据应该插入到数据库中。但是如果我正在尝试获取错误。这是我的错误和代码:

  

错误:上传时出错

我的代码

$title=$_POST['blog_title'];
$result = str_replace(" ", "-", $title);
$description=$_POST['blog_description'];
$name=$_FILES["image"]["name"];
$type=$_FILES["image"]["type"];
$size=$_FILES["image"]["size"];
$temp=$_FILES["image"]["tmp_name"];
$error=$_FILES["image"]["error"];
if($error>0)
die("error while uploading");
else
{
if($type == "image/png" || $type == "image/jpg"|| $type == "image/jpeg" || $type == "image/svg" || $type == "image/jpe" )
{
move_uploaded_file($temp,"upload/".$name);
$sql=mysql_query("INSERT INTO blogs(image,blog_title,blog_description)values('$name','$result','$description')");
echo "upload complete";
session_start();
header("Location:blogimage.php");   
}
else
{
echo "failure";
}

Html代码

<form method="POST" action="blogs.php" enctype="multipart/form-data">
<div>
<label for="title">Title</label>
<input type="text" name="blog_title" value="">
</div>
<div>
<label for="image">IMAGE</label>
<input type="file" name="image">
</div>
<div>
<label for="blog_description">Description</label>
<textarea name="blog_description" class="text"  style="width:50%;">  </textarea>
</div>
<input type="submit" value="Submit"/>
</form>

5 个答案:

答案 0 :(得分:2)

根据您的代码,如果您没有上传图像,$ error的值将变为4.因此您的if()条件正在执行。所以删除你的if条件。

if ($name = $_FILES["image"]["name"] != '') {
    if ($type == "image/png" || $type == "image/jpg" || $type == "image/jpeg" || $type == "image/svg" || $type == "image/jpe") {
        move_uploaded_file($temp, "upload/" . $name);
        $sql = mysql_query("INSERT INTO blogs(image,blog_title,blog_description)values('$name','$result','$description')");
        echo "upload complete";            
    }else{
        echo "File type not supported.";
    }
 session_start();
 header("Location:blogimage.php");
} else {
    $sql = mysql_query("INSERT INTO blogs(blog_title,blog_description)values('$result','$description')");
    echo "upload complete";
    session_start();
    header("Location:blogimage.php");
}

答案 1 :(得分:0)

你必须使用如下:

...
if($type == "image/png" || $type == "image/jpg"|| $type == "image/jpeg" || $type == "image/svg" || $type == "image/jpe" )
{
    move_uploaded_file($temp,"upload/".$name);
    $sql=mysql_query("INSERT INTO blogs(image,blog_title,blog_description)values('$name','$result','$description')");
} else {
    $sql=mysql_query("INSERT INTO blogs(blog_title,blog_description)values('$result','$description')");
}
session_start();
header("Location:blogimage.php");
...

答案 2 :(得分:0)

我正在使用mysqli_query和你的代码,因为不推荐使用mysql_ *:

修改后的代码:

<?php

$link = mysqli_connect("localhost", "root", "", "yourDb");
if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

$title=$_POST['blog_title'];
$result = str_replace(" ", "-", $title);
$description=$_POST['blog_description'];

$name = "";
$failure = "";

if(isset($_FILES["image"]["name"])){
    $name=$_FILES["image"]["name"];
    $type=$_FILES["image"]["type"];
    $size=$_FILES["image"]["size"];
    $temp=$_FILES["image"]["tmp_name"];
    $error=$_FILES["image"]["error"];
    if($error>0){
        $name = "";
    }
    else{
        if($type == "image/png" || $type == "image/jpg"|| $type == "image/jpeg" || $type == "image/svg" || $type == "image/jpe" )
        {
            move_uploaded_file($temp,"upload/".$name);        
        }
    }
}

$sql = mysqli_query($link,"INSERT INTO blogs (image,blog_title,blog_description)
               values('$name','$result','$description')");

if($sql){
    //echo "upload complete";
    session_start();
    header("Location:blogimage.php");       
    die();
}
else{
    echo 'failure';
}

?>

<强>解释

  • 我正在检查是否设置了$_FILES["image"]["name"]而不是执行文件上传代码。
  • 如果$error不等于0,则使用move_uploaded_file()
  • 查询将在默认情况下运行文件是否为空,如果为空,则使用$name为空,否则使用文件名。

来自PHP手册:

mysqli::query - mysqli_query - 对数据库执行查询

请注意,mysqli_*扩展程序的mysqli_query的程序结​​构,class RecipeController { def index() { def recipe = Recipes.list() //Recipes is the Grails Domain [recipe: recipe] } def newRecipeForm() { } def createRecipe() { def r = new Recipes(name: params.name, course: params.course, diet: params.diet) r.save() redirect(action:"index") } def deleteRecipe() { def r = Recipes.get(params.ID) r.delete() redirect(action:"index") } def showRecipe() { def rec = Recipes.get(params.ID) [recipe: rec] } 的ist参数应该是您的连接标识符,第二个参数应该是您的 MYSQL语句

答案 3 :(得分:0)

您必须使字段和值动态化:

试试这个:

$_POST = array('image'=>'','blog_title'=>'yes','blog_description'=>'nothing');
foreach ($_POST as $key => $value) {
    if(!empty($value)){
        $fields .= $key.',';
        $values .= "'".$value."'".',';
    }
}
$fields = substr($fields, 0, -1);
$values = substr($values, 0, -1);
echo "INSERT INTO blogs($fields)values($values)";

答案 4 :(得分:0)

首先,在PHP脚本的最顶层开始会话,如下所示:

<?php
    session_start();
?>

现在问题来了。首先使用is_uploaded_file()函数检查文件是否上传,然后相应地处理您的表单。

所以你的代码应该是这样的:

$title=$_POST['blog_title'];
$result = str_replace(" ", "-", $title);
$description=$_POST['blog_description'];

if(is_uploaded_file($_FILES['image']['tmp_name'])){
    $name=$_FILES["image"]["name"];
    $type=$_FILES["image"]["type"];
    $size=$_FILES["image"]["size"];
    $temp=$_FILES["image"]["tmp_name"];
    $error=$_FILES["image"]["error"];
    $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));

    if($error > 0){
        die("error while uploading");
    }else{
        $permissible_extension = array("png", "jpg", "jpeg", "svg", "jpe");
        if(in_array($ext, $permissible_extension)){
            if(move_uploaded_file($temp,"upload/".$name)){
                $sql = mysql_query("INSERT INTO blogs(image,blog_title,blog_description)values('$name','$result','$description')");
                if($sql){
                    header("Location:blogimage.php");  
                    exit();
                }else{
                    echo "Insertion failed";
                }
            }else{
                echo "File couldn't be uploaded";
            }
        }else{
            echo "Invalid format";
        }
    }

}else{
    $sql = mysql_query("INSERT INTO blogs(blog_title,blog_description)values('$result','$description')");
    if($sql){
        header("Location:blogimage.php");  
        exit();
    }else{
        echo "Insertion failed";
    }
}

旁注:不使用mysql_*函数,从PHP 5.5开始不推荐使用它们,在PHP 7.0中完全删除它们。请改用mysqlipdoAnd this is why you shouldn't use mysql_* functions