0

基本的なエラー処理を備えた小さな登録フォームのXAMPPで練習しており、最終的にボタンをクリックしてデータをテーブルに挿入しますが、そうではありません。私はすべてをチェックしました。テーブルと行は正しいです。他のページからのデータが挿入されているため、データベースは接続されていますが、ここからはありません。コードは以下のとおりです。

<?php
/* Register Form */
include "connect.php";
include "links.php";

//check which form is being submitted
$get_submit_type = "";
if (isset($_POST['submit'])){
    echo $get_submit_type = "user_details_submit";
}
else if (isset($_POST['confirm_submit'])){
    echo $get_submit_type ="confirm_submit";
}
else {
    echo "";
}

// acction according to which form is submitted
switch($get_submit_type){
    case "user_details_submit":
?>
        <div style="clear: both; margin: auto; width: 50%; font: normal 12px Verdana;" id="register_details">
            <?php
                //if (isset($_POST['submit'])){

                    //error handling

                    // any field epmty
                    if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['password_confirm']) || empty($_POST['email'])){
                        die($lang['REG_FIELD_EMPTY']);
                    }

                    // password not matching
                    if($_POST['password'] != $_POST['password_confirm']){
                        die($lang['REG_PASS_NOT_MATCHING']);
                    }

                    echo "<hr />";
                    $username = $_POST['username'];
                    $password = md5($_POST['password']);
                    $email = $_POST['email'];
                    echo $lang['REG_USER'] . " = " . $_POST['username'] . "<br />";
                    echo $lang['REG_PASS'] . " = " . md5($_POST['password']) . "<br />";
                    echo $lang['REG_EMAIL'] . " = " . $_POST['email'] . "<br />";
                    echo $lang['REG_NOTICE'] . " = " . $lang['REG_NOTICE_DETAILS'] . "<br />";

                //}
            ?>
    <form name="confirm" method="post" action="#confirmation_details">
        <input type="hidden" name="username" value="<?php echo $username; ?>" />
        <input type="hidden" name="password" value="<?php echo $password; ?>" />
        <input type="hidden" name="email" value="<?php echo $email; ?>" />
        <input type="hidden" name="group" value="standard_user" />
                <button type="submit" name="confirm_submit" class="form-sell"><?php echo $lang['REG_REGISTER_CONFIRM']; ?></button>
            </form>
        </div>
<?php
        break;
    case "confirm_submit":
?>

        <div id="confirmation_details" style="clear: both; width: 75%; margin: auto;">
            <?php
                //if(isset($confirm_submit)){
                    $username = $_POST['username'];
                    $password = $_POST['password'];
                    $email = $_POST['email'];
                    $group = $_POST['group'];
                    $query = mysql_query("INSERT INTO users (username,password,email,group) VALUES ('$username','$password','$email','$group')");

                    if(!$query){
                        die("The data was not inserted into the database");
                    }

                    echo $lang['REG_USER_REGISTERED'];

                //}
            ?>
        </div>
<?php
    break;
    default:
?>
<form name="register" method="post" action="#register_details">
<input type="text" class="form-sell" name="username" placeholder="<?php echo $lang['REG_USER']; ?>" id="username" /><br />
<input type="password" class="form-sell" name="password" placeholder="<?php echo $lang['REG_PASS']; ?>" /><br />
<input type="password" class="form-sell" name="password_confirm" placeholder="<?php echo $lang['REG_PASS_CONFIRM']; ?>" /><br />
<input type="text" class="form-sell" name="email" placeholder="<?php echo $lang['REG_EMAIL']; ?>" /><br />
<button type="submit" name="submit" class="form-sell"><?php echo $lang['REG_REGISTER']; ?></button>
</form>
<?php
}
?>

私は練習していて、このコードはオンラインではないため、フォームデータで実際のエスケープ文字列を使用していません。

最初の数行でコーディングしたため、提出用のタイプが正しく表示されています。正しく動作していないのは mysql クエリだけです。それを理解したいのですが、お願いします

4

1 に答える 1

1

このエラー メッセージは表示されましたか?

SQL 構文にエラーがあります。near 'group.... を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

GROUPは予約済みのキーワードで、たまたま列の名前になっています。構文エラーを回避するために、バックティックを使用して列名をエスケープする必要があります。元、

INSERT INTO users (username,password,email,`group`)

テーブルを変更する権限がある場合は、予約済みキーワード リストにない列名を変更して、同じエラーが再発しないようにします。

于 2013-04-28T16:18:18.727 に答える