Avatar billede Morten Professor
05. august 2021 - 13:45 Der er 4 kommentarer

OOP med Foreach loop - Hjælp sidder fast

Hej Håber der er en der kan hjælpe mig med at komme videre.
Jeg har lavet det før hvor det virker, men af en eller anden oversag jeg kan ikke finde fejlen, måske kan i?

Jeg har nogle koder det er i OOP form. Så der kommer lige nogle class i method til functionen.

$page = Pages::find_all();
                   
                    foreach ($page as $page_value) : ?>

                        <tr>
                            <td><img class="admin-photo-thumbnail" src="<?php echo $page_value->picture_path().$page_value->image; ?>" alt="">
                                <div class="action_link">
                                    <a class="delete_link" href="delete-single-page.php?id=<?php echo $page_value->id; ?>">Slet</a>
                                    <a href="update-single-page.php?id=<?php echo $page_value->id; ?>">Rediger</a>
                                    <a href="../photo.php?id=<?php echo $page_value->id; ?>">View</a>
                                </div>
                            </td>
                            <td><?php echo $page_value->id; ?></td>
                            <td><?php echo $page_value->title; ?></td>
                            <td><?php echo $page_value->datetime; ?></td>
                            <td><?php echo $page_value->permalink; ?></td>
                            <td><?php echo $page_value->author; ?></td>
                        </tr>

                    <?php endforeach; ?>

class Pages extends Global_function
{
    protected static $db_table = "post";
    protected static $db_table_fields = array('title', 'text', 'image', 'permalink', 'meta_title', 'meta_description', 'author');

    public $id;
    public $title;
    public $text;
    public $image;
    public $datetime;
    public $permalink;
    public $meta_title;
    public $meta_description;
    public $author;
}

public function find_all() {

        return static::find_by_query("SELECT * FROM " . static::$db_table . " ");
    }

Noget jeg syntes der er mærkeligt er jeg kan godt få en array frem, men kan ikke foreach den eller while eller noget som helst :)
Kun print_r og var_dump

Sådan ser det ud

Array ( [0] => Pages Object ( [id] => 41 [title] => Copy [text] =>
Hej dette er dejlige Copy

[image] => DSC_0023.JPG [datetime] => 2021-08-05 07:45:42 [permalink] => Hej [meta_title] => asdfasd [meta_description] => Odder [author] => Hej med dig

Håber der er nogen der kan og vil hjælpe.

Med venlig hilsen
Morten
Avatar billede Morten Professor
05. august 2021 - 14:11 #1
Lige en rettelse til find_all public static function find_all() {

        return static::find_by_query("SELECT * FROM " . static::$db_table . " ");
    }
Avatar billede arne_v Ekspert
05. august 2021 - 14:25 #2
Hvad laver find_by_query ?
Avatar billede Morten Professor
05. august 2021 - 14:52 #3
Wupti her er den ;)

public static function find_by_query($sql) {
        global $database_th;

        $result_set = $database_th->query($sql);
        $the_object_array = array();
        while ($row = mysqli_fetch_array($result_set)) {
            $the_object_array[] = static::instantation($row);
        }

        return $the_object_array;
    }

    public static function instantation($the_record) {

        $calling_class = get_called_class();

        $the_object = new $calling_class;

        foreach ($the_record as $the_attribute => $value) {
            if($the_object->has_the_attribute($the_attribute)) {
                $the_object->$the_attribute = $value;
            }
        }

        return $the_object;
    }
Avatar billede Morten Professor
05. august 2021 - 21:28 #4
Fandt ud af problemet lavede en lille løsning med lidt mere statisk for det enkelte. Men i objekt forstand. Men også fint nok da den kun skal bruges en gang for en enkelt side.

Her er resultatet:

public function find_all_pages() {
        $upload_directory = "images";
        global $database_th;
        $pagesQuery = "SELECT * FROM post ";
        $pagesResult = $database_th->query($pagesQuery);
        while($page_value = mysqli_fetch_array($pagesResult)){
            echo '<tr>
                            <td><img class="admin-photo-thumbnail" src="' . $upload_directory . "/" .$page_value["image"].'" alt="">
                                <div class="action_link">
                                    <a class="delete_link" href="delete-single-page.php?id='. $page_value["id"].'">Slet</a>
                                    <a href="update-single-page.php?id='. $page_value["id"].'">Rediger</a>
                                </div>
                            </td>
                            <td>' . $page_value["id"] . '</td>
                            <td>' . $page_value["title"] . '</td>
                            <td>' . $page_value["datetime"] . '</td>
                            <td>' . $page_value["permalink"] . '</td>
                            <td>' . $page_value["author"] . '</td>
                </tr> ';
        }
    }

Hvis i kan se noget som ikke er godt og har en løsning skriv endelig :)

Med venlig hilsen
Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester