Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarty und MySQL

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Smarty und MySQL

    Hallo,

    ich habe das Problem, das ich aus einer (bitte jetzt nicht schlagen - ich lerne ja noch ) verschachtelten MySQL-Abfrage Informationen an Smarty geben möchte. Ich weiß jedoch nicht wie das gehen soll ... und ich habe das, was hier im Fred steht auch nicht wirklich so vestanden.

    Ich habe meine Frage schon in einem bestehendem Thread (http://www.php.de/php-tipps-2006/400...tml#post381580) gestellt, war aber da wohl scheinbar unerwünscht


    Funktionswunsch:
    Die index.tpl wird zuerst geladen und soll das "Grundgerüst" bzw. den Aufbau festlegen. Die kunde.tpl listet nur (sozusagen als "Kopf") die entsprechenden Kunden auf und die liste.tpl die zu den Kunden gehörende Domain.

    Beispiel:
    Code:
    Kunde A                                 (template kunde.tpl)
    - domain123.tld                       (template liste.tpl)
    - domain234.tld                       (template liste.tpl)
    - domain345.tld                       (template liste.tpl)
    
    Kunde B                                 (template kunde.tpl)
    - domain987.tld                       (template liste.tpl)                       
    - domain876.tld                       (template liste.tpl)
    - domain765.tld                       (template liste.tpl)
    
    usw.
    Meine dazugehörige Abfrage in PHP sieht bis jetzt (denn weiter komme ich nicht) so aus:
    PHP-Code:
    <?php
    include('connect.inc.php');

    define('SMARTY_DIR','smarty/libs/');
    require(
    SMARTY_DIR.'Smarty.class.php');
    $smarty = new Smarty();
    $smarty->template_dir 'templates/';
    $smarty->compile_dir 'templates_c/';
    $smarty->config_dir 'configs/';
    $smarty->cache_dir 'cache/';
    //$smarty->debugging = true;

    $sql=mysql_query("SELECT id,knr,name FROM archive LIMIT 10") OR die(mysql_error());
    $kunden_array = array();
    while(
    $row=mysql_fetch_array($sql))
    {
        
    $kunden_array[] = array(
          
    'id' => $row['id'],
          
    'knr' => $row['knr'],
          
    'name' => $row['name']);

    // Übleibsel vom Code, wo auch das Style in PHP
    // "integriert" war.
    // $abf_domains=mysql_query("SELECT * FROM archive_dom WHERE kundeid='".$row['id']."' ORDER BY domain ASC") OR die(mysql_error());
    //    while($row=mysql_fetch_assoc($abf_domains))
    //    {    $domid=($row['id']);
    //        $domain=($row['domain']);}

    }

    $smarty->assign('kunden_array',$kunden_array);

    $smarty->display('kunden.tpl');
    $smarty->display('index.tpl');

    ?>
    und das Template kunden.tpl so:
    Code:
    <div align="left" width="100%">
    <div align="left" style="background-color: #C0C0C0">Domains</div>
    {foreach from=$kunden_array item=kunden_array name=kunden_array}
    KNR: {$kunden_array.id} {$kunden_array.knr} {$kunden_array.name}
    <br>
    {/foreach}
    </div>
    Ich weiß, sieht noch nicht so prall aus, soll aber dann kommen, wenn ich weiß, was als nächstes kommt und wie das mit Smarty überhaupt funktioniert (bis gestern dachte ich noch, das wären die kleinen bunten Dinger mit der Schokolade drinne).

    Wie bekomme ich nun die zu den Kunden gehörenden Domains in die Liste???

    Ich danke schon mal im voraus

    error404


  • #2
    (bis gestern dachte ich noch, das wären die kleinen bunten Dinger mit der Schokolade drinne).
    Smarty != Smarties

    Wie bekomme ich nun die zu den Kunden gehörenden Domains in die Liste???
    -> JOIN
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design before you start to write code!
    2. Discuss and review it together with experts!
    3. Choose good tools (-> Adventure PHP Framework (APF))!
    4. Write clean and reusable software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Hallo,

      danke für die Anregung. JOIN verwenden um die Verschachtelung zu vermeiden, oder? Und wie wende ich das an? Seitdem ich mit PHP zugange bin habe ich die nicht einmal funktionsfähig zum Einsatz gebracht.

      Kommentar


      • #4
        und guck dir mal die Funktion mysql_fetch_array an. Dann musst du keine Schleife bauen und die Daten in ein Array schreiben.

        Kommentar


        • #5
          Hallo,

          JOINs verwendest du um Daten Tabellen-übergreifend zu selektieren. Im komplexen Datenmodellen kannst du JOINs zusätzlich für die Abbildung von Beziehungen verwenden. Hast du beispielsweise eine Tabelle mit Kunden und eine mit Bestellungen, kannst du über eine weitere Tabelle, in der jeweils die Primary Keys der beiden gespeichert sind eine Beziehung herstellen. Eine Abfrage aller Bestellungen eines Kunden kannst du dann etwa so stellen:

          Code:
          SELECT * FROM orders
          INNER JOIN orders_to_customers ON orders.orderID = orders_to_customers.orderID
          INNER JOIN customers ON orders_to_customers.customerID = customers.customerID
          WHERE customerID = '123';
          Ansonsten empfehle ich dir Literatur über das Thema Normalisierung / Denormalisierung und Datenbankdesign. Dort findest du sicher einiges über das Thema JOINs.
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design before you start to write code!
          2. Discuss and review it together with experts!
          3. Choose good tools (-> Adventure PHP Framework (APF))!
          4. Write clean and reusable software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #6
            Hallo,

            vielen Dank für Eure Antworten. Zeigt mir, das hier jemand gewillt ist, mir zu helfen. Aber um ehrlich zu sein, ich verstehe immer noch nur "Bahnhof" und "koffer klauen".
            Ich bin schon etwas älter und daher wahrscheinlich auch etwas schwerer von Begriff.

            Also seit zwei Jahren versuche ich mich in PHP und MySQL. Bis dahin @ iXtends hat mir für jede meiner Zwecke die Funktion mysql_fetch_assoc() vollkommen ausgereicht. Von mysql_fetch_array() habe ich keinen Plan und einfach nur in meinem Script übertragen, weil ich es (mitsamt des "Array-Makings") mittels copy and paste aus dem Beitrag http://www.php.de/php-tipps-2006/400...tml#post310645 in mein Script eingefügt habe. Es funktioniert ja auch - nur nicht so wie ich es möchte.
            Aber ich bin ja hier und habe im Forum für PHP-Einsteiger gepostet, um was zu lernen.

            @ dr.e: Eine geJOINte Abfrage habe ich schon mal gesehen. Aber was passiert da? Was geschieht mit welcher Anweisung? Ich meine, copy and paste mag schon mal eine Lösung für ein Problem sein, aber nicht für jemanden, der was lernen möchte. Sorry, mir sagt aber Dein Beitrag leider nichts.

            Ich habe woanders gelesen, das ich mein Problem auch darin lösen könnte, wenn ich verschachtelte Arrays erzeuge. Das sind aber genauso bömische Dörfer wie JOINs.

            Für konstruktive Beiträge, aus denen ich noch etwas lernen könnte, wäre ich schon ziemlich dankbar.

            Gruß
            error404

            Kommentar


            • #7
              Wenn du wirklich was lernen willst dann such dir ein Tutorial zu SQL oder kauf dir ein Buch! Damit kannst du wirklich lernen was JOINs sind. Im Endeffekt ist dass nichts anderes als ein Kreuzprodukt zweier Tabellen. LEFT JOIN, RIGHT JOIN, OUTER JOIN sind dann nur noch spezielle JOINs die halt bestimmte Datenmengen daraus bilden. Wie das genau funktioniert lieber woanders nachlesen wo es ausführlich beschrieben wird.

              Genauso die Geschichte mit den Arrays, es gibt genug Tutorials in denen das Erklärt ist, ansonsten gibts eben auch da wieder Literatur dazu.

              Im Forum helfen wir gerne bei Konkreten Problemen aber so allgemein zu erklären was Programmiergrundlagen sind dass sollte dann doch nicht unsere Aufgabe sien.

              Kommentar


              • #8
                Hallo,

                danke @ Flor1an. Gut, dann werde ich wohl darauf zurückgreifen, @localhost ein wenig herumzuexperimentieren, um die Funkrionsweisen verstehen zu können.

                Doch wie kann ich nun konkret ohne JOIN mit verschachtelten Arrays dem Smarty entsprechend meinem Funktionswunsch Daten übergeben?

                Ich möchte nun deshalb auf JOIN verzichten, da es INNER, OUTER, LEFT, RIGHT und was weiß ich sonst noch alles gibt und ich null Plan habe und immernoch gar nichts davon verstehe. Dann prügel mich doch lieber mit Arrays rum.

                Wie müsste meine Beispiel-Abfrage denn heissen, mit der ich herumexperimentieren kann?

                error404

                Kommentar


                • #9
                  Sorry das ich das Thema hier nochmal aufrolle, aber wenn ich sowas hier lese:

                  Zitat von Flor1an Beitrag anzeigen
                  Wenn du wirklich was lernen willst dann such dir ein Tutorial zu SQL oder kauf dir ein Buch!
                  Platzt mir wirklich der Kragen, ich habe manchmal den Eindruck das die Profis hier von den Anfängern genervt sind (dieser Eindruck ist in den letzten 2 Tagen wo ich mich ausführlicher mit diesem Forum beschäftigt habe , gewachsen)
                  Ich weiss nicht was wir Anfänger hier machen. meiner Meinung nach Suchen wir hier und wollen eine Hilfestellung von Euch Profis und ggf mit dem Fuss in die Richtige Richtung getreten werden, Niemand (ich gehe mal von mir aus und hoffe das, dass die Mehrzahl der Anfänger hier auch so sieht) möchte hier von Euch Profis fertige Scripte. Und gerade bei Smarty und anderen Templateengines habe ich von Euch noch keine brauchbare Antwort gelesen.
                  Wenn Ihr unter Euch bleiben wollt, dann schliesst das Forum und nehmt nur noch User auf die sich mit einem Könnensnachweis bei Euch bewerben und nehmt den Anfängerteil raus.

                  Der Tip, mal hier und da nach zu schauen ... ist völlig in ordnung und oft sieht man als Anfänger den Wald vor lauter Bäumen nicht mehr. Dann ist man auch sehr dankbar. Aber man bekommt das hier zu oft zu hören und vieles ist keine Hilfe, sondern man kommt sich einfach nur überflüssig vor.

                  Ein Forum lebt von einer Community... doch wenn Ihr Profis weiter eine solche Einstellung verfolgt, dann stirbt das hier. Ich weiss keiner macht das hier für Geld und jeder macht das Freiwillig, aber mit "freiwillig machen" kann man keine patzige Antwort rechtfertigen.

                  Ihr Profis vergesst das Ihr auch mal Anfänger wart.
                  Und bitte!!! Nur der Profi darf sich den hier Schuh anziehen, dem er auch passt.

                  Ich habe fertig [PUNKT]

                  @error404
                  Ich sehe auf den ersten Blick keine Fehler in Deinen Scripten, aber Du hast den Debugger ja an,

                  Poste doch mal bitte das Ergebniss.

                  bzw. ich seh grade Dein Problem, setz dich mal bitte mit der smartydocu auseinander( http://www.smarty.net ) doch gibt die Docu auch in Deutsch. Speziell schau Dir mal {section} und "LOOP" an.
                  Smarty "schleift" nämlich die "Ergebisse" der while-schleife auch nochmal durch und gibt dir die Ausgabe in der templatedatei.


                  V.G.
                  Frank.
                  Mein Projekt: www.my-matrix.de

                  Kommentar


                  • #10
                    Ihr Profis
                    ohne Worte
                    Niemand (ich gehe mal von mir aus und hoffe das, dass die Mehrzahl der Anfänger hier auch so sieht) möchte hier von Euch Profis fertige Scripte.
                    Da habe ich andere Erfahrungswerte. Den letzten Fall heute. Und selbst wenn viele sagen "Du sollst mirt das ja gar nicht programmieren' - selbst lesen und coden wollen sie irgendwie auch nicht.
                    Und gerade bei Smarty und anderen Templateengines habe ich von Euch noch keine brauchbare Antwort gelesen.
                    Das kommt sicher auf die Frage drauf an. In Detailfragen ist man in einer spezialisierten Community sicher besser aufgehoben. Ich finde dann auch nichts schlimm daran, das direkt zu sagen. Ich habe auch heute bspw. in einem Netbeans Forum angemerkt, dass ich es nicht wirklich sinnvoll finde, dort Topics für Programmierprobleme einzurichten.

                    Ich bin hier viel unterwegs und ich fordere auch ganz klar Gegenleistungen: Ein verständliches, ordentliches Posting z.B., eine klare Fragestellung, Bereitschaft zur Eigeninitiative. Und, ja - auch Grundlagenwissen. Ich kann im Anglerforum auch nicht ernsthaft fragen, "wie fange ich den längsten Hecht?", wenn ich nicht mal weiß, was ein Käscher oder eine Pose ist.
                    Grundlagenwissen bildet auch die sprachliche Grundlage, um sich in einem Forum - das nunmal schriftsprachbasiert ist - über Probleme und Lösungen austauschen zu können. Dieses Forum ist lösungsorientiert, wir sind keine Volkshochschule und zeigen nicht, wie man ein Array aufbaut. Wenn ich über Poesie rede, rede ich nicht über das Alphabet. Das kann man akzeptieren oder eben nicht.

                    Meine Meinung.

                    PS: Klar ist der Ton manchmal unangemessen. Wir sind aber alle auch nur Menschen. Nur mal so als Anschauung:

                    Code:
                    Sicht von A
                    A stellt einmal eine Frage zum Thema JOIN und bekommt darauf von B eine patzige Antwort.
                    
                    Sicht von B
                    B ist seit 5 Jahren im Forum und liest geschätzt das 250. mal die gleiche Frage zum Thema JOIN. 249 mal hat er brav den Link nach Selfhtml gepostet, heute hat er nen schlechten Tag. Er gibt eine patzige Antwort, weil A die Forensuche nicht benutzt hat.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      @nikosch... verdammt warum ziehst Du Dir den Schuh an?

                      Klar, ich gebe Dir recht wenn Du sagt das eine gewisse Art und Weise sich zu Artikulieren und auszudrücken vorhanden sein sollte, mich stören auch die schnell hingeschriebenen "dummen" Fragen aus denen keiner schlau wird und sich fragt "was will der eigentlich"

                      Um die gehts nicht.

                      Ich sehe aber immer wieder, das sich ein Anfänger einen Kopf macht, vieleicht den ein oder anderen Ausdruck nicht versteht. Aber darauf auf eine unschöne Art und Weise abgefrühstückt wird... == $subobtimal;
                      Klare Gegenleistung, iss schon klar... Mitdenken und selber Probieren, nachschlagen und lernen.
                      Aber ne patzige Antwort hat hier keiner Verdient wie "kauf dir ein buch". dann ignoriert die Anfrage doch einfach und gebt und Anfängern mal ne chance .. komische Fragen richtig zu beantworten.

                      Und um eins mal Klar zu stellen, ich greife hier nicht jeden "Profi" an, es gibt hier den ein oder anderen von dem wünsch ich mir eine Antwort von anderen weiss ich mittlerweile das da nur Spam kommt und diese keine wirkliche Hilfe sind.

                      V.G.
                      Frank
                      Mein Projekt: www.my-matrix.de

                      Kommentar


                      • #12
                        Ich seh mich auch nicht als Profi. Vielleicht deswegen. Nee, ich wollte einfach mal die andere Seite der Medaille ansatzweise beleuchten. Ich nehme den Trend auch wahr (auch bei mir selbst), ebenso aber auch nen Trend von mehr und mehr indiskutablen Erstpostings, derer Herr zu werden stetig schwieriger wird.

                        Eine Chance sehe ich im Ausbau des Wikis und der kommentierten Quellensammlung. Das ist zwar dann öfter auch nur ein Link, aber wenigstens ein guter.

                        Im konkreten Fall kann ich die Reaktion nach dem Posting in #6 leider verstehen. Mir geht da durch den Kopf:

                        - nach zwei Jahren sollte man ansatzweise das PHP Manual bedienen können und sich den Zusammenhang zwischen mysql_fetch_array() und mysql_fetch_assoc() selbst erschließen können

                        - verschachtelte Arrays und JOINS sind kein Hexenwerk, sondern können leicht auch spielerisch ausprobiert werden. Wenn ich zudem die Stichworte kenne, was hindert mich, die gegebenen Quellen Google, Wikipedia, Selfhtml ... abzugrasen?

                        - 'Ich will ja lernen' sagt sich genauso leicht wie 'mach ein Tutorial', ist aber auch kein Allheilmittel. Man muß es schon tun. Wenn einem das nicht zufliegt heißt das eben: Hosenboden, machen machen machen, lesen lesen lesen...
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Ich sehe Flor1ans Antwort nicht als patzig, sondern als richtungsweisend. Ich denke, wir müssen wirklich nicht immer wieder erklären, wie man mit JOINs umgeht. Es ist wirklich sinnvoller, zuerst ein Tutorial, oder noch besser: ein Buch zu lesen. Danach kann man weiterdiskutieren.
                          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                          Kommentar


                          • #14
                            Hi @ all,

                            nun, nachdem ich hier was ins Rollen gebracht habe, möchte ich mich mal dazu äussern ... ich hoffe, ich greife hierbei keinen ungewollt an oder trete auf irgendwelche Zehen, die nicht meine sind.

                            Wir wollen mal festhalten: Ich bin Smarty-Beginner und hatte eine Frage. Diese habe ich hier gestellt, da die Kategorie "PHP Einsteiger PHP Problemlösungen für Spracheinsteiger" heisst. Das passt: Ich bin PHP-Smarty-MySQL-Einsteiger und suche nach einer Problemlösung.

                            Das ich ein wenig Grundkenntnisse in PHP und MySQL mitbringe heisst zwangsläufig nicht, das ich unbedingt das weiß, was eventuell "grundsätzlich" wäre um hier mitschreiben zu dürfen.
                            Das ich mich hier melde heisst aber auch nicht zwangsläufig, das ich fertige Scripte haben will ... mit ein paar Denkansätzen, mit denen ich @localhost herumexperimentieren kann bis sich der Apache weghängt, wäre mir durchaus geholfen gewesen.

                            Nachdem ich ja hier nicht gerade soooooo wünschenswert abgefrühstückt wurde (was traurigerweise scheinbar in vielen Foren mit "php" im Domainnamen Standard geworden ist), habe ich mich bereits im Smarty-Forum angemeldet ... nicht bei den Einsteigern ... und dort habe ich eine Beispiel-Abfrage-Script (und es hatte noch nicht mal viel mit meinem Problem zu tun gehabt) serviert bekommen, mit dem ich was anfangen konnte. Copy and Paste @localhost und tüftel ... ahhhhhh, so scheints zu funktionieren.

                            Sicher, immer dieselben Fragen zu beantworten etc. macht durchaus Arbeit. ABER: Dann hätte mir ein Mod nicht anraten sollen, einen neuen Thread zu eröffnen. Dann solltet Ihr Doppelt- und Dreifach-Threads schliessen und vermeiden, sodaß die Benutzung der SuFu auch funktioniert. Ausserdem: Was hätte ich bei der SuFu eingeben sollen? JOIN? Das, von dessen Einsatz ich hierbei nicht gedacht habe? SMARTY? Habe ich ja ... und schon war es falsch.

                            Naja, sorry halt, das ich dem Titel entsprechend korrekt gefragt habe. Wenn alle "Fortgeschrittenen" die Nase so weit oben tragen wollen, dann sollte man hier explizit auf Fragen von Newbies verzichten. Das macht Euch weniger Arbeit, Ihr müsst Euch nicht immer wiederholen und ich mich nicht einfach so "komisch" abfrühstücken lassen.

                            @frank-ae: Danke für Deinen Einsatz hier und der wohl reellen Absicht mir helfen zu wollen. Aber wie gesagt konnte ich mir in einem anderen Forum schon Denkansätze für meine n00b-Probleme holen.

                            @nikosch: Als Nicht-wirkllich-was-versteher (wenn Du an meiner Stelle wärst) möchte ich sehen, wie Du mit den Dokumentationen umgehst. Du suchst nach JOIN ... liest das was da steht .... nach zwei Stunden immernoch der gleiche Satz und Du raffst einfach nicht was die da wohl meinen ... Du beginnst zu schielen, der Kopf raucht, bis Du letztendlich freiwillig ein "T" an das "JOIN" heftest ... diesen brauchst Du dann auch, damit die ganzen ARRAYs in Deinem Hirn wieder ordentlich gePUSHed werden, bevor diese noch den INNER LEFT JOIN verknoten und es zu einem mysql_error(brain) kommt.

                            Aber wenn's kein Hexenwerk ist (für mich doch) ... warum tat man sich dann hier so schwer, mir ein verwertbares Beispiel zu posten?

                            Naja, was soll's ... mir wurde ja nun irgendwie, irgendwo und irgenwann geholfen ... wenn auch nicht hier und wie gewünscht "brauchbar" und man hätte es von den Fortgeschrittenen verlangen können.

                            Kommentar


                            • #15
                              @nikosch: Als Nicht-wirkllich-was-versteher (wenn Du an meiner Stelle wärst) möchte ich sehen, wie Du mit den Dokumentationen umgehst. Du suchst nach JOIN ... liest das was da steht .... nach zwei Stunden immernoch der gleiche Satz und Du raffst einfach nicht was die da wohl meinen ... Du beginnst zu schielen, der Kopf raucht, bis Du letztendlich freiwillig ein "T" an das "JOIN" heftest ... diesen brauchst Du dann auch, damit die ganzen ARRAYs in Deinem Hirn wieder ordentlich gePUSHed werden, bevor diese noch den INNER LEFT JOIN verknoten und es zu einem mysql_error(brain) kommt.
                              Die Dokumentation ist eine reine Referenz und zum Lernen nicht geeignet, das steht hier schon lange fest.
                              Suchmaschinen hingegen liefern eine ganze Menge. Mittlerweile ist in das Suche-Dropdown sogar ein Google-Suchfeld integriert worden, weil die Google-Suche einfach deutlich besser ist, als die Boardsuche. Wenn du also nach etwas suchst, solltest du die CustomGoogle-Search statt der boardeigenen Suche verwenden, damit findest du eher, was du suchst.
                              Wenn du dem Suchbegriff noch ein
                              site:php.de
                              voranstellst, wird sogar nur innerhalb des Forums gesucht.
                              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                              Kommentar

                              Lädt...
                              X