簡體   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