2016-02-04 33 views
4

我試圖創建簡單的服務器端驗證數據,這是我的方法

public function create() { 
     $name = $_POST['name']; 

     session_start(); 
     unset($_SESSION['errors']); 

     $count = $this->model->checkIfUserExists($name); 
     if($count > 0) {  
      $_SESSION['errors'] = array(
       'message' => 'User Already Exists', 
       'variables' => array(
        'name'  => $_POST['name'], 
        'password' => $_POST['password'], 
       ), 
      ); 

      header('location: ' . URL . 'user/registration'); 
      exit; 
     }   

     $data = array(); 
     $data['name'] = $_POST['name']; 
     $data['password'] = $_POST['password']; 
     $this->model->create($data);    
     header('location: ' . URL); 
    } 

和下面的代碼從registration.php的

<?php 

if (isset($_SESSION['errors']) && count($_SESSION['errors']) > 0) { 

echo '<ul>'; 
foreach ($_SESSION['errors'] as $error) { 
    echo '<li>' . $error['message'] . '</li>'; 
} 
echo '</ul>'; 
unset($_SESSION['errors']); 
} 
?> 

但我得到的錯誤

Warning: Illegal string offset 'message' in C:\xampp\htdocs\test\views\user\registration.php on line 6 
� 

Notice: Undefined index: message in C:\xampp\htdocs\test\views\user\registration.php on line 6 

如何解決?

+0

你可以嘗試的你的var_dump' $ _SESSION ['錯誤']'? – Gwendal

+0

是的,我做了'var_dump($ _ SESSION ['errors']);'工作。結果:'array(2){[「message」] => string(19)「User already already exists」[「variables」] => array(2){[「name」] => string(5) ['password'] => string(5)「admin」}}' – Heidel

+0

這兩個文件請在'<?php'後面寫'session_start();'然後檢查一次 –

回答

5

通常,Warning: Illegal string offset ...意味着您正在嘗試以字符串的形式訪問字符串。

目前,您正在將$_SESSION['errors']設置爲具有兩個元素messagevariables的關聯數組。我相信你試圖實現的是創建一個有多個錯誤的陣列,每個錯誤有一個messagevariables

設置像這樣應該做的:

... 

$_SESSION['errors'] = array(); 

if ($count > 0) { 
    $_SESSION['errors'][] = array(
     'message' = > 'User Already Exists', 
     'variables' = > array(
      'name' = > $_POST['name'], 
      'password' = > $_POST['password'], 
     ), 
    ); 

    header('location: '.URL.'user/registration'); 
    exit; 
} 

... 

空方括號中添加新元素添加到數組:

$myArray[] = $myNewElement; 

這樣你就可以很容易地添加到列表中的其他錯誤

$_SESSION['errors'][] = array(
    'message' = > 'Error two', 
    'variables' = > array(...), 
); 
$_SESSION['errors'][] = array(
    'message' = > 'Error three', 
    'variables' = > array(...), 
); 
+0

你能解釋我如何創建不同的錯誤的數組不同的情況嗎?我想添加其他情況但我不明白如何收集不同的錯誤,然後在頁面上顯示它們。 – Heidel

+0

我將它添加到答案。希望它有幫助! – Timo

+0

如何爲不同的錯誤添加不同的名稱,並讓它們在頁面? – Heidel

0

這是因爲每個都穿過主陣列中的項目。 [ 「消息」, 「變量」]

分配$_SESSION['errors'] =這樣的:$_SESSION['errors'][] =

$_SESSION['errors'][] = array(
        'message' => 'User Already Exists', 
        'variables' => array(
         'name'  => $_POST['name'], 
         'password' => $_POST['password'], 
        ), 
       ); 
0

registration.php的在第一次啓動會議session_start()

<?php 
session_start(); 
if (isset($_SESSION['errors']) && count($_SESSION['errors']) > 0) { 

echo '<ul>'; 
foreach ($_SESSION['errors'] as $error) { 
    echo '<li>' . $error['message'] . '</li>'; 
} 
echo '</ul>'; 
unset($_SESSION['errors']); 
} 
?> 
+0

我已經在我的** header.php **文件中添加了'session_start()' – Heidel

+0

開始單個頁面。 –

+0

我收到錯誤'注意:會話已經開始 - 忽略第2行中C:\ xampp \ htdocs \ test \ views \ user \ registration.php中的session_start() – Heidel

相關問題