0

概要: 学習目的でダミーの Web サイトを作成しているため、その機能主義者は基本的であり、セキュリティは議題に含まれていません。

実際の問題:

私のアプリケーションは、必要に応じて自分のアカウントを編集するオプションを持つユーザーにログインします。だから私は先に進んで、これに対処するためのPHPスクリプトを作成しましたが、そうではありません。アカウントの編集ボタンをクリックしてもエラーは表示されませんが、同時に MySQL データベースをチェックしても変更は発生しませんでした。

EditAccountForm.php ファイル:

<?php

    include('connect_mysql.php');


if(isset($_POST['editAccount'])){

    $Newusername = $_GET['username'];
    $Newpassword = $_POST['password'];
    $Newfirstname = $_POST['first_name'];
    $Newlastname = $_POST['last_name'];
    $Newemail = $_POST['email'];


    if($Newusername != $username)
    {
        $q1 = ("UPDATE users SET username=$Newusername WHERE username=$username");
    }
    else if(!mysql_query($q1)){

        echo "MySQL ERROR: " . mysql_error() . "" . $sql;
    }
    ///////////////////////////////////////////////////////////////

    if($Newpassword != $password)
    {
        $q2 = ("UPDATE users SET password=$Newpassword WHERE password=$password");
    }
    else if(!mysql_query($q2)){

        echo "MySQL ERROR: " . mysql_error() . "" . $sq2;
    }
    ///////////////////////////////////////////////////////////

    if($Newfirstname != $firstname)
    {
        $q3 = ("UPDATE users SET first_name=$Newfirstname WHERE first_name=$firstname");
    }
    else if(!mysql_query($q3)){

        echo "MySQL ERROR: " . mysql_error() . "" . $sq3;
    }
    ///////////////////////////////////////////////////////////////

    if($Newlastname != $lastname)
    {
        $q4 = ("UPDATE users SET last_name=$Newlastname WHERE last_name=$lastname");
    }
    else if(!mysql_query($q4)){

        echo "MySQL ERROR: " . mysql_error() . "" . $sq4;
    }
    ///////////////////////////////////////////////////////////////

    if($Newemail != $email)
    {
        $q5 = ("UPDATE users SET username=$Newemail WHERE email=$email");
    }
    else if(!mysql_query($q5)){

        echo "MySQL ERROR: " . mysql_error() . "" . $sq5;
    }



}   

?>

userEditAccount.php:

<html>
<head>

<title>Edit Account</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>

    <div id="wrapper">
        <header><h1>E-Shop</h1></header>


        <article>
        <h1>Welcome</h1>

            <h1>Edit Account</h1>

        <div id="login">

                <ul id="login">

                <form method="post" name="editAccount" action="userEditAccount.php"  >
                    <fieldset>  
                        <legend>Fill in the form</legend>

                        <label>Select Username : <input type="text" name="username" /></label>
                        <label>Password : <input type="password" name="password" /></label>
                        <label>Enter First Name : <input type="text" name="first_name" /></label>
                        <label>Enter Last Name : <input type="text" name="last_name" /></label>
                        <label>Enter E-mail Address: <input type="text" name="email" /></label>
                    </fieldset>
                        <br />

                        <input name="Editsubmited" type="submit" submit="submit" value="Edit Account" class="button">

                </form>

                <?

                    echo $newrecord;
                ?>


                </div>
            <form action="userhome.php" method="post">
            <div id="login">
                <ul id="login">
                    <li>
                        <input type="submit" value="back" onclick="index.php" class="button">   
                    </li>
                </ul>
            </div>      



        </article>
<aside>
</aside>

<div id="footer">This is my site i Made coppyrights 2013 Tomazi</div>
</div>

</body>
</html>

さらに:

私はウェブで見たコードをいじろうとしましたが、運が悪く、このスクリプト用に書いたコードが私の目には最良の解決策であり、私にとって意味のあるものです。

だから私は他に選択肢がありませんでしたが、このウェブサイトに目を向けて答えを探しました。

アカウントの編集ページの画像: ここに画像の説明を入力

尋ねられたように Conect_mysql.php:

<?php 

    $db_hoast = "127.0.0.1";
    $db_username = "root";
    $db_password = "";
    $db_name = "eshop";

    $con = mysql_connect("$db_hoast","$db_username","$db_password");
        if(!$con)
        {
            die("Could not connect to DATABASE");
        }
    $db = mysql_select_db("$db_name");
        if(!$db)
        {
            die("No database");
        }

?>
4

1 に答える 1

3

ステートメントの問題UPDATEは、値が一重引用符で囲まれていないことです。これらは文字列リテラルであり、ラップする必要があります。

$q1 = "UPDATE users SET username='$Newusername' WHERE username='$username'";

エラーを表示するには、

if($Newfirstname != $firstname)
{
    $q1 = "UPDATE users SET username='$Newusername' WHERE username='$username'";
    $result = mysql_query($q1);
    if (!$result) 
    {
        die('Invalid query: ' . mysql_error());
    }
}

また、あなたの論理UPDATESは間違っています。これにより、条件に一致するレコードが更新されます。

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-03-01T02:23:30.033 に答える