0

簡単な登録/ログイン スクリプトを作成するために、このチュートリアルに従っています。

http://forum.codecall.net/topic/69771-creating-a-simple-yet-secured-loginregistration-with-php5/

私は PHP を初めて使用しますが、C++ を使用した経験が豊富であるため、移行はそれほど難しくなく、構文を理解するだけでよいと思いました。また、大学で mySQL を非常に簡単に紹介したので、知識はあまりありませんが、ユーザーが登録したときに既存のユーザー名を確認するために mySQL を使用する方がはるかに簡単だと思いました。このようなものがうまくいくと思いました。

SELECT username
FROM codecalltut
WHERE username = username;

これは実際に機能しますか?データベース codecalltut からユーザー名を選択し、入力されているユーザー名が既にユーザー名であるかどうかを確認しますか? これが正しいとしても、それを PHP に組み込む方法がわかりません。

使ってみました

$qry = "SELECT username
    FROM codecalltut
    WHERE username = username;"

しかし、次のステートメントに移動するときに構文エラーが発生します。

<?php 
    $qry = "SELECT username
        FROM codecalltut
        WHERE username = username;"

//if register button was clicked.
} else {
$usr = new Users; //create new instance of the class Users
$usr->storeFormValues( $_POST ); //store form values

//if the entered password is match with the confirm password then register him
if( $_POST['password'] == $_POST['conpassword'] ) {
echo $usr->register($_POST); 
} else {
//if not then say that he must enter the same password to the confirm box.
echo "Password and Confirm password not match"; 
}
}

?>

これは、データベースの構築に使用されるクエリです。

CREATE DATABASE `codecalltut` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `codecalltut`;


CREATE TABLE IF NOT EXISTS `users` (
  `userID` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varbinary(250) NOT NULL,
  PRIMARY KEY (`userID`,`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

これは、ユーザーが「登録」をクリックしたときの HTML コードです。

<li class="buttons">
                         <input type="submit" name="register" value="Register" />
                            <input type="button" name="cancel" value="Cancel" onclick="location.href='index.php'" />
                     </li>
4

4 に答える 4

1

登録用の HTML フォーム

<form action='' method='POST'>
    <input type='text' name='username' />
    <input type='password' name='password' />
    <input type='password' name='re-password' />
    <input type='submit' name='submit' />
</form>

あなたのPHPコード

if($_POST){

        if(empty($_POST['username']) && empty($_POST['password']) && empty($_POST['re-password'])) {
            echo 'Please enter all fields';
        }else {

        $username = $_POST['username'];
        $password = $_POST['password'];
        $re_password = $_POST['re-password'];

        if($password !== $re_password){
            echo 'Both passwords do not match';
        }else {

            $db_name = 
            $db_user = 
            $db_pass = 

            $conn = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx', 
                array( PDO::ATTR_PERSISTENT => true )
        );

            $stmt = $conn->prepare("SELECT username,password FROM users WHERE username = ? AND password = ?");
            $stmt->execute(array($username, $password));

            if($stmt->rowCount() === 0 ) {


            $stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?,?)");
            $stmt->execute(array($username, $password));
            if($stmt->rowCount() ===1){
                echo 'Registration complete';
            }else {
                echo 'Sorry, unknown error: please try again later';

            }

            }else {
                echo 'Sorry, the username '.$username.' already exists';
            }



        }

        }
    }
于 2013-05-04T16:01:18.647 に答える
0

@Nelsonの発言が続きます。'また、クエリ内の文字列を次のように一重引用符で囲む必要があります。

$qry = "SELECT username FROM codecalltut   WHERE username = 'username' ";

また、内部に書き込む場合、データベース言語自体と競合する可能性のあるテーブル、行名は、必ずバッククォート (`) で囲んでください。

ところで

単純なログイン スクリプトはこのように機能します。(希望、データベースと対話するために mysql 関数の代わりにPDOorを使用しているmysqli

// set isset(), to validate if form is submited and then

    $username = $_POST['username']; 
    $pass= $_POST['pass'];

さて、コードです。

$conn = new PDO('mysql:host=localhost; dbname=***;', 'db-user', 'user-pass');

$stmt = $conn->prepare("SELECT username,password from members WHERE username = ? AND password = ?");

$stmt->execute(array($username, $password));
if($stmt->rowCount() === 1){
echo 'welcome'.$username;
}else {
echo $username.' is not found'
}
于 2013-05-04T15:07:18.733 に答える
0

最後の;:を削除します。

$qry = "SELECT username
    FROM codecalltut
    WHERE username = username;";
               REMOVE THIS --^ ^----ADD THIS
于 2013-05-04T15:05:35.653 に答える