0

電子メール、パスワード、および名前を mySQL データベースに挿入する際に問題があります。データベースに接続するための別のクラスを用意しました。しかし、自分の名前、電子メール、パスワードをフォーム (これは別の php ファイルにあります) に入力すると、データベースには何もありません。ここで私のコードを見つけることができます。データベースで挿入ステートメントを既に試しましたが、うまくいきました。

<?php
include_once("classes/User.class.php");
include_once("Tweet.php");

class Db
{
  private $m_sHost="localhost";
  private $m_sUser="root";
  private $m_sPassword="";
  private $m_sDatabase="phples";
  public $conn;

  public function __construct() {
    $this->conn=new mysqli($this->m_sHost,$this->m_sUser,$this->m_sPassword,$this->m_sDatabase);
    if(isset($m_bVerzend)) {
      if(!$conn->connect_errno) {
        $sql = "INSERT INTO 'tbltweet' ('Name', 'Email', 'Password') VALUES ('$m_sName', '$m_sEmail', '$m_sPassword');";
        $conn->query($sql);
      }
    }
  }
}
?>
4

2 に答える 2

1

コンストラクターでは、関数のスコープに設定されていない多くの変数を使用しています。

    if(isset($m_bVerzend)){
    if(!$conn->connect_errno)
    {
        $sql = "INSERT INTO 'tbltweet' ('Name', 'Email', 'Password') VALUES ('$m_sName', '$m_sEmail', '$m_sPassword');";
        $conn->query($sql);}
    }

$m_bVerzend、 などのすべての変数$m_sNameは単に未定義です。

変数のスコープに関する詳細は、php のマニュアルを参照してください。

ちなみに、SQL インジェクションの問題を防ぐために、SQL ステートメントで変数をダンプする代わりに、変数がバインドされた準備済みステートメントも使用する必要があります。

于 2013-03-06T17:48:58.043 に答える
0

変数 $m_bVerzend、$m_sName、$m_sEmail、および $m_sPassword は関数内に存在しません。標準では、特に指定がない限り、PHP の変数はローカル スコープと見なされます。

値をコンストラクターのパラメーターとして送信するか、コンストラクターを使用して接続をインスタンス化し、別のプロシージャを使用してパラメーターを受け取り、SQL ステートメントを準備してクエリを実行します。

于 2013-03-06T18:09:11.883 に答える