0

私は OOP を把握しようとしており、SQL データベースにアクセスするサイトを構築することにしました。これまでのところうまくいっています。いくつかのテーブルがありますが、思わぬ障害に遭遇しました

データベースにアクセスし、オブジェクト配列を作成します

$Dog_array = $sth->fetchAll(PDO::FETCH_CLASS, 'Dog');

単純化されていますが、私のクラスは次のようになります。

class Dog {
     private $name;

     function get_name {
     return $this->name;
    } 

私のテーブルを構築するリスト

function edit_table($Dog) {

echo "<table><tr><form action='update.php' method ='post'>";
echo "<input type='hidden' name='id' value='" . $id ."'>";

echo "<td>". $Dog->get_id() ."</td>";
?>
<td><input type='text' name='rname' value="<?php echo $Dog->get_rname(); ?>"></td>
<td><input type='text' name='cname' value="<?php echo $Dog->get_cname(); ?>"></td>
<td><input type='text' name='dob' value="<?php echo $Dog->get_dob(); ?>"></td>
<td><input type='radio' name='gender' value='male' <?PHP if($Dog->get_gender() == 'male'){ echo "checked=\"checked\""; } ?> /> Male
<input type='radio' name='gender' value='female' <?PHP if($Dog->get_gender() == 'female'){ echo "checked=\"checked\""; } ?> />Female</td>
<td><input type='text' name='sire' value="<?PHP echo "builddropdown" ?> "></td>
<td><input type='text' name='dam' value="<?PHP drop_menu() ?>"></td>
<?php

if ($Dog->get_available()) {
    $checked = "checked=\"checked\"";
} else {
    $checked = NULL;
echo "<td><input type=\"checkbox\"" . $checked . "name=\"available\" value=\"TRUE\"/></td>";

if ($Dog->get_display()) {
    $checked = "checked=\"checked\"";
} else {
    $checked = NULL;
}
echo "<td><input type=\"checkbox\"" . $checked . "name=\"display\" value=\"TRUE\"/></td></tr></table>";
?>
<input type='submit' value='change image'/></form>
<FORM METHOD="LINK" ACTION="upload.php">
<INPUT TYPE="submit" VALUE="Change Image Thumb">
</FORM>
<input type='submit' value='change image'/></form>
<FORM METHOD="LINK" ACTION="upload.php">
<INPUT TYPE="submit" VALUE="Change Image Thumb">
</FORM>
    <?php
    }
?>
<input type='submit' value='update'/></form>
<FORM METHOD="LINK" ACTION="index.php">
<INPUT TYPE="submit" VALUE="Back">
</FORM>
<?php 
}

?>

私のドロップダウン

function drop_menu() {

?>
<form name ="dropdown">
<select ="alldogs">
<?php
        foreach ($Dog_array as $Dogs) { 
        ?>
        <option value="<?php echo $Dogs->get_id() . "\">" . $Dogs->get_rname();   ?></option>
<?php } ?>
</select>
</form>
<? }

私のドロップダウンメニューは、すべての犬のリストを作成します。

foreach に指定された引数が無効ですというエラーが表示されます

エラーが発生する理由がわかります I just don't know how to clean up this up so I do not need to pass my Object array into my edit_table function so I can pass it into drop down function . 子クラスを作成することを考えましたが、メニューは1つのオブジェクトではなくオブジェクトの配列から構築されているため、これを機能させる方法もわかりません。フォーラムへの投稿は初めてなので、助けを求める方法を修正することをお勧めします。

4

2 に答える 2

0

配列 $Dog_array スコープの問題です。$Dog_array を drop_menu 関数に渡す必要があります。

<?php
function drop_menu($Dog_array) {

?>
<form name ="dropdown">
<select ="alldogs">
<?php
foreach ($Dog_array as $Dogs) { 
?>
<option value="<?php echo $Dogs->get_id() . "\">" . $Dogs->get_rname();   ?>></option>
<?php } ?>
</select>
</form>
<? }

そして、関数を呼び出す必要があるときはいつでも、通常どおり配列を渡します。

参照渡しもできる

<?php
function drop_menu(&$Dog_array) {?>

この場合、関数内の配列に対する操作は、元の配列に直接影響します。

于 2012-08-13T07:05:10.333 に答える