2017-02-18 19 views
-1

私は趣味のウェブサイトのパスワードリセットフォームを作成しています。フォーム自体は美しく動作しています。私はDreamweaver CS5を使用しています。これは私の質問に関係するコードです。ユーザー名が存在しない場合ユーザーをページにリダイレクト

パスワードリセットが何らかの理由で失敗した場合は、そのユーザーを特定のページにリダイレクトする必要があります。私は、Dreamweaverがそれを生成した方法で、どこで、どのようにして文中で行うのかはわかりません。

これはコードのすべてではなく、問題はセキュリティとは関係ありません。おかげさまです。

$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1_reset")) { 

$password_md5 = md5($_POST['password']); 

$updateSQL = sprintf("UPDATE users SET password=%s WHERE username=%s AND email=%s AND security=%s", 
        GetSQLValueString($password_md5, "text"), 
        GetSQLValueString($_POST['username'], "text"), 
        GetSQLValueString($_POST['email'], "text"), 
        GetSQLValueString($_POST['security'], "text")); 

mysql_select_db($database_login_form, $login_form); 
$Result1 = mysql_query($updateSQL, $login_form) or die(mysql_error()); 

$updateGoTo = "login.php"; 
if (isset($_SERVER['QUERY_STRING'])) { 
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
$updateGoTo .= $_SERVER['QUERY_STRING']; 
} 
header(sprintf("Location: %s", $updateGoTo)); 
} 

$totalRows_resetpass = mysql_num_rows($resetpass);mysql_select_db($database_login_form, $login_form); 
$query_resetpass = "SELECT * FROM users"; 
$resetpass = mysql_query($query_resetpass, $login_form) or die(mysql_error()); 
$row_resetpass = mysql_fetch_assoc($resetpass); 
$totalRows_resetpass = mysql_num_rows($resetpass); 

?> 
+2

ようになっているはずだと思います。それは全く危険です。 –

+2

SQLを使用して別のページにリダイレクトする方法を知りたいですか? –

+0

更新クエリが成功せず、失敗した場合、ユーザーを特定のページにリダイレクトする必要があります。 – Cyndi

答えて

1

インジェクションが失敗した場合ユーザーがリダイレクトされるようにするヘッダーの場所を渡します。このように:

if($result1) { 
    // will return true if succefull else it will return false 

    // code here 
} 
else { 
    header('Location: reenter_pw.php'); 
} 

希望します。

編集

だから私はあなたのコードは、私はあなたがライブ環境でこれを使用する予定はありません願っていthis--

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1_reset")) { 

    $password_md5 = md5($_POST['password']); 

    $updateSQL = sprintf("UPDATE users SET password=%s WHERE username=%s AND email=%s AND security=%s", 
        GetSQLValueString($password_md5, "text"), 
        GetSQLValueString($_POST['username'], "text"), 
        GetSQLValueString($_POST['email'], "text"), 
        GetSQLValueString($_POST['security'], "text")); 

    mysql_select_db($database_login_form, $login_form); 
    $Result1 = mysql_query($updateSQL, $login_form) or die(mysql_error()); 

    $updateGoTo = "login.php"; 
    if (isset($_SERVER['QUERY_STRING'])) { 
     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
     $updateGoTo .= $_SERVER['QUERY_STRING']; 
    } 
    if($result1) { 
     // will return true if succefull else it will return false 
     header(sprintf("Location: %s", $updateGoTo)); 
    } 
    else { 
     header('Location: reenter_pw.php');//The specific page where you want to redirect the user 
    } 
} 
+0

これは実際に多くの助けになります。私はライン "ヘッダ(sprintf(" Location:%s "、$ updateGoTo))を削除しますか?"それを "header( 'Location:reenter_pw.php');に置き換えてください。 else文を追加しますか? – Cyndi

+0

私は自分の答えを編集しましたこれはあなたが望むものだと思います。ユーザー名が存在する場合は 'login.php'にリダイレクトし、存在しない場合は他のページにリダイレクトします。 – neophyte

+0

ダンは機能しませんでした。ページのメインURLを入力すると、親ページをロードせずにreenter_pw.phpとして設定したページに自動的にリダイレクトされます。 – Cyndi

関連する問題