• Hallo


    Bin relativ neu im Thema MySQL und PHP in kombination mit Joomla. Habe Joomla 3.4.5 installiert und ein Modul anhand dieser Anleitung (https://docs.joomla.org/J3.x:C…module/Adding_Form_Fields) erstellt, was soweit auch funktioniert. Nun wollte ich aus meiner Tabelle jedoch zwei oder mehr Spalten auslesen und alle Zeilen mit einem bestimmten Wert.


    Code
    class ModSeeyaHelper{        public static function getSeeya($params)    {// Obtain a database connection$db = JFactory::getDbo();// Retrieve the shout$query = $db->getQuery(true)            ->select($db->quoteName(array('name', 'live')))            ->from($db->quoteName('#__seeya'))            ->where('live = '. $db->Quote('open'));$db->setQuery($query);$return = $db->loadObjectList();return $return;


    Nun weiss ich nicht, wie ich mit der MySQL Abfrage weiter verfahren muss. Alle bisherigen Versuche haben zu keinem Ziel geführt. Der Debug zeigt mir an, dass zwei Zeilen zurückgegeben wurden.


    Code
    // No direct accessdefined('_JEXEC') or die;// Include the syndicate functions only oncerequire_once dirname(__FILE__) . '/helper.php';$seeya = modSeeyaHelper::getSeeya($params);require JModuleHelper::getLayoutPath('mod_seeya');


    Code
    foreach($seeya as $row) {
        $msg .= "<tr>";
        $msg .= "<td class='title'>" . htmlentities($row['name']) . "</td>";
        $msg .= "<td class='title'>" . htmlentities($row['live']) . "</td>";
        $msg .= "</tr>";
    }


    Was mache ich falsch?


    Vielen Dank und Gruss
    Daniel

  • Wie der Name der Datenbankabfrage-Methode schon sagt, erhälst du eine Liste aus Objekten zurück = Array aus Objekten, nicht Array aus Arrays.


    Code
    foreach($seeya as $row) {
        $msg .= "<tr>";
        $msg .= "<td class='title'>" . htmlentities($row->name) . "</td>";
    ...


    Setze beim entwickeln in Joomla-Konfiguration Fehler berichten auf Maximum. Dann werden dir entsprechende Fehler angezeigt.

  • bekomm ich denn mit

    Code
    $seeya = modSeeyaHelper::getSeeya($params);


    die objekte in $seeya ?


    joomla meldet bei

    Code
    while ($row = mysql_fetch_object($seeya)) {
        echo $row->name;
        echo $row->live;
    }


    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in

  • Zitat

    bekomm ich denn mit ... die Objekte ... ?


    Noch mal klarer. $seeya ist ein Array. Und jedes einzelne Array-Element ist bereits ein "fertiges" Objekt für direkte Weiterverwendung.

    Code
    $seeya[0] = Objekt. Reihe/Datensatz 1 der Tabelle #__seeya.$seeya[1] = Objekt. Reihe/Datensatz 2 der Tabelle #__seeya.usw.


    Dein Code war schon so weit richtig außer

    Code
    $row['name']


    Richtig ist für Objects aber

    Code
    $row->name


    Würdest du statt $db->loadObjectList() verwenden

    Code
    $db->loadAssocList()


    dann wäre dein Code richtig, da du ein Array aus Arrays zurück bekommst. Ist aber meist unhandlicher.

  • Hallo,
    ich bin auch Anfängerin und ich habe die Erfahrung gemacht, dass es oft hilfreich ist mal zu gucken wie Dinge in Core Komponenten umgesetzt sind. Da muss man nicht immer das Rad neu erfinden.


    Zum Beispiel siehst du in der Datei

    Zitat

    JOOMLA\administrator\components\com_menus\models\menus.php


    in der Methode

    Code
    public function getItems()


    die Datenbankabfrage und in

    Zitat

    JOOMLA\administrator\components\com_menus\views\menus\tmpl\default.php


    kannst du sehen wie die Items/Werte angezeigt werden.

    Die Seite https://docs.joomla.org/Insert…ving_data_using_JDatabase kennst du sicher, oder?


    Viele Grüße
    Astrid

  • echo $seeya[0]; gibt mir ein "o" zurück
    echo $seeya[1]; ein "p"
    ... (open)
    warum hab ich da die einzelnen Buchstaben drin?


    Code
    foreach($seeya as $row) {
        $msg .= "<tr>";
        $msg .= "<td class='title'>" . htmlentities($row->name) . "</td>";
    ...


    meldet "Warning: Invalid argument supplied for foreach()"

  • Du kannst ein Objekt / Array nicht via echo ausgeben, nur einen String, Integer etc.
    Versuche z.B.

    Code
    echo 'DEBUG: '.print_r($seeya, true);exit;


    Code
    echo 'DEBUG: '.print_r($seeya[0], true);
    exit;


    Ansicht dann am besten im Seitenquelltext der Seite im Browser.


    Wobei mir das ja verdächtig danach aussieht, dass o, p die Anfangsbuchstaben des Strings 'open' sind.
    Einen String kann man nun wieder arraymäßig Buchstabe für Buchstabe ausgeben.


    Zitat

    Warning: Invalid argument supplied for foreach()


    Auch das spricht dafür, dass kein Object/Array ist.


    Zitat

    Der Debug zeigt mir an, dass zwei Zeilen zurückgegeben wurden.


    Auch da würde doch angezeigt von welchem Typ die debuggte Variable ist.


    Wo hast du denn das foreach drinnen? Muss natürlich in selbe Datei / Methode, wo $seeya definiert wurde. Bspw. dein 2. Code, 1. Post, Zeile 7


  • Ich seh zum ersten mal die Werte aus der DB, bekomm nun aber einen neuen Fehler...


    Notice: Undefined variable: msg in /home/httpd/vhosts/seeya.live/httpdocs/modules/mod_seeya/tmpl/default.php on line 17DEBUG: Array ( [0] => stdClass Object ( [name] => Prototyp [live] => open ) [1] => stdClass Object ( [name] => Barns [live] => open ) ) DEBUG: stdClass Object ( [name] => Prototyp [live] => open )

  • habs jetzt so gemacht...

    PHP
    <?php
    foreach($seeya as $row): ?>
        <p>
        <b><?php echo $row->name;?></b><br><img src="http://www.seeya.live/img/open.png" alt="Offen" width="15" height="15"> <?php echo JText::_($row->live);?>
        </p>
        <?php endforeach; ?>
  • Zitat

    Notice: Undefined variable: msg in /home/httpd/vhosts/seeya.live/httpdocs/modules/mod_seeya/tmpl/default.php on line 17


    Na ja. Dann sehe in der Zeile 17 nach, warum dort msg nicht definiert ist (und trotzdem verwendet werden soll) und belege sie weiter oben mit einem Defaultwert, z.B. einem Leerstring (je nachdem welchen Typs sie ist) oder prüfe mit if !empty() oder if isset(), ob sie definiert ist, bevor sie verwendet wird.


    Sind jetzt aber PHP-Basics.


    http://php.net/manual/de/function.isset.php
    http://php.net/manual/de/function.empty.php

  • Ich wei&szlig; nicht wie tief du in die Programmierung einsteigen willst. Deshalb musst du wissen, ob es sich f&uuml;r dich lohnt, sich in eine andere Umgebung einzuarbeiten.


    Ich finde eine IDE bietet aber viele Vorteile.


    Ich nutze Netbeans: <a href="https://docs.joomla.org/NetBeans_overview">https://docs.joomla.org/NetBeans_overview</a>


    Eclipse habe ich getestet (<a href="https://docs.joomla.org/Configuring_Eclipse_for_joomla_development">https://docs.joomla.org/Config…se_for_joomla_development</a>), bin aber wieder zu Netbeans zur&uuml;ck.


    Viele im Bereich von Joomla programmieren mit&nbsp; PHPStorm (<a href="https://www.jetbrains.com/phpstorm/">https://www.jetbrains.com/phpstorm/</a>) Das kann man aber nur einen Monat testen und muss dann zahlen.


    Mir hilft das Debuggen oft. Wenn man sich im Programm auskennt, dann ist eine Ausgabe per print_r sicher schneller. Ich will aber beim Einarbeiten in etwas Neues einen Debugger nicht mehr missen! Ich habe so einen viel besseren Überblick.