[英]Help needed adding echo to single line of PHP script
对于PHP,我几乎是一个新手,对于明天必须上线的网站,我需要解决一个问题。
基本上,我一直在使用名为“ uploadify”的javascript上传脚本,该脚本具有一个选项,用于将上载文件夹添加到以下形式的脚本中:
'folder' : '/songs/<?php echo $_SESSION["name"];?>',
我添加了php echo以从PHP登录名返回用户名,因此将其添加到了上载文件夹的路径中(每个用户都有自己的上载子文件夹)。
在新版本的uploadify脚本中,文件夹选项已移动到一个单独的PHP文件,该文件现在处于以下格式:
$targetFolder = '/songs/';
我需要找到一种将用户名变量添加到此行的方法。 我尝试过以各种方式使用echo,并在Google上搜索了一下,但它使我很困惑,尽管可能如此简单。
如果有人能让我知道我如何构造这条线,我将非常感激。 正如他们所说,时间至关重要。
谢谢,
缺口
我以为我会包括所有涉及的php,以防万一这说明了为什么无法使用session var上传ify.php。
首先,在index.php页面的顶部有这个:
<?
require("log.php");
?>
哪个触发log.php:
<?
session_name("MyLogin");
session_start();
if($_GET['action'] == "login") {
$conn = mysql_connect("","",""); // your MySQL connection data
$db = mysql_select_db(""); //put your database name in here
$name = $_POST['user'];
$q_user = mysql_query("SELECT * FROM USERS WHERE login='$name'");
if(mysql_num_rows($q_user) == 1) {
$query = mysql_query("SELECT * FROM USERS WHERE login='$name'");
$data = mysql_fetch_array($query);
if($_POST['pwd'] == $data['password']) {
$_SESSION["name"] = $name;
header("Location: http://monthlymixup.com/index.php"); // success page. put the URL you want
exit;
} else {
header("Location: login.php?login=failed&cause=".urlencode('Wrong Password'));
exit;
}
} else {
header("Location: login.php?login=failed&cause=".urlencode('Invalid User'));
exit;
}
}
// if the session is not registered
if(session_is_registered("name") == false) {
header("Location: login.php");
}
?>
(我已经从中删除了MySql信息)
然后调用login.php,该php的顶部位于顶部(随后是表单的html):
<?
session_name("MyLogin");
session_start();
session_destroy();
if($_GET['login'] == "failed") {
print $_GET['cause'];
}
?>
其中包括session_destroy();。 我以为可能是造成问题的原因,但是我删除了这一行,并且会话var没有传递给uploadify.php(为什么它可以在index.php中使用,因为它在这里被销毁了?)。 uploadify.php当前如下所示:
<?php
session_start()
print_r($_SESSION);
$targetFolder = '/songs/' . $_SESSION['name']; // Relative to the root
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') .'/'. $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('m4a','mp3','flac','ogg'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo '1';
} else {
echo 'Invalid file type.';
}
}
?>
在jquery.uploadify.js中引用了uploadify.php。 我认为所有这些都是相关的:
uploader : 'uploadify.php',
upload_url : settings.uploader,
case 'uploader':
swfuploadify.setUploadURL(settingValue);
可以这么简单吗?
$targetFolder = '/songs/' . $_SESSION['name'];
假设您仍然可以使用会话变量...
$targetFolder = '/songs/' . $_SESSION['name'];
$targetFolder = "/songs/{$_SESSION['name']}";
编辑:您的问题是session_name
。 如果您曾经使用过它(通常不需要),那么“您需要为每个请求都调用session_name()(并且在session_start()或session_register()被调用之前)。”
只需使用串联...。
$targetFolder = '/songs/' . $_SESSION['name'];
如果您需要结尾的斜杠(因为它在没有它之前就可以正常工作了,所以我认为您没有),请使用:
$targetFolder = '/songs/' . $_SESSION['name'] . '/';
在PHP脚本中时,将变量添加到另一个变量的字符串中很简单-使用“。” 点运算符,您可以串联或连接字符串。
我还将检查会话名称变量是否存在,如果不存在,则取消或设置默认值。 也许
if(!isset($_SESSION['name']))
do { $_SESSION['name'] = microtime(); } while(!file_exists('songs/'.$_SESSION['name']));
这将为该文件主动找到一个新文件夹,并且不会覆盖现有文件夹。
如上所述 ,一种替代方法是使用双引号和“ {}”来获得相同的结果。 您会发现,使用双引号而不是单引号会稍微慢一点,因为字符串解析器将检查是否包含任何变量并将它们“扩展”到它们的值。 两种语法都是可以接受的。
这是我通常要转移的会话ID
$('#file_upload').uploadify({
'uploader': '/prototype/site/assets/template/swf/uploadify.swf',
'script': '/prototype/jobs/filemanager/upload',
'cancelImg': '/prototype/site/assets/template/images/cancel.png',
'auto': true,
'multi': false,
'fileDesc': 'Portable Document Format *.pdf',
'fileExt': '*.pdf',
'buttonText':'Upload',
'onComplete': load_list,
'scriptAccess':'always',
'checkScript':'/jobs/filemanager/check',
'scriptData': {'session_id':'<?php echo session_id()?>'},
'queueID':'queue'
});
看到脚本数据了吗? 我基本上输出了会话ID,然后将其传递给uploadify.php(好吧,我的示例不使用uploadify.php,它包含在类中,但是是同一回事)
您正在寻找连接运算符('。') :
$targetFolder = '/songs/'.$_SESSION["name"].'/';
只要将用户名存储在会话变量中,请确保$ targetFolder所在的脚本都已启动了会话(session_start()),并将该行更改为以下内容:
$targetFolder= "/songs/".$_SESSION['name'].'/';
如果$ _SESSION ['name'] =“ foo”,则您的路径现在为/ songs / foo /。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.