我尝试使用$ _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();
}
}
}
答案 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上显示它然后取消设置它。因此,它不会在另一个页面刷新请求中看到。
希望这有帮助