2012-02-09 4 views
0

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

добавил

$ пользователей должны оставаться статичной becaus он получает снова используется в дальнейшем в сценарии (это лишь малая часть)

$ user1 делает получить нужные данные он просто не получает передается на $ пользователей

добавил

это intire сценарий надежда, что помогает


<?php 


class SingleSignOn_Server 
{ 

public $links_path; 

protected $started=false; 

protected static $brokers = array(
    'FGPostbus' => array('secret'=>"FGPostbus123"), 
); 

protected static $users = array(); 

public function query_personen(){ 

mysql_connect('host','user','pass') or die("Kan helaas geen verbinding maken" . mysql_error()); 
mysql_select_db('db') or die("Kan geen database selecteren"); 
$sql = mysql_query('select p_gebruikersnaam, p_wachtwoord, p_id, p_md5 FROM personen'); 

    while ($row_user = mysql_fetch_assoc($sql)) { 
      self::$users[] = $row_user; 
    } 

} 

protected $broker = null; 


public function __construct() 
{ 
    if (!function_exists('symlink')) $this->links_path = sys_get_temp_dir(); 
} 


protected function sessionStart() 
{ 
    if ($this->started) return; 
    $this->started = true; 

    $matches = null; 
    if (isset($_REQUEST[session_name()]) && preg_match('/^SSO-(\w*+)-(\w*+)-([a-z0-9]*+)$/', $_REQUEST[session_name()], $matches)) { 
     $sid = $_REQUEST[session_name()]; 

     if (isset($this->links_path) && file_exists("{$this->links_path}/$sid")) { 
      session_id(file_get_contents("{$this->links_path}/$sid")); 
      session_start(); 
      setcookie(session_name(), "", 1); 
     } else { 
      session_start(); 
     } 

     if (!isset($_SESSION['client_addr'])) { 
      session_destroy(); 
      $this->fail("Not attached"); 
     } 

     if ($this->generateSessionId($matches[1], $matches[2], $_SESSION['client_addr']) != $sid) { 
      session_destroy(); 

      $this->fail("Invalid session id"); 
     } 

     $this->broker = $matches[1]; 
     return; 
    } 

    session_start(); 
    if (isset($_SESSION['client_addr']) && $_SESSION['client_addr'] != $_SERVER['REMOTE_ADDR']) session_regenerate_id(true); 
    if (!isset($_SESSION['client_addr'])) $_SESSION['client_addr'] = $_SERVER['REMOTE_ADDR']; 
} 


protected function generateSessionId($broker, $token, $client_addr=null) 
{ 
    if (!isset(self::$brokers[$broker])) return null; 

    if (!isset($client_addr)) $client_addr = $_SERVER['REMOTE_ADDR']; 
    return "SSO-{$broker}-{$token}-" . md5('session' . $token . $client_addr . self::$brokers[$broker]['secret']); 
} 


protected function generateAttachChecksum($broker, $token) 
{ 
    if (!isset(self::$brokers[$broker])) return null; 
    return md5('attach' . $token . $_SERVER['REMOTE_ADDR'] . self::$brokers[$broker]['secret']); 
} 


public function login() 
{ 
    $this->sessionStart(); 

    if (empty($_POST['p_gebruikersnaam'])) $this->failLogin("No user specified"); 
    if (empty($_POST['p_wachtwoord'])) $this->failLogin("No password specified"); 


    if (!isset(self::$users[$_POST['p_gebruikersnaam']]) || self::$users[$_POST['p_gebruikersnaam']]['p_wachtwoord'] != md5($_POST['p_wachtwoord'])) $this->failLogin("Incorrect credentials"); 

    $_SESSION['user'] = $_POST['p_gebruikersnaam']; 
    $this->info(); 
} 


public function logout() 
{ 
    $this->sessionStart(); 
    unset($_SESSION['user']); 
    echo 1; 
} 


public function attach() 
{ 
    $this->sessionStart(); 

    if (empty($_REQUEST['broker'])) $this->fail("No broker specified"); 
    if (empty($_REQUEST['token'])) $this->fail("No token specified"); 
    if (empty($_REQUEST['checksum']) || $this->generateAttachChecksum($_REQUEST['broker'], $_REQUEST['token']) != $_REQUEST['checksum']) $this->fail("Invalid checksum"); 

    if (!isset($this->links_path)) { 
     $link = (session_save_path() ? session_save_path() : sys_get_temp_dir()) . "/sess_" . $this->generateSessionId($_REQUEST['broker'], $_REQUEST['token']); 
     if (!file_exists($link)) $attached = symlink('sess_' . session_id(), $link); 
     if (!$attached) trigger_error("Failed to attach; Symlink wasn't created.", E_USER_ERROR); 
    } else { 
     $link = "{$this->links_path}/" . $this->generateSessionId($_REQUEST['broker'], $_REQUEST['token']); 
     if (!file_exists($link)) $attached = file_put_contents($link, session_id()); 
     if (!$attached) trigger_error("Failed to attach; Link file wasn't created.", E_USER_ERROR); 
    } 

    if (isset($_REQUEST['redirect'])) { 
     header("Location: " . $_REQUEST['redirect'], true, 307); 
     exit;   
    } 


    header("Content-Type: image/png"); 
    readfile("empty.png"); 
} 

public function info() 
{ 
    $this->sessionStart(); 
    if (!isset($_SESSION['user'])) $this->failLogin("Not logged in"); 

    header('Content-type: text/xml; charset=UTF-8'); 
    echo '<?xml version="1.0" encoding="UTF-8" ?>', "\n";  
    echo '<user identity="' . htmlspecialchars($_SESSION['user'], ENT_COMPAT, 'UTF-8') . '">'; 
    echo ' <p_id>' . htmlspecialchars(self::$users[$_SESSION['user']]['p_id'], ENT_COMPAT, 'UTF-8') . '</p_id>'; 
    echo ' <p_md5>' . htmlspecialchars(self::$users[$_SESSION['user']]['p_md5'], ENT_COMPAT, 'UTF-8') . '</p_md5>';   
    echo '</user>'; 
} 



protected function fail($message) 
{ 
    header("HTTP/1.1 406 Not Acceptable"); 
    echo $message; 
    exit; 
} 


protected function failLogin($message) 
{ 
    header("HTTP/1.1 401 Unauthorized"); 
    echo $message; 
    exit; 
} 
} 


