1

Web サイトにフォームがあります。このフォームは、イベントに関するデータを収集します。イベントには、イベントに対応するテーブルにある ID 以外に 20 のフィールドがあります。($_POST['submit']) を取得する前に、true の場合は、mysql_query を使用してイベント フィールドをデータベースに挿入していました。

今、私は oop とこの pdo を使用しようとしていますが、この時点でほとんど敗北しました。私は多くのことを間違っていると確信しています。

<?php  
$str = $_SERVER['DOCUMENT_ROOT'];
include  $str."/wp-config.php";

$config['db'] = array(
    'host'      => DB_HOST,
    'username'  => DB_USER,
    'password'  => DB_PASSWORD,
    'dbname'    => DB_NAME,
    'charset'   => DB_CHARSET
);


$db = new PDO('mysql:host='.$config['db']['host'].';dbname='.$config['db']['dbname'].';charset='.$config['db']['charset'], $config['db']['username'], $config['db']['password']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDF::ATTR_EMULATE_PREPARES, false);


class match extends event {
    public $_matchno;
    public $_completed;

    function __construct() {
        $this->_completed = "N";
    }

    public function addMatch($matchno) {
        $sql = $db->prepare("INSERT INTO wp_hue5gf_match_details (matchno, event_name, dateofmatch, fighttype, comp, matchref, fightclass) 
            VALUES (".$matchno.", $this->_eventname, $this->_doe, $this->_status, $this->_completed, $this->_refree, $this->_fightclass)");
        $sql->execute();
    }
}

class event {
    public $_promouser;
    public $_eventname;
    public $_fightclass;
    public $_no_of_matches;
    public $_status;
    public $_doe;
    public $_venue;
    public $_city;
    public $_state;
    public $_zip;
    public $_sanc_body;
    public $_doctor;
    public $_refree;
    public $_referee2;
    public $_judge;
    public $_judge2;
    public $_judge3;
    public $_boxcomm;
    public $_descript;

    function __construct() {
        $this->_promouser       = $_SESSION['username'];
        $this->_eventname       = $_POST['ename'];
        $this->_fightclass      = $_POST['efightclass'];
        $this->_no_of_matches   = $_POST['no_of_matches'];
        $this->_status          = $_POST['estatus'];
        $this->_doe             = $_POST['year']."-".$_POST['month']."-".$_POST['day'];
        $this->_venue           = $_POST['venue'];
        $this->_city            = $_POST['city'];
        $this->_state           = $_POST['state'];
        $this->_country         = $_POST['country'];
        $this->_zip             = $_POST['zip'];
        $this->_sanc_body       = $_POST['sbody'];
        $this->_doctor          = $_POST['doctor'];
        $this->_refree          = $_POST['refree'];
        $this->_referee2        = $_POST['refree2'];
        $this->_judge           = $_POST['judge'];
        $this->_judge2          = $_POST['judge2'];
        $this->_judge3          = $_POST['judge3'];
        $this->_boxcomm         = $_POST['boxcom'];
        $this->_descript        = $_POST['descript'];
    }

    public function insertEvent() {
        $sql = $db->prepare("INSERT INTO event (promouser, eventname, fightclass, no_of_matches, status, doe, venue, city, state, country, zip, 
            sanc_body, doctor, refree, referee2, judge, judge2, judge3, boxcomm, descript) VALUES ($this->_promouser, $this->_eventname, $this->_fightclass, $this->_no_of_matches, $this->_status, $this->_venue, 
            $this->_city, $this->_state, $this->_country, $this->_zip, $this->_sanc_body, $this->_doctor, $this->_refree, $this->_referee2, $this->_judge, $this->_judge2, $this->_judge3, $this->_boxcomm, $this->_descript)");
        $sql->execute();
    }    
}
?>

それが私のクラスページです。イベントの追加ページに移動します。私は明らかに何か間違ったことをしています。そして、どこから始めればよいかわかりません。

<?php
require_once(bloginfo( 'template_url' ).'/definedClasses.php');
if($_POST['submit'])
{
    $event = new event();

    event::insertEvent();

    for($y=1;$y<= $event->_no_of_matches;$y++)
    {
        $match = new match();
        match::addMatch($y);
    }
}

?> 
 <form name="addevent" method="post" action="" enctype="multipart/form-data" >
  <!-- The form here with all these inputs for the post values -->
</form>

一度にたくさんのことをしようとしているのは確かです。おそらく、これをもっと小さな問題に切り詰めてから、それを処理する必要があります。しかし、どこから始めればよいかわかりません。私はあなたが私のためにこれを行うことを求めているのではなく、私が理解していないことについてのガイダンスを探しています。PDOと関係があると確信しています。これが以前のように mysql_ だった場合、私はそれを正しく実行できると感じています。ご覧いただきありがとうございます。

4

1 に答える 1

0

$db存在を知らないため、クラスで使用することはできません。

依存性注入とは何ですか?

コンストラクターで PDO オブジェクトをパラメーターとして渡します

function __construct( PDO $db ) {
    $this->$db = $db;
}

次に、$this->db代わりに使用します$db

また$event->insertEvent()、静的に使用する代わりに使用してください。

より良いアプローチは

$event = new Event( $_POST );
$eventSaver = new EvenSaver( $db ); //Name is stupid but you get it
$eventSaver->saveEvent( $event );

しかし、それは別の時間です。

于 2013-09-23T19:00:59.580 に答える