2013-03-01 41 views
0

你好,感謝你的時間。HTML表格似乎沒有發佈到PHP

無論研究的數量如何,我都找不到已經討論過的解決方案。

問題是,提交按鈕自動重定向,看似沒有張貼表單。它一直工作,直到我從MySQL函數轉換爲MySQLi。其他一切正在工作,但這部分的網站。

HTML表單(myaccount.inc.php):

<div id="change-password"> 

<form class="clearfix" action="" method="post"> 

     <div><span class="he1">Change Password</span></div> 

     <div> 
      <?php include_once 'controllers/accountController.php'; ?> 
     </div> 

     <div><label class="fieldlabel" for="password">Current Password:</label></div> 
     <input type="password" name="password" id="password" size="23" /><br /> 

     <div><label class="fieldlabel" for="passwordnew1">New Password:</label></div> 
     <input type="password" name="passwordnew1" id="passwordnew1" size="23" /><br /> 

     <div><label class="fieldlabel" for="passwordnew2">Confirm New Password:</label></div> 
     <input type="password" name="passwordnew2" id="passwordnew2" size="23" /><br /> 

     <input type="submit" name="submit" value="Change Password" class="bt_changepass" /> 

</form> 

</div> 

這種形式的話,由於缺乏一個更好的詞,被一些PHP控制。

PHP(accountController.php):

// Checking whether the Password Change form has been submitted. 
if(isset($_POST['submit'])=='Change Password') 
{ 
echo "<br />"; 

// Get the data from the database. 
$sql = $mysqli->query("SELECT * FROM ss_members WHERE usr = '".$_SESSION['usr']."' AND pass = '".md5($_POST['password'])."'"); 
$row = $sql->fetch_assoc(); 

// Will hold our errors 
$err = array(); 

if($_POST['password'] == "" || $_POST['passwordnew1'] == "" || $_POST['passwordnew2'] == "") 
{ 
    $err[] = 'All the fields must be filled in!'; 
} 

if(!$row['pass'] == md5($_POST['password']) && $_POST['passwordnew1'] != "" && $_POST['passwordnew2'] != "") 
{ 
    $err[] = 'Current password is not correct!'; 
} 

if($_POST['passwordnew1'] <> $_POST['passwordnew2']) 
{ 
    $err[] = 'New passwords do not match!'; 
} 

if(!count($err)) 
{ 
    if($row['usr']) 
    { 
     // If everything is OK change password. 
     $stmt = $mysqli->prepare("UPDATE ss_members SET pass = md5(?) WHERE usr = {$_SESSION['usr']}"); 
     $stmt->bind_param('s', $_POST['passwordnew1']); 
     $stmt->execute(); 
     $stmt->close(); 

     echo "Password has been sucessfully updated!<br />"; 
    } 
    else 
    { 
     $err[]='Something broke!'; 
    } 
} 

if($err) 
{ 
    // Save the error messages in the session. 
    foreach($err as $error) 
    { 
     echo $error . "<br />"; 
    } 
} 

echo "<br />"; 
} 
+0

您的代碼看起來也馬車第一

必須行動<形式行動= 「的AccountController」>。其他的事情是你的代碼容易受到XSR攻擊。請將驗證過程移到SQL語句上方。在這種情況下使用PDO也是讚賞而不是mysql(Select Statement)。並且使用佔位符而不是直接請求變量也可以提高代碼的完整性。 – 2013-03-01 06:06:21

+0

是accountController.php一個網頁或包含? – 2013-03-01 07:14:49

回答

1

問題是要包括的

<?php include_once 'controllers/accountController.php'; ?>

標題發送後。

您可以移動

<?php include_once 'controllers/accountController.php'; ?>

到頁面的頂部,處理器部分的內部,也可以使用表單提交給

controllers/accountController.php

<form class="clearfix" action="controllers/accountController.php" method="post">

4

。在你的<form>標籤沒有action集,它是將數據發送到同一個文件。即,myaccount.inc.php

將其更改爲:

<form class="clearfix" action="accountController.php" method="post"> 
+1

因此,發送數據到相同的html – martriay 2013-03-01 05:58:04

+0

這絕對使它發佈,但它似乎在accountController錯誤。 致命錯誤:調用第9行A:\ wamp \ www \ path \ controllers \ accountController.php中的非對象上的成員函數query() – 2013-03-01 06:02:45

+0

@JoshMiller - 您忘記創建對象('new mysqli ..'''mysqli'類。 – Rikesh 2013-03-01 06:06:26

1

試試這個:

給表單動作accountController.php

<form class="clearfix" action="accountController.php" method="post">

+0

這不會解決或更改任何內容。 – 2013-03-01 05:59:40

+0

@IvanIvković:解釋爲什麼不呢? – 2013-03-01 06:02:28

+0

因爲空行爲仍然將表單發送到當前查看頁面。我認爲accountController.php不是一個網頁,它是一個腳本,是網頁的一部分。 – 2013-03-01 06:55:25

1

將您的action更改爲此,因爲accountController.php存在於controllers文件夾內。

<form class="clearfix" action="controllers/accountController.php" method="post"> 
1

mysqli的一類,而它的功能查詢不是靜態的,所以在那裏,你必須聲明的mysqli類的實例可以使用$mysqli->query之前。

你應該把

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

$sql = $mysqli->query("SELECT * FROM ss_members WHERE usr = '".$_SESSION['usr']."' AND pass = '".md5($_POST['password'])."'"); 
+0

$ mysqli是在另一個文件中定義的,它包含在父文件。 html表單和accountController都可以訪問數據庫,並通過mysql_ping()進行驗證。 – 2013-03-01 06:36:49

+0

你會得到什麼錯誤? – 2013-03-01 07:02:26

+0

而不是跟在頁眉之後,它會直接重定向到索引。 – 2013-03-01 07:03:54