if (realpath($_SERVER["SCRIPT_FILENAME"]) == realpath(__FILE__) && isset($_GET['cmd']))  { 
$ctl = new SingleSignOn_Server(); 
$ctl->$_GET['cmd'](); 
} 
+0

Хорошо, что значит "не работает" означает? Работает ли ваш запрос? Проводит ли он повторение результатов? – Vyktor

+0

Вы даже потребляете свой класс? Нет смысла писать чертежи, если вы не строите здание! – qJake

+0

Пожалуйста, определите, не работает. Что в итоге? – Iznogood

ответ

1

По крайней мере, вы, вероятно, хотите:

self::$users[] = $users1[$row_user['p_gebruikersnaam']] = $row_user; 

Так как есть вы, где замена ЗАПИСИ каждый раз и сохраняя только один.

+0

спасибо, но не решает мою проблему – Holapress

0

Вы строите массив как свойство объекта, но не используете экземпляр объекта. Вам нужно построить новый экземпляр ($usersObject = new ObjectName;), отбросить ключевые слова static, а вместо self:: использовать $this->. Вам также нужны квадратные скобки после self::$users, например: self::$users[].

+0

вы можете объяснить «вам нужно построить новый экземпляр ($ usersObject = new ObjectName;)», немного больше ? – Holapress

+0

+ $ пользователи должны быть статическими, потому что они снова используются позже. – Holapress

+0

Свойства не обязательно должны быть статическими, чтобы их можно было повторно использовать позже. Все, что 'static' делает, позволяет вам получить доступ к свойству или методу без создания экземпляра класса. –

0

не должны это self::$users = $users1[$row_user['p_gebruikersnaam']] = $row_user; быть:

array_push($this->users, $row_user) 
+0

, похоже, не работает – Holapress

0

Вы можете поместить непосредственно результат в массив:

while (false === ($row_user = mysql_fetch_array($sql, MYSQL_ASSOC))) 
    self::$users[$row_user['p_gebruikersnaam']] = $row_user; 
+0

все еще кажется, что $ users остается пустым, делая это, как это – Holapress

+0

, что не должно быть – sebataz

+0

вы получаете какую-либо ошибку mysql? является ли db населенным? – sebataz

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