0

基本的に、displayCharityList()内のコードは機能します。そのコードをその関数内に配置し、その関数をクラス内に配置し、後でそれを呼び出して機能させることにしました。

どういうわけか、データベースからデータをプルしていません。クエリは関数内で機能しますが、__contructでは機能しません

誰かが私が間違っているplzをしていることを教えてもらえますか?

ありがとうございました

<?php 
// Connection setup


class charity {
public $h;

        function __construct () {
            $c = new PDO('mysql:host=localhost;dbname=seafarer_v2','seafarer_user','supp0rt1243');
            $h = $c->query('SELECT * FROM mnwg_charities')->fetchAll(PDO::FETCH_ASSOC);
            $this->$h = $this->h;
            $this->displayCharity = $this->displayCharityList();
        }


    Public function displayCharityList(){

        echo "<table><tr><th>Name</th><th>Contact</th><th>Post code</th><th>Phone</th><th>Website</th><th>Email</th></tr>";
            foreach ($this->h as $r){

                      echo "<tr><td>";
                      echo $r['Name'];
                      echo "</td>";
                      echo "<td>";
                      echo $r['Contact'];
                      echo "</td>";
                      echo "<td>";
                      echo $r['Postcode'];
                      echo "</td>";
                      echo "<td><div class=\"phone\">";
                      echo "<img src=\"http://m.intertrustgroup.com/images/icon_phone.png\" style=\"margin-right:.5em\">{$r['Phone']}</br>";
                        if($r['Fax']){  echo "<img src=\"http://www.sliksvn.com/gfx/icon_fax.gif\" style=\"margin-right:.5em\">{$r['Fax']}";}
                      echo "</div></td>";
                      echo "<td>";
                      echo "<a href=\"{$r['Website']}\" target=\"_blank\"> Visit Website </a>";
                      echo "</td>";
                      echo "<td>";
                      echo "<a href=\"mailto:{$r['Email']}\">Send Email</a>";
                      echo "</td></tr>";

            }
           echo "</table>";
     }
 }


?>

<?php
$hola = new charity();
echo $hola->displayCharity(); 
?>
4

4 に答える 4

2

データベース接続はチャリティークラスとは関係ありませんが、接続をクラスに渡すクエリに必要なため、いくつかのポインターは依存性注入と呼ばれます。それ以外の場合、クラスのすべての初期化に基づいているため、データベースにクエリを実行しますが、そのクエリを必要としない別のメソッドにアクセスする場合は必要ありません。また、メソッドからのechoing とないreturning は問題ありませんが、特に配置したい場所にメソッドへの呼び出しを配置する必要があります。メソッドから戻って、配置したい場所で単一のエコーを使用する方が簡単です。それが役に立てば幸い。

<?php 

class charity {

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

    private function get_charities(){
        return $this->con->query('SELECT * FROM mnwg_charities')->fetchAll(PDO::FETCH_ASSOC);
    }

    public function displayCharityList(){

        $return = "<table><tr><th>Name</th><th>Contact</th><th>Post code</th><th>Phone</th><th>Website</th><th>Email</th></tr>";
        foreach ($this->get_charities() as $r){
            $return .= "<tr><td>".$r['Name']."</td>";
            $return .= "</td>";
            $return .= "<td>";
            $return .= $r['Contact'];
            ...
            ...
        }
        $return .= "</table>";
        return $return;
    }
}

$con = new PDO('mysql:host=localhost;dbname=seafarer_v2','seafarer_user','supp0rt1243');

$hola = new charity($con);

echo $hola->displayCharity();
?>
于 2012-10-08T13:30:15.963 に答える
0

ブラケットを外してみる

class charity

class charity () //which is wrong
于 2012-10-08T13:03:56.747 に答える
0

class Charity は括弧を削除する関数ではありません。

クラス名を大文字にするのは良い習慣です。

于 2012-10-08T13:05:37.900 に答える
0
 <?php
 $hola = new charity();
 echo $hola->displayCharity(); //this line no needed
 ?>

コンストラクター関数自体でdisplayCharity関数を呼び出すため、2行目は必要ありません..再度呼び出す必要はありません...そして、クエリが正しく機能していることを確認してください...

于 2012-10-08T13:09:43.637 に答える