PHP未定义索引(由jquery文件上传引起)

时间:2016-04-04 09:32:27

标签: javascript php jquery jquery-file-upload

我一直在尝试为我正在处理的网站上传文件上传工作。我在一个表格之外做这个,经过几天的搜索,我终于找到了适合我的方法的东西this question:

问题是,只要我将代码应用到我自己的脚本中,就会出现“未定义索引”错误,当我删除它时,一切都很顺利。

这是我的代码:

HTML

<div class='error-msg'></div>
<input type='text' id='newsitem-message' />
<input type='file' id='newsitem-thumbnail' />
<div class='submit' onclick='newsItem(\"insert\");'>Post news</div>

的jQuery

function newsItem(action){
    var thumbnail = $('#newsitem-thumbnail')[0].files[0];
    var fileReader = new FileReader();
    fileReader.readAsText(thumbnail, 'UTF-8');
    fileReader.onload = shipOff;

    function shipOff(e){
        var r = e.target.result;
        if(action == "insert"){
            $.post("requestPages/newsitems.php", {message:$("#newsitem-message").val(),
                                              thumbnail:thumbnail.name,
                                              action:action,
                                              data:r},
            function(result){
                console.log(result);
                console.log(r); //This freezes my console/inspector window, forcing me to restart the browser-tab
                if(result == "succes"){
                    window.location.reload();
                }else{
                    $(".error-msg").html(result);
                }
            });
        }else if(action == "delete"){
            //To be implemented when I get the submit working D:
        }
    }
}

PHP(请原谅一塌糊涂 - 需要认真清理)

<?php
    include("../assets/libs/SQLLib.php");
    DB_Connect("test");

    echo print_r($_POST);
    echo var_dump($_POST);
    $message = $_POST['message'];
    $action = $_POST['action'];
    $thumbnail = $_POST['thumbnail'];
    $data = $_POST['data'];

    $serverFile = time().$thumbnail;
    $fp = fopen('../assets/images/thumbnails/'.$serverFile, 'w');
    fwrite($fp, $data);
    fclose($fp);
    $returnData = array("serverFile" => $serverFile);
    echo json_encode($returnData);

    if($_POST['message'] != ""){
        $canPost = true;
    }else{
        echo "The message can not be empty.";
    }

    if($action == "insert" && $canPost){
        $sql = "insert into newsitems
                (date, message, thumbnail)
                values
                (NOW(),'".$message."', '".$thumbnail."')";
        $result = mysql_query($sql);
        if(!$result){
            echo "Uh-oh! Something went wrong while posting the news! ".mysql_error();
        }else{
            echo "succes";
        }
    }else if($action == "delete"){
        $sql = "";
    }
?>

有人看到这里出了什么问题吗?或者有没有人有其他选择?

我希望有人可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

像这样改变:

include("../assets/libs/SQLLib.php");
DB_Connect("test");

print_r($_POST); //Dont echo, what is already echoed
var_dump($_POST); //Dont echo, what is already echoed
$message = !empty($_POST['message'])?$_POST['message']:'';
$action = !empty($_POST['action'])?$_POST['action']:'';
$thumbnail = !empty($_POST['thumbnail'])?$_POST['thumbnail']:'';
$data = !empty($_POST['data'])?$_POST['data']:'';
if(!empty($thumbnail) && !empty($data)){

$serverFile = time().$thumbnail;
    $fp = fopen('../assets/images/thumbnails/'.$serverFile, 'w');
    fwrite($fp, $data);
    fclose($fp);
    $returnData = array("serverFile" => $serverFile);
    echo json_encode($returnData);
} else {
echo json_encode(array('error'=>'No data and thumbnail assigned'));
}

if($message != ""){
    $canPost = true;
}else{
    echo "The message can not be empty.";
}

if($action == "insert" && $canPost){
    $sql = "insert into newsitems
            (date, message, thumbnail)
            values
            (NOW(),'".$message."', '".$thumbnail."')";
    $result = mysql_query($sql);
    if(!$result){
        echo "Uh-oh! Something went wrong while posting the news! ".mysql_error();
    }else{
        echo "success";
    }
}else if($action == "delete"){
    $sql = "";
}

同样,您只需要更改.htaccess或php中的错误报告级别,以防止显示警告消息。在.htaccess中:

php_flag error_reporting E_ERROR

如果在.php文件中,那么

<?php error_reporting(E_RROR); //This displays only Errors, no warning and notices.

答案 1 :(得分:0)

所以最后我选择了完整的jQuery上传,然后去了别的东西。 我现在纯粹通过PHP调用上传文件,而不是jQuery post事件,旁边有一个小的JavaScript检查,以查看表单是否可提交。

代码:

HTML

<div class='error-msg'></div>
<form method='post' action='requestPages/newsitems.php' enctype='multipart/form-data'>
    News message
    <textarea id='newsitem-message' name='newsitem-message' onchange='checkFormSubmit()'/>
    <input type='file' name='newsitem-thumbnail' id='newsitem-thumbnail' />
    <input hidden type='text' value='insert' name='newsitem-action'/>
    <input class='submit' id='newsitem-submit' type='submit' value='Post news' disabled/>
</form>

PHP

<?php
include("../assets/libs/SQLLib.php");
    DB_Connect("test");

    var_dump($_FILES);
var_dump($_POST);

$message = $_POST['newsitem-message'];
$action = $_POST['newsitem-action'];
$errors= array();
$hasFile = false;

if($action == "insert"){
    echo ($_FILES['newsitem-thumbnail'][0] == UPLOAD_ERR_NO_FILE);
    if(isset($_FILES['newsitem-thumbnail']) && $_FILES['newsitem-thumbnail']['error'] != UPLOAD_ERR_NO_FILE){
        $file_name = $_FILES['newsitem-thumbnail']['name'];
        $file_size =$_FILES['newsitem-thumbnail']['size'];
        $file_tmp =$_FILES['newsitem-thumbnail']['tmp_name'];
        $file_type=$_FILES['newsitem-thumbnail']['type'];
        $file_ext=strtolower(end(explode('.',$_FILES['newsitem-thumbnail']['name'])));

        $extensions= array("jpeg","jpg","png");

        if(!in_array($file_ext,$extensions)){
            $errors[]="extension not allowed, please choose a JPEG or PNG file.";
        }
        $hasFile = true;
    }
    if(empty($errors)){
        $sql = "insert into newsitems
                (date, message, thumbnail)
                values
                (NOW(),'".$message."', '".$file_name."')";
        $result = mysql_query($sql);
        if(!$result){
            echo "Uh-oh! Something went wrong while posting the news! ".mysql_error();
        }else{
            if($hasFile){
                if(!move_uploaded_file($file_tmp,"../assets/images/thumbnails/".$file_name)){
                    echo "Moving the file failed!";
                }
            }
        }
    }else{
        print_r($errors);
    }
}else if($action == "delete"){
    $sql = "";
}
?>

的JavaScript

function checkFormSubmit(){
    if($.trim($('#newsitem-message').val()) != ""){
        $('#newsitem-submit').prop('disabled', false);
    }else{
        $('#newsitem-submit').prop('disabled', true);
    }
}

答案 2 :(得分:0)

希望你尝试过使用过 isset($_POST)isset($_POST['message'])如果您收到“通知:未定义索引:消息”。