-2

開発中の Web サイトのユーザー プロファイルを更新するために設計されたスクリプトがありますが、それがわかりません。Web サイトで [送信] をクリックしても、何も起こりません。フォームのセットアップとすべてが完了しており、エラー メッセージはまったく表示されません。解決策を求めてGoogleを見回しましたが、その助けとなるものは見つかりませんでした。

これは同じ .php ファイルで機能し、別のファイルを要求しません。POST リクエストがあるかどうかを確認し、そこからすべてを実行します...パスワードはユーザーにとってオプションであり、パスワード フィールドに何かが入力された場合にのみ実行する必要があります。POST リクエストがない場合は、入力ボックスなどを含むフォーム/テーブルがユーザーに表示されるだけであり、これは問題ではありません。

何か案は?

if(isset($_POST['username']))
{
    try
    {
        /*** connect to database ***/
        /*** mysql hostname ***/
        $mysql_hostname = 'localhost';

        /*** mysql username ***/
        $mysql_username = 'username';

        /*** mysql password ***/
        $mysql_password = 'password';

        /*** database name ***/
        $mysql_dbname = 'database';

        /*** select the users name from the database ***/
        $dbh = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
        /*** $message = a message saying we have connected ***/

        /*** set the error mode to excptions ***/
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        /*** if we are here the data is valid and we can insert it into database ***/
        $UsrEmail = filter_var($_POST['email'], FILTER_SANITIZE_STRING);
        $RealName = filter_var($_POST['realname'], FILTER_SANITIZE_STRING);

        /*** prepare the insert ***/
        $updUSR = "UPDATE Users
            SET UsrEmail=?, RealName=?
                WHERE UsrID=".$_SESSION['UsrID']."";
        $stmtu = $dbh->prepare($updUSR);
        $stmtu->bindParam(':email', $UsrEmail, PDO::PARAM_STR);
        $stmtu->bindParam(':realname', $RealName, PDO::PARAM_STR);
        $stmtu->execute(array($UsrEmail,$RealName));
        $stmtu->execute();

        if(isset($_POST['currpass'], $_POST['newpass1'], $_POST['newpass2']))
        {
            /*** if we are here the data is valid and we can insert it into database ***/
            $currpass = filter_var($_POST['currpass'], FILTER_SANITIZE_STRING);
            $newpass = filter_var($_POST['newpass1'], FILTER_SANITIZE_STRING);
            $newpass2 = filter_var($_POST['newpass2'], FILTER_SANITIZE_STRING);

            /*** verify if the passwords match ***/
            if($newpass == $newpass2)
            {
                /*** now we can encrypt the password ***/
                $UsrPasswd = sha1( $newpass );
                $updPW = "UPDATE Users
                    SET UsrPasswd=?
                        WHERE UsrID=".$_SESSION['UsrID']."";
                $stmtp->bindParam(':newpass', $UsrPasswd, PDO::PARAM_STR, 40);
                $stmtp = $dbh->prepare($updPW);
                $stmtp->execute(array($UsrPasswd));
                $stmtp->execute();
            }
            else
            {
                $message = "The passwords entered do not match, please try again.";
            }
        }

        /*** if all is done, say thanks ***/
        $message = 'Profile Settings Changed Successfully';
    }
    catch(Exception $e)
    {
        /*** if we are here, something has gone wrong ***/
        $message = 'We are unable to process your request.<br />Please try again later.';
    }
}
4

1 に答える 1

0

あなたのコードにはいくつかの問題があります。この部分でそれらのいくつかを修正しました。

    $UsrEmail = $_POST['email'];
    $RealName = $_POST['realname'];

    /*** prepare the insert ***/
    $updUSR = "UPDATE Users SET UsrEmail=?, RealName=? WHERE UsrID=?";
    $stmtu = $dbh->prepare($updUSR);
    $stmtu->bindParam(1, $UsrEmail);
    $stmtu->bindParam(2, $RealName);
    $stmtu->bindParam(3, $_SESSION['UsrID']);
    $stmtu->execute();

疑問符のプレースホルダーを使用する場合は、 bindParam(1, $UsrEmail)notbindParam(":email", $UsrEmail)を使用する必要があり、内部に配列を渡す必要もありませんexecute

于 2013-09-24T10:44:45.377 に答える