繁体   English   中英

需要帮助将回声添加到PHP脚本的单行中

[英]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']));

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

链接

这里的简单指南

PHP手册

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

会话问题

这是我通常要转移的会话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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM