php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.11.2008, 20:35  
Neuer Benutzer
 
Registriert seit: 21.11.2008
Beiträge: 7
error404 befindet sich auf einem aufstrebenden Ast
Standard 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 (Smarty + MySQL = immer falsche Ausgabe)) 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
error404 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.11.2008, 20:45  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

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

Zitat:
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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 21.11.2008, 21:47  
Neuer Benutzer
 
Registriert seit: 21.11.2008
Beiträge: 7
error404 befindet sich auf einem aufstrebenden Ast
Standard

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.
error404 ist offline  
Alt 22.11.2008, 16:53  
Erfahrener Benutzer
 
Registriert seit: 10.11.2008
Beiträge: 163
PHP-Kenntnisse:
Fortgeschritten
iXtends befindet sich auf einem aufstrebenden Ast
iXtends eine Nachricht über ICQ schicken iXtends eine Nachricht über Skype™ schicken
Standard

und guck dir mal die Funktion mysql_fetch_array an. Dann musst du keine Schleife bauen und die Daten in ein Array schreiben.
iXtends ist offline  
Alt 22.11.2008, 16:54  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 22.11.2008, 17:47  
Neuer Benutzer
 
Registriert seit: 21.11.2008
Beiträge: 7
error404 befindet sich auf einem aufstrebenden Ast
Standard

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 (Smarty + MySQL = immer falsche Ausgabe) 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
error404 ist offline  
Alt 22.11.2008, 18:07  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

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.
Flor1an ist offline  
Alt 22.11.2008, 20:37  
Neuer Benutzer
 
Registriert seit: 21.11.2008
Beiträge: 7
error404 befindet sich auf einem aufstrebenden Ast
Standard

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
error404 ist offline  
Alt 03.12.2008, 15:28  
Benutzer
 
Registriert seit: 24.09.2008
Beiträge: 52
frank-ae befindet sich auf einem aufstrebenden Ast
frank-ae eine Nachricht über Yahoo! schicken frank-ae eine Nachricht über Skype™ schicken
Standard

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

Zitat:
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.

Geändert von frank-ae (03.12.2008 um 15:37 Uhr).
frank-ae ist offline  
Alt 03.12.2008, 15:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Ihr Profis
ohne Worte
Zitat:
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.
Zitat:
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.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (03.12.2008 um 15:52 Uhr).
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Smarty + MySQL = immer falsche Ausgabe m0use` PHP Tipps 2006 44 21.11.2008 20:30
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
Was ist Aufgabe des Templates (Smarty), was nicht? agrajag PHP Tipps 2007 8 24.02.2007 13:19
PHP, MySQL installieren frankys9 PHP Tipps 2006 10 16.03.2006 16:05
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
2 Mysql Abfragen in Smarty Simon9990 PHP Tipps 2005-2 3 08.07.2005 09:56
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
smarty mysql abfrage, tpl und mysql, tpl mysql template smarty, smarty mysql joins, smarty mysql tpl, smarty mysql, mysql smarty, mysql tabelle mit smarty abbilden, smarty für anfänger mysql, smarty mysql beispiel

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum