0

このコーディングにエラー/エクスプロイトがあるかどうかを知りたいのですが、登録してもデータベースにデータが挿入されないため、誰かが私を助けることができます. 間違いがある場合は、修正してください。ユーザー名が存在する場合は、それらを error?=1 などにリダイレクトし、パスワードが一致しないようにします。どんな助けでも大歓迎です。

Register.php

 <form action="register_acc.php" method="post">
                            <input type="text" name="username" class="input" value="" autocomplete="off" placeholder="Username" maxlength="25" /><br />
                                <br />
                            <input type="password" name="password" class="input" value="" autocomplete="off" placeholder="Password" maxlength="20" /><br />
                                <br />
                            <input type="password" name="password2" class="input" value="" autocomplete="off" placeholder="Password again" maxlength="20" /><br />
                                <br />
                            <input type="text" name="email" class="input" value="" autocomplete="off" placeholder="Email" maxlength="255" /><br />
                                <br />
                                <input type="submit" name="submit "class="submit" value="Sign up">
                        </form>

register_acc.php

<?php
    error_reporting(1);
     include 'site/inc/config.php';

      if (isset($_POST['submit'])) {
session_start();

$username = $_POST['username'];
$password = md5($_POST['password']);
$pass_conf = md5($_POST['password2']);
$email = $_POST['email'];
$ip = $_SERVER['REMOTE_ADDR'];
$date= date("d-m-Y");


$q = "SELECT * FROM `users` WHERE username = '$username'";
$r = mysql_query($q);

if (empty($username)) {
    header("Location: register.php?error=1");
        exit;
}

if ($password != $pass_conf) {
    header("Location: /site/register.php?error=2"); 
        exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: /site/register.php?error=3"); 
        exit;
} 

if  (mysql_num_rows($r) == 0) {
    // Continue w/ registration, username is available!
    $query = "INSERT INTO `users` (id, username, password, email, ip, rank, reg_date)
    VALUES (0, '$username', '$password', '$email', '$ip', 1, '$date'())";
    $run = mysql_query($query);
    header("Location: /site/register.php?succsess=1"); 

}
          }
         else {
    header("Location: register.php?error=4");
           }
      ?>
4

1 に答える 1

0

$username 変数をクエリに連結しません。これを試して:

"SELECT * FROM `users` WHERE username = '".$username."'"

また、INSERT クエリは、date() 関数では少し奇妙に見えます。これを試して:

$date = date("Y-m-d");
"INSERT INTO `users` (id, username, password, email, ip, rank, reg_date)
    VALUES (0, '$username', '$password', '$email', '$ip', 1, '".$date."')"

編集: スクリプトの例

<?php
if(!isset($_POST['username'])||!isset($_POST['email'])||!isset($_POST['password']))//enter more values if necessary
{
header("Location: error_page.php?error=1");
}
else
{
//do whatever, eg execute query
}
?>
于 2013-04-20T11:54:04.053 に答える