Помощь требовала добавления эха в одну строку PHP-скрипта - PullRequest
1 голос
/ 01 апреля 2011

Я новичок, когда дело доходит до PHP, и у меня есть проблема, которую мне нужно решить, для веб-сайта, который должен начать работать завтра.

В основном я использовал скрипт загрузки javascript с именем 'uploadify', в котором была опция для папки загрузки, которая была добавлена ​​в скрипт в виде:

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

Я добавил php echo для возврата имени пользователя из логина PHP, чтобы оно добавлялось в путь к папке загрузки (у каждого пользователя есть собственная подпапка для загрузки в).

С новой версией скрипта uploadify опция папки была перемещена в отдельный PHP-файл, где она теперь находится в форме:

$targetFolder = '/songs/';

Мне нужно найти способ добавления переменной username к этой строке. Я пытался использовать эхо по-разному и гуглил, но это озадачило меня, как бы просто это ни было.

Если бы кто-нибудь мог дать мне знать, как я строю эту линию, я был бы очень благодарен. Время имеет значение, как говорится ...

Спасибо

Ник

Я подумал, что включу весь php, участвующий в случае, если это осветит, почему var session недоступен для 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 () ;. Как мне показалось, это может быть причиной проблемы, но я удалил эту строку, и переменная сеанса не передается в 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.';
    }
}
?>

uploadify.php упоминается в jquery.uploadify.js. Я думаю, что все эти строки актуальны:

uploader : 'uploadify.php',

upload_url  : settings.uploader,

case 'uploader':
                            swfuploadify.setUploadURL(settingValue);

Ответы [ 6 ]

1 голос
/ 01 апреля 2011

Предполагая, что у вас еще есть сеанс var для работы с ...

$targetFolder = '/songs/' . $_SESSION['name'];
1 голос
/ 01 апреля 2011

Может ли это быть так просто?

$targetFolder = '/songs/' . $_SESSION['name'];
0 голосов
/ 01 апреля 2011

Вы ищете оператор конкатенации ('.') :

$targetFolder = '/songs/'.$_SESSION["name"].'/';
0 голосов
/ 01 апреля 2011

Конкатенация

Просто используйте конкатенацию ....

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

Если вам нужен конечный слеш (поскольку раньше он работал без него, я не думаю, что вы это делаете), используйте:

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

Когда вы находитесь внутри скрипта PHP, добавление переменных в строку другой переменной тривиально - с помощью «.»Оператор точки, вы можете объединять или соединять строки.

Далее

Я бы также проверил, существует ли переменная имени сеанса, и, возможно, отменил бы или установил значение по умолчанию, если это не так.возможно

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

Это позволит активно найти новую папку для этого файла и не будет перезаписывать существующие папки.

Ссылки

Простое руководство здесь

Руководство по PHP

Как уже упоминалось выше , альтернативой является использование двойных кавычек и "{}" для достижения того же результата.Вы обнаружите, что использование двойных кавычек над одинарными кавычками может быть очень незначительно медленнее, потому что анализатор строк проверит, включили ли вы какие-либо переменные, и «расширит» их до их значения.Оба синтаксиса являются приемлемыми.

Проблема сеанса

Вот что я обычно делаю для передачи идентификатора сеанса

$('#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'
            });

Видите эти данные скрипта?Я в основном выводю идентификатор сессии, а затем передаю его на uploadify.php (ну, в моем примере не используется uploadify.php, который содержится в классе, но это то же самое)

0 голосов
/ 01 апреля 2011
$targetFolder = "/songs/{$_SESSION['name']}";

РЕДАКТИРОВАТЬ: Ваша проблема session_name.Если вы когда-либо используете это (что обычно не требуется), «вам необходимо вызывать session_name () для каждого запроса (и перед вызовом session_start () или session_register ())».

0 голосов
/ 01 апреля 2011

Пока имя пользователя хранится в переменной сеанса, убедитесь, что независимо от того, где находится сценарий $ targetFolder, запущен сеанс (session_start ()) и измените эту строку следующим образом:

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

Если $ _SESSION ['name'] = "foo", ваш путь теперь будет /songs/foo/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...