来自另一个没有包含或会话的文件的PHP变量

时间:2018-04-19 06:02:15

标签: php ajax

我尝试使用$ _SESSION并包含,没有一个有效。我正在做的是将图像上传到我的服务器。使用Ajax运行名为upload.php的文件,其中包含上传脚本。当文件上传时,我想将文件名传递给我的main.php页面以用作php变量。包含只会抛出未定义变量的错误,会话就不会起作用。

的Ajax

$(document).ready(function(){
    $(document).on('change', '#file', function(){
        var name = document.getElementById("file").files[0].name;
        var form_data = new FormData();
        var ext = name.split('.').pop().toLowerCase();

        var oFReader = new FileReader();
        oFReader.readAsDataURL(document.getElementById("file").files[0]);
        var f = document.getElementById("file").files[0];
        var fsize = f.size||f.fileSize;

        if(fsize < 4000000)
        {
            form_data.append("file", document.getElementById('file').files[0]);

            $.ajax({
                url:"upload.php",
                method:"POST",
                data: form_data,
                contentType: false,
                cache: false,
                processData: false,
                success:function(data)
                {
                    $('#image_upload_info').html(data);
                }
            });
        }
    });

部分上传脚本,$ imagenameupload是我想传递回main.php页面的变量

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo '<div class="container">';
            echo '<div class="row">';
                echo '<div class="col-md-8">';
                    echo '<div class="alert alert-success">';
                    echo "Pilt: ". basename( $_FILES["file"]["name"]). " on lisatud!";
                    move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
                    echo '</div>';
                echo '</div>';
            echo '</div>';
        echo '</div>';
        $imageNameUpload = basename( $_FILES["file"]["name"]);
    } 

修改 我之前解释过一点。我希望能够将所述变量插入到包含其他数据的数据库中。继承了更多代码。

SQL INSERT

if(isset($_POST['submit'])){
        date_default_timezone_set('Europe/Tallinn');
        $typeSelector = $_POST['typeSelector'];
        if (isset($_POST['regionSelector']) ? $_POST['regionSelector'] : null) {
            $checkBox = implode(',', $_POST['regionSelector']);
        }

        if(isset($_SESSION['imageNameUpload'])) {
            $uploadedPic = $_SESSION['imageNameUpload'];
        }

        $now = new DateTime();
        $timestring = $now->format('d.m.Y H:i');
        $_POST = array_map('stripslashes', $_POST);
        //$_POST = json_decode(stripslashes(json_encode($_POST)), true);
        extract($_POST);
        if($title ==''){
            $error[] = 'Pealkiri on puudu.';
        }
        if($newstext ==''){
            $error[] = 'Uudise sisu on puudu.';
        }
        if ($checkBox == '') {
            $error[] = 'Regioon on puudu.';
        }
        if(!isset($error)){
            try {
                $stmt = $db->prepare('INSERT INTO news (title,shortdesc,newstext,tag,region,publish_date,imageName) VALUES (:title, :shortdesc, :newstext, :tag, :region, :publish_date, :imageName)') ;
                $stmt->execute(array(
                    ':title' => $title,
                    ':shortdesc' => $shortdesc,
                    ':newstext' => $newstext,
                    ':tag' => $typeSelector,
                    ':region' => $checkBox,
                    ':imageName' => $imageName,
                    ':publish_date' => $timestring
                ));
                header('Location: index.php?news=addednews');
                exit;
            } catch(PDOException $e) {
                echo $e->getMessage();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

在upload.php中

首先,您必须通过session_start()启动seeion; 直接打开PHP&#39;标记&#39; ()

然后您必须将变量保存到会话中。 你可以这样做,

$_SESSION['imageNameUpload'] = $imageNameUpload;

对于main.php

在另一个文件中你还必须使用session_start();在第一次之后

然后你可以通过$ imageNameUpload = $ _SESSION [&#39; imageNameUpload&#39;];来访问旧变量。

您现在还可以在main.php文件中使用$ imageNameUpload。但是你只能在它被设置的情况下使用它(你之前在第一个文件的位置)。

upload.php的

<?php
session_start();

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
        echo '<div class="container">';
            echo '<div class="row">';
                echo '<div class="col-md-8">';
                    echo '<div class="alert alert-success">';
                    echo "Pilt: ". basename( $_FILES["file"]["name"]). " on lisatud!";
                    move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
                    echo '</div>';
                echo '</div>';
            echo '</div>';
        echo '</div>';
        $imageNameUpload = basename( $_FILES["file"]["name"]);
        $_SESSION['imageNameUpload'] = $imageNameUpload;
    } 

main.php

<?php
session_start();
if(isset($_SESSION['imageNameUpload'])) {
    $imageNameUpload = $_SESSION['imageNameUpload'];
} 

// Other content of file
?>

如果您不希望在图片上传后刷新页面,只想显示上传的图片名称而不刷新页面

然后,更改upload.php

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
    $imageNameUpload = basename( $_FILES["file"]["name"]);

    $data = '<div class="container"><div class="row"><div class="col-md-8"><div class="alert alert-success">Pilt: '. $imageNameUpload. ' on lisatud!</div></div></div></div>';
    echo $data;
    exit();
}

如果你想刷新页面,那么在main.php上显示图像名称。在这种情况下,你必须在会话中存储数据,如上所述。并在ajax成功块中添加页面刷新语句。并检查main.php是否isset $ imageNameUpload varible然后首先在html上显示它然后取消设置它。因此,它不会在另一个页面刷新请求中看到。

希望这有帮助