帮助需要将echo添加到单行PHP脚本中

时间:2011-03-31 21:30:12

标签: php variables echo

对于PHP来说,我几乎是一个新手,并且有一个我需要解决的问题,对于一个必须明天上线的网站。

基本上我一直在使用名为'uploadify'的javascript上传脚本,该脚本有一个上传文件夹的选项,该文件已添加到脚本中:

'folder'    : '/songs/<?php echo $_SESSION["name"];?>',

我添加了php echo以从PHP登录名返回用户名,因此它被添加到上传文件夹的路径中(每个用户都有自己的子文件夹以便上传到)。

使用新版本的uploadify脚本,文件夹选项已移至单独的PHP文件中,现在它位于以下格式:

$targetFolder = '/songs/';

我需要找到一种方法来将username变量添加到此行。我已经尝试过以各种方式使用echo,然后用Google搜索,但它让我很难过,很简单。

如果有人能告诉我如何构建这条线,我将非常感激。时间至关重要,正如他们所说的......

谢谢,

尼克

我认为我会包含所有涉及的案例,这说明了为什么会话var对uploadify.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);

6 个答案:

答案 0 :(得分:1)

这可能是这么简单吗?

$targetFolder = '/songs/' . $_SESSION['name'];

答案 1 :(得分:1)

假设您仍然使用会话var ...

$targetFolder = '/songs/' . $_SESSION['name'];

答案 2 :(得分:0)

$targetFolder = "/songs/{$_SESSION['name']}";

编辑:您的问题是session_name。如果您使用它(通常不需要),“您需要为每个请求调用session_name()(并且在调用session_start()或session_register()之前)。”

答案 3 :(得分:0)

级联

只需使用连接....

$targetFolder = '/songs/' . $_SESSION['name'];

如果您需要一个尾随斜杠(因为它之前没有它我正常工作,我不认为你这样做),请使用:

$targetFolder = '/songs/' . $_SESSION['name'] . '/';

当你在PHP脚本中时,将变量添加到另一个变量的字符串是微不足道的 - 使用“。”点运算符,您可以连接或连接字符串。

另外

我还会检查会话名称变量是否存在,如果不存在,可能会取消或设置默认值。也许

if(!isset($_SESSION['name'])) 
  do { $_SESSION['name'] = microtime(); } while(!file_exists('songs/'.$_SESSION['name']));

这将主动为该文件找到一个新文件夹,它不会覆盖现有文件夹。

链接

A simple guide here

PHP Manual

如上所述,另一种方法是使用双引号和“{}”来实现相同的结果。您会发现使用单引号的双引号可能会非常慢,因为字符串解析器将检查您是否包含任何变量并将它们“展开”到它们的值。两种语法都可以接受。

会话问题

以下是我通常用来传输会话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,它包含在一个类中,但它是一样的)

答案 4 :(得分:-1)

您正在寻找concatenation operator ('.')

$targetFolder = '/songs/'.$_SESSION["name"].'/';

答案 5 :(得分:-2)

只要用户名存储在会话变量中,请确保$ targetFolder所在的脚本启动会话(session_start())并将该行更改为以下内容:

$targetFolder= "/songs/".$_SESSION['name'].'/';

如果$ _SESSION ['name'] =“foo”你的路径现在是/ songs / foo /.