0

申し訳ありませんが、私はphpに慣れていないので、しばらくお待ちください。ユーザー インターフェイスを作成しています。登録すると、登録したと表示されますが、データがデータベースに保存されません。誰か助けてください!

 <?PHP
$uname = "";
$pword = "";
$errorMessage = "";
$num_rows = 0;

function quote_smart($value, $handle) {

   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }

   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value, $handle) . "'";
   }
   return $value;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST'){


    $uname = $_POST['username'];
    $pword = $_POST['password'];

    $uname = htmlspecialchars($uname);
    $pword = htmlspecialchars($pword);

    $uLength = strlen($uname);
    $pLength = strlen($pword);

    if ($uLength >= 10 && $uLength <= 20) {
        $errorMessage = "";
    }
    else {
        $errorMessage = $errorMessage . "Username must be between 10 and 20 characters" . "<BR>";
    }

    if ($pLength >= 8 && $pLength <= 16) {
        $errorMessage = "";
    }
    else {
        $errorMessage = $errorMessage . "Password must be between 8 and 16 characters" . "<BR>";
    }



    if ($errorMessage == "") {

    $user_name = "root";
    $pass_word = "";
    $database = "user authentication";
    $server = "127.0.0.1";

    $db_handle = mysql_connect($server, $user_name, $pass_word);
    $db_found = mysql_select_db($database, $db_handle);

    if ($db_found) {

        $uname = quote_smart($uname, $db_handle);
        $pword = quote_smart($pword, $db_handle);


        $SQL = "SELECT * FROM login WHERE USERNAME = $uname";
        $result = mysql_query($SQL);
        $num_rows = mysql_num_rows($result);

        if ($num_rows > 0) {
            $errorMessage = "Username already taken";
        }

        else {

            $SQL = "INSERT INTO login (L1, L2) VALUES ($uname, md5($pword))";

            $result = mysql_query($SQL);

            mysql_close($db_handle);

        //=================================================================================
        //  START THE SESSION AND PUT SOMETHING INTO THE SESSION VARIABLE CALLED login
        //  SEND USER TO A DIFFERENT PAGE AFTER SIGN UP
        //=================================================================================

            session_start();
            $_SESSION['login'] = "1";

            header ("Location: page1.php");

        }

    }
    else {
        $errorMessage = "Database Not Found";
    }




    }

}


?>

    <html>
    <head>
    <title>Basic Login Script</title>


    </head>
    <body>


<FORM NAME ="form1" METHOD ="POST" ACTION ="signup.php">

Username: <INPUT TYPE = 'TEXT' Name ='username'  value="<?PHP print $uname;?>" maxlength="20">
Password: <INPUT TYPE = 'TEXT' Name ='password'  value="<?PHP print $pword;?>" maxlength="16">

<P>
<INPUT TYPE = "Submit" Name = "Submit1"  VALUE = "Register">


</FORM>
<P>

<?PHP print $errorMessage;?>

    </body>
    </html>
4

2 に答える 2

0

また、ユーザー入力のクリーンアップを行う必要がない場合は、PDO を使用したい場合もあります。これは、PDO が処理してくれるからです。次のように、すべての接続の詳細を保持するファイルを作成することをお勧めします。

   <?php

          define('DB_HOST', 'localhost');
          define('DB_NAME', 'user authentication');
          define('DB_USER', 'root');
          define('DB_PASS', '');
          define('DSN', 'mysql:host='. DB_HOST . ';dbname=' . DB_NAME);

    ?>

次に、次のようにデータベースへの接続を行うクラスを作成することができます。

<?php

    class database{

    public function databaseConnect(){
            /*Creates a new instance of the PDO called $db.
             * NOTE: the use of DSN, DB_USER and so on.  These variable live in the dbsettings file.
            */
            $db = new PDO(DSN,DB_USER,DB_PASS);
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            return $db;
        }
    }

?>

次に、次のようにユーザーを登録するためのクラスを作成することができます。

<?php

    //Include the database class file to allow access to properties and methods within that class.
    require_once 'class.database.php';


    //echo 'I am database class file now included in the users class file. <br />';

    //This method will be user to check if the user enter the correct username password pair.
    class users{


        public function checkValidUser($username){
            $userExists = false;
            try {
                $db = database::databaseConnect();

                $stmt = $db->prepare('SELECT uname FROM table WHERE uname=:username');
                $stmt->bindParam(':uname', $username, PDO::PARAM_STR);
                $stmt->execute();

                if ($stmt->rowCount() == 1){
                    $userExists = true;
                }

                $db = null;

            } catch (PDOException $e) {
                $userExists = false;
            }
            return $userExists;
        }

        public function addUser($firstname, $lastname, $username,$password){
            $success = true;
            //Connect to the database
            try {
                $db = database::databaseConnect();
                //$db->databaseConnect();

                $stmt = $db->prepare('INSERT INTO table (FirstName, LastName, Username, Password) VALUES (:firstname, :lastname, :username, :password)');
                $stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR);
                $stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR);
                $stmt->bindParam(':username', $username, PDO::PARAM_STR);
                $stmt->bindParam(':password', $password, PDO::PARAM_STR);
                $success = $stmt->execute();

                if ($success){

                    $success = true;
                }

                $db = null;

            } catch (PDOException $e) {
                //echo 'There was an error adding a new user.  Please go back and try again.  If this problem persits please contact the administrator.';
                $success = false;
            }
            return $success;
        }


?>

これが役立つことを願っています。

于 2013-03-24T19:32:25.310 に答える
0

ここにリンクの説明を入力$SQL = "INSERT INTO login (L1, L2) VALUES ($uname, md5($pword))";

適切なフィールドに値を挿入していないようです。$unameを L1 とL2 に挿入していmd5($pword)ますが、上記の選択クエリでは、ユーザー名のフィールド名が異なり、パスワードも同じだと思います。

$SQL = "SELECT * FROM login WHERE USERNAME = $uname";

ほとんどの場合、挿入クエリは次のようになります。

$SQL = "INSERT INTO login (USERNAME, PASSWORD) VALUES ('{$uname}', MD5('{$pword}'))";

おそらく文字列であるため、ユーザー名とパスワードを一重引用符で囲みました。また、変数を中かっこで囲んで、SQL と PHP を区別しています。

最後に、ウィレムが提案したように、 PDOでこれを行うことを確認します

于 2013-03-24T19:49:15.927 に答える