-2

オブジェクト指向の方法でフォームからデータベースにデータを挿入しようとしていますが、データが挿入されません。なぜだめですか?

class users {
    var $username;
    var $password;
    var $conection;
    var $tablename = usertable;

    function mysqldb() {
        $this->conection = mysql_connect("local host", "root", "") or die(mysql_error());
        mysql_select_db("this->tablename");
    }

    function insertdb() {
        $query = mysql_query("INSERT INTO $this->tablename values ('', '$user', '$pass')");
        $result = mysql_query($query);
        if(!$result) die("Query didn't work. " . mysql_error());
    }
}

$user1 = new users;
$user1->username = $_POST["user"];
$user1->password = $_POST["pass"];
$user1->insertdb();
4

4 に答える 4

1

クラスをインスタンス化した後、メソッドinsertdb()を呼び出しますが、データベースに接続する場所はありません。前にmysqldb()を呼び出す必要があります!

于 2012-06-12T23:23:09.557 に答える
1

最初の問題は、ホスト名が間違っていることです。localhostではなく、使用してくださいlocal host

ここで、データをエスケープする必要があります。そうしないと、問題が発生します。mysql_関数に関して持っているものを完全に捨てて、 PDO で準備されたクエリを実行することを学ぶことをお勧めします。

于 2012-06-12T23:19:04.710 に答える
0
$this->conection = mysql_connect("local host", "root", "")

するlocal host必要がありますlocalhost


$query = mysql_query("INSERT INTO $this->tablename values ('', '$user', '$pass')");

最後の2つの変数はどちらも定義されていません-おそらくとを意味$this->username$this->passwordます。また、SQLインジェクションの脆弱性に直面している可能性もあります。PDOとプリペアドステートメントを確認してください。また、これが実際のWebアプリケーションの場合は、パスワードのソルトとハッシュを開始します。


mysql_select_db("this->tablename");

する"this->tablename"必要があります$this->tablename


mysqldb()また、そもそも電話をかけることはありません。データベースに挿入する前に、これを行う必要があります。

$user1->mysqldb();
于 2012-06-12T23:22:55.117 に答える
0

あなたが持っているmysql_select_db("this->tablename")

あなたが必要mysql_select_db($this->tablename)

それが少なくとも私が目にする差し迫った問題です。クラスやオブジェクトにデータをフェッチする機能を持つPDOを実際にチェックインする必要があります。あちこちで練習する方が良いです。

于 2012-06-12T23:20:05.313 に答える