2017-02-23 46 views
1

變量似乎爲空if語句,但它不能爲空變量似乎爲空if語句,但它不是空

嗨,我是新來的PHP和我試圖做一個簡單的網站,在這裏我可以登錄,註銷並更改我的密碼。該代碼都可以工作,但我有一些向用戶打印錯誤消息的問題。

在更改我的密碼的網站上,我有一個帶有3個輸入字段的表單,第一個插入舊密碼,第二個插入新密碼,最後一個確認新密碼。

代碼:

<form action="changepw.php" method="post"> 
    <input id="oldPassword" type="password" class="form-control" name="oldPassword" placeholder="Aktuelles Passwort" required=""> 
    <input id="password" type="password" name="password" class="form-control" placeholder="Neues Passwort" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}" required=""> 
    <input id="password2" type="password" name="password2" class="form-control" placeholder="Passwort wiederholen" required=""> 
    <button type="submit" class="btn btn-info c-btn">Passwort wechseln</button> 
</form> 

我的PHP代碼如下開始:

$error = ''; 
session_start(); 
if(isset($_SESSION['loggedin'])){ 
    changepassword(); 
} 
else { 
    header('Location: index.php'); 
} 

在功能changepassword(),我檢查,如果提交表單時,如果是的,我的密碼繼續更改。如果來自oldPassword輸入字段的輸入與數據庫中的密碼不匹配,則變量$error將被設置爲'錯誤密碼'(此工作正常,我使用echo進行了測試)。當我

<?php 
if(!empty($error)){ 
    echo "<div class='alert alert-danger' role='alert'>$error</div>"; 
} 
?> 

的問題是,$error似乎每次都爲空,甚至:

在HTML後來,我把這段代碼打印錯誤消息,如果它不是空的設置錯誤信息。

奇怪的是,我在我的登錄文件中使用這種方法的確切原因,以檢查密碼是否正確,並且其工作沒有任何問題。

+2

看起來像一個範圍問題,你改變函數內的$ error的值,但在全局範圍內它仍然是空的。 – JrmC

回答

2

看起來好像你在你的changepassword()功能的範圍定義新$error變量,而不是修改你在腳本開始處設置的一個。

,使其成爲可以通過添加global $error;到功能開始使用函數內部$error變量:

function changepassword() { 
    global $error; 
    // other code here... 
} 

應當注意的是,使用全局變量是不鼓勵這樣一個更好的解決辦法是從你的changepassword()函數返回的錯誤信息,像這樣:變量範圍

function changepassword() { 
    // other code here... 
    return $error; 
} 

// call like this: 
$error = changepassword(); 

更多信息,請here

+0

這是爲我做的!我在函數結尾使用了返回的方式。只需要在函數的開頭添加'$ error =「」',因爲它會在網站上打印一條通知,說明$ error在提交表單之前返回時沒有被定義。但現在它的作品,謝謝:) – TeemoBiceps

+0

很高興我可以幫助:) – Gondrup

0

這應該是

echo "<div class='alert alert-danger' role='alert'>".$error."</div>"; 

(看周圍的變量的報價和點)

+1

不,您可以在沒有點的雙引號中使用變量。如果我使用單引號,它不會像那樣工作,但是它帶有雙引號。 – TeemoBiceps