2014-11-28 2 views
1

Я хочу передать значение ($ login) из файла cookie в $ dir. file.phpполучить значение из файла cookie в php-классе?

<?php 
class File { 
    public $filename; 
    public $login; 
    public $dir; 
    public function __construct() { 
     $this->login = $_COOKIE['login']; 
     this->dir = "userFiles/" . $this->login . "/"; 
     $createDir="./userFiles/".$login; 
     if (!is_dir($createDir)){ 
      mkdir($createDir,0777,true); 
     } 
     $action = isset($_POST['action']) ? $_POST['action'] : false; 
     $this->filename = isset($_POST['filename']) ? $_POST['filename'] : false; 
    } 
    private function save() { 
     $content = isset($_POST['content']) ? $_POST['content'] : ''; 
     file_put_contents($this->dir.$this->filename, urldecode($content)); 
    } 
} 
$file = new File(); 
?> 

Это весь код. имя файла и переменная действия передаются с помощью ajax с страницы index.php.

index.php Это главная страница, которая отправляет данные

<?php 
    if (! isset($_COOKIE['login'])) { 
     echo "Need to log in first"; 
     header("refresh:2;url=login.php"); 
     exit; 
    } 
?> 
<!doctype html> 
<html> 
<head> 
<title>Editor</title> 
</head> 
<body> 
    <textarea id="code" name="code">code goes here</textarea> 
<br/><button id="save">save</button> 
<input type="text" id="filename" value="test.txt"><br> 
<script src="JavaScript/jquery.js"></script> 
<script> 
var url = 'file.php'; 
$("#save").click(function() { 
    $.ajax({ 
     url : url, 
     type: 'post', 
     xhrFields: { 
    withCredentials: true 
    }, 
     data : { 
      filename : $("#filename").val(), 
      action : 'save', 
      content : encodeURIComponent($('#code').val()) 
     } 
    }); 
}); 
</script> 
</body> 
</html> 
+0

Почему вы пытаетесь присвоить '$ login' дважды? просто объявите логин следующим образом: 'public $ login' Также назначьте dir в конструкторе! – Rizier123

+0

BTW: Вы забыли знак '$', где вы назначаете $ dir! – Rizier123

+0

@ Rizier123 Я добавил знак $. создает папку userFiles, но внутри нее создается внутренняя папка $ login, и она не сохраняет файл внутри. – zeee9

ответ

3

Это должно работать для вас:

(Вы только можете назначить constant values для class members в class definition Так у вас есть для присвоения его в constructor или в function! Также вы должны использовать $this-> для доступа к переменной этого класса)

В качестве примера:

class File { 
    public $filename; 
    public $login; //problem here 
    public $dir; // $login is not getting here. It works if I remove $login. 

    public function __construct() { 
     $this->login = $_COOKIE['login']; 
     $this->dir="userFiles/".$this->login."/"; 
    } 
} 

$obj = new File(); 
echo $obj->login . "<br />"; 
echo $obj->dir; 

Так весь ваш код должен выглядеть примерно так:

class File { 

    public $filename; 
    public $login; 
    public $dir; 

    public function __construct() { 
     $this->login = $_COOKIE['login']; 
     $this->dir = "userFiles/" . $this->login . "/"; 

     if (!is_dir($createDir)){ 
      mkdir($createDir,0777,true); 
     } 

    } 

} 

Для получения дополнительной информации см: http://php.net/manual/en/language.oop5.properties.php

+0

Код еще не работает. Я включил полный код выше. попробуйте помочь, потому что я пытался отладить это более часа. – zeee9

+0

@ zeee9 Вы уверены, что используете свой файл cookie? Также я расширил свой пример (первое поле кода), чтобы проверить его! Он должен работать. – Rizier123

+0

это не сработало. Я включил index.php. – zeee9

Смежные вопросы