• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

SQL-Query ausgabe in 3 spaltiges responsive Grid packen - steh auf dem Schlauch!

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
Moin ihr PHP und SQL Götter :D

Habe ein eigentlich simples Problem. Möchte Daten aus einer Datenbank auslesen (z.B. 9 Zufällige Datensätze aus einer DB) und diese dann in einem responsive Grid darstellen: http://www.responsivegridsystem.com/calculator/

Die SQL Abfrage ist jetzt ja kein großes Problem. Sowas halt:

[src=php]$query = "SELECT db.foo, db.bar, db.anzahl FROM db order by RAND() LIMIT 9";[/src]

Nun sollte das ja in 3 Zeilen gepackt werden. Wenn ich da aber eine Schleife mache kommen ja 9 Zeilen raus, mit immer den selben 3 Datensätzen. Ihr versteht was ich meine?

Das ganze sollte ja so aussehen am Ende:

[src=html4strict]<div class="section group"> <div class="col span_1_of_3">
<h3 class="ico1">Name 1</h3>
Datensatz 1.1 Datensatz 1.2</div>

<div class="col span_1_of_3">
<h3 class="ico1">Name 2</h3>
Datensatz 2.1 Datensatz 2.2</div>

<div class="col span_1_of_3">
<h3 class="ico1">Name 3</h3>
Datensatz 3.1 Datensatz 3.2</div>
</div>


<div class="section group">
<div class="col span_1_of_3">
<h3 class="ico1">Name 4</h3>
Datensatz 4.1 Datensatz 4.2</div>

<div class="col span_1_of_3">
<h3 class="ico1">Name 5</h3>
Datensatz 5.1 Datensatz 5.2</div>

<div class="col span_1_of_3">
<h3 class="ico1">Name 6</h3>
Datensatz 6.1 Datensatz 6.2</div>
</div>


<div class="section group">
<div class="col span_1_of_3">
<h3 class="ico1">Name 7</h3>
Datensatz 7.1 Datensatz 7.2</div>

<div class="col span_1_of_3">
<h3 class="ico1">Name 8</h3>
Datensatz 8.1 Datensatz 8.2</div>

<div class="col span_1_of_3">
<h3 class="ico1">Name 9</h3>
Datensatz 9.1 Datensatz 9.2</div>
</div>[/src]

Die Frage ist jetzt wie muss die Schleife aussehen um dieses Ergebnis zu erzielen?

Also so:



Hat mir da jemand einen schnellen Rat? Irgend eine for-Schleife mit $i++ ?

Gruß godlike
 

Cybergreek

Boardgrieche

Registriert
21 Nov. 2017
Beiträge
365
Ich weiß nicht genau, wie Deine php-Kenntnisse sind und wie Deine Versuche bisher aussehen, deswegen beschreibe ich es mal kurz, vielleicht hilft Dir das schon weiter. Wenn nicht, sag Bescheid.

Als erstes gibst Du Dein einleitendes div aus, dann in einer Schleife die Datensätze einzeln und bei jedem dritten Datensatz die "zwischen"-divs. Also:

[src=php]
echo '<div class="section group"> ';
for (schleife mit hochzählendem $i) {
echo '<div class="col span_1_of_3"><h3 class="ico1">'.$db_name.'</h3>
'.$db_11_12.'</div>';
if ($i % 3 == 0) {
echo '</div>
<div class="section group">';
}
}
echo '</div>';
[/src]

Kann auch sein, dass Du ($i+1)%3==0 nehmen musst, je nachdem wo Dein $i anfängt.
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #3
Kann auch sein, dass Du ($i+1)%3==0 nehmen musst, je nachdem wo Dein $i anfängt.
Ich hatte bis dato noch kein $i irgendwo ;)

Hab das Ganze mal so angepasst:

[src=php]
$query = "blabla";
echo '<div class="section group"> ';
for($i=0; $i < 9; $i++) {
echo '<div class="col span_1_of_3"><h3 class="ico1">'.$row["name"].'</h3>
'.$row["test"].'</div>';
if ($i % 3 == 0) {
echo '</div>
<div class="section group">';
}
}
echo '</div>';[/src]
Allerdings bekomme ich jetzt nur gleiche Datensätze ausgegeben. Muss das Ganze Konstrukt noch in eine Schleife?
 

Cybergreek

Boardgrieche

Registriert
21 Nov. 2017
Beiträge
365
Das beantwortet die Frage nach den php-Kenntnissen...
(sorry, der musste sein ;) )

Wie kommst Du an Dein $row dran?
Das wird irgendeine db-Funktion sein, die Du auf Dein db-Objekt drauf lässt.
Das müsstest Du in der Schleife dann wiederholen.
Also:

[src=php]$query = "blabla";
$row = funktion_zu_db();
echo '<div class="section group"> ';
for($i=0; $i < 9; $i++) {
echo '<div class="col span_1_of_3"><h3 class="ico1">'.$row["name"].'</h3>
'.$row["test"].'</div>';
if ($i % 3 == 0) {
echo '</div>
<div class="section group">';
}
$row = funktion_zu_db();
}
echo '</div>';[/src]

Wenn das nicht hilft, dann poste mal ein bisschen mehr von Deinem Code. Also den Bereicht ab Definition der Abfragen bis zur Ausgabe.
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #5

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Je nachdem, wie viel du mit den Technologien arbeitest könntest du dir mal passende Frameworks angucken.
Clientseitig z.B. Bootstrap, welches unter anderem mit einem responsive Grid-System kommt. Kommt man mMn relativ schnell rein.

Serverseitig irgendein PHP-MVC Framework. Im Idealfall ist der einzige eingebettete php-code für deinen Anwendungsfall:
[src=php]
someClass.getResultTable();
[/src]

Zumindest der Query und eine aufbereitete Rückgabe sollte mMn aber in ein Service-Objekt.
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
501
Erweiternd zu @BurnerR:´s Antwort. Schau dir mal CodeIgniter an, da kommst du sehr schnell rein. Für den Einstieg in MVC und die Denkweise die du dafür brauchst ist das gut geeignet. Ich bin, weil ich mit CI irgendwann an meine Grenzen gestoßen bin, bei Laravel gelandet. Das ist offener und du hast mehr Freiheiten, die können einen am Anfang aber auch erschlagen.

Allein ein ORM wie Doctrine nimmt dir schon wahnsinnig viel Arbeit ab, Doctrine wird unter anderem in Symfony eingesetzt.

CakePHP wird auch oft eingesetzt, damit habe ich aber noch nicht gearbeitet.

Der Aufwand sich in ein solches System einzuarbeiten ist erstmal recht hoch, das System nimmt dir aber viel Arbeit ab und du kannst dich auf das wirklich wichtige konzentrieren, deine Logik, die du brauchst.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Das ist so der Schritt, wo die reine Programmierung[*] nicht mehr so stark im Fokus ist und es sich mehr zur Software-Entwicklung verlagert.
Meiner Meinung nach, sobald man etwas fitter mit reiner Programmierung geworden ist, ist es eigentlich immer obligatorisch, zu frameworks bzw. libs (z.B. für ORM) zu wechseln.

So beim zweiten drüberlesen wäre die Empfehlung aber eher, noch ein wenig reine Programmierung zu üben.
Da Grundlagen aber vorhanden sind wäre evtl ein Buch zu OOP oder "OOP mit PHP" eine gute nächste Anlaufstelle.
Im Idealfall lieber ein gutes Buch zu OOP (z.B. aus der "Heads First" / "Von Kopf bis Fuß" Reihe), statt ein "naja" Buch zu OOP mit PHP.



[*] = ganz grob: Probleme lösen orientiert an den von der Sprache explizit zur Verfügung gestellten Mechanismen
 
Zuletzt bearbeitet:

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
898
Also für solch kleine Dinge ein ausgewachsenes Framework zu nutzen und alles in irgendwelche Objekte zu packen, halte ich für wenig zielführend.
Bis man sich in CI / Symfony / Cake / oder was auch immer eingearbeitet hat, hat man so kleine Dinge schneller und ressourcenschonender prozedural programmiert.

Aber es ist irgendwie die Unart schlechthin geworden, alles OOP zu gestalten, ob es nun Sinn macht oder nicht.
Und wenn ich erst eine Klasse untersuchen muss (oder die passende Dokumentation wälzen) um eine einfache Aufgabe zu erledigen läuft was falsch.
Daher mal ein etwas älteres Pamphlet: http://okmaya.com/2014/10/16/oop-php-sucks/
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Im Update relativiert der Autor sein Pamphlet allerdings und schreibt sinngemäß "Nachdem ich jetzt etwas Erfahrung damit habe, finde ich Code Igniter doch nicht mehr ganz so schlecht" ;-).

Bis man sich in CI / Symfony / Cake / oder was auch immer eingearbeitet hat, hat man so kleine Dinge schneller und ressourcenschonender prozedural programmiert.
Das hat einen eigenen Namen bekommen: Technical Debt.

Der Umfang des eigentliches Projektes geht hier ja nicht draus hervor. Aber alleine für den Lerneffekt lohnt es sich erstmal, in jedem Falle möglichst good practice umzusetzen, auch wenn man das Gefühl hat, dass es ein wenig overkill sein könnte.

Und wenn ich erst eine Klasse untersuchen muss (oder die passende Dokumentation wälzen) um eine einfache Aufgabe zu erledigen läuft was falsch.
Das finde ich nicht so entscheidend. Wichtiger ist, Regression zuverlässig zu erkennen, den Code gut erweitern zu können. Oder auch mal Dinge zu ändern, ohne dass man sich durch das ganze Projekt wühlen muss. Oder das man auch ein Jahr später noch versteht, wie einzelne Aspekte des Code zusammen spielen. Oder konkreter eben auch, dass SQL-Abfragen an definierten Stellen auftauchen und nicht potenziell überall.

Es stimmt allerdings, dass:
1. Frameworks gerne grausam in der Einarbeitung sind.
2. Frameworks gerne mal 50% der Zeit im Weg stehen anstatt zu helfen
-> Meist ist dann entweder das Frameworks schlicht nicht so toll oder es passt nicht so gut zum Anwendungsfall.
-> Vermutlich noch häufiger: Man hätte das Problem auch ohne Framework, nur anders.
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #11
Äh, oh, hmmm....

Also ich brauch das, so mit DB Abfragen usw., evtl 4 Tage im Jahr. Wenn ich was wo anpassen muss oder schnell aus einer DB ein paar Daten wo einbinden soll. Das bekomme ich dann schon hin. Halt im herkömmlichen Sinn -> DB Abfrage, Schleife, Rows einbinden, fertig. Ich hab jetzt glaub nicht die nötige Ahnung mich in irgendwelche Frameworks einzuarbeiten, auch nicht die Zeit und danken tut es mir am Ende auch keiner. Kurse oder Fortbildungen hab ich auch noch nie bekommen. Die sollen froh sein wenn ich als Grafiker und Designer überhaupt irgendwelche Webseiten anpasse :coffee:

Oder in wie weit ist das kompliziert wenn man keinen Schimmer von Programmieren hat. Ich kann halt HTML Seiten erstellen, formatieren mit CSS, ne Datenbank irgendwie füllen und per PHP da wieder Zeug anzeigen lassen auf ner Webseite. Wenn ich da jetzt anfange bzw versuche mich wo einzuarbeiten wird es mir jetzt ja schon ganz anders :D
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
501
Einfaches beispiel aus CodeIgniter (version 2.x, pseudocode, entspricht aber dem von CI)

[src=php]
// Controllers / PageController.php

class PageController extends Controller
{
public function all() {
$all = $this->get_model('page')->all();
$this->view('page/list', $all)
}
}

// Models / PageModel.php

class PageModel extends Page
{
public function all() {
return $this->db->query('SELECT * FROM pages');
}
}

// Views / Page / list.php

<?php foreach($pages as $page) {

echo $page;
}?>


// öffne: deineUrl/Page und du siehst die liste
[/src]


Ein Framework nimmt dir einfach einiges an Arbeit und Strukturierung ab.
 

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
898
ch hab jetzt glaub nicht die nötige Ahnung mich in irgendwelche Frameworks einzuarbeiten,
Ich sag es mal so: Wenn Du die Grundzüge von php kennst, kannst Du auch mit einem FW starten.

Gezwungener massen verwende ich bei einem Projekt CakePHP.
Das Ding ist, ähnlich wie CI recht einfach auszubauen. Hat man sich mit dem MVC Konzept angefreundet und auch mit dem Gedanken alles in Objekte zu pressen, spricht nicht viel dagegen.
Ich persönlich sträube mich dagegen. Für die Meisten meiner Projektchen brauche ich kein Modelling und kein Database Abstraction Layer und für eine anzuzeigende Page gleich 3 Dateien zu schreiben widerstrebt mir.


Gerne verwende ich jedoch Hilfsmittel (die z.g.T. OO sind) wie Smarty als Template Engine oder MeekroDB als MySQLi-Wrapper.
Aber wirklich alles zu objektisieren, neeeee.
Mal böse übertrieben:
Code:
$BookName = fGetBookNameByISBN("1231231234");
vs.
Code:
$Book = new ClsBook();
$Book->SelectByISBN("1231231234");
$BookName = $Book->GetName();

Wobei auch ich nicht so weit gehen würde ein komplettes CRUD prozedural zu schreiben.
Es kommt IMO immer auf die Anwendung an, deshalb auch das komische Beispiel:
Möchte ich eine eigene Bibliothek verwalten, würde ich klar OO gehen. Ich möchte Titel ändern können und und und.
Will ich aber wirklich nur den Namen des Buches aufgrund der gegebenen ISBN auslesen (z.B. weil die Daten aus einem ERP-System kommen) würde ich nicht den Aufwand betreiben das in eine Klasse zu verpacken (das ist ja auch eine gern genutzte Möglichkeit der Klassen, die simple Zusammenfassung von Funktionen, meist um Kollisionen zu vermeiden)
 
Zuletzt bearbeitet:

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.327
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #14
also um ehrlich zu sein verstehe ich nur Bahnhof von dem was ihr hier schreibt. ich weiß halt was eine Variable ist, kann was mit echo ausgeben und dazu behersche ich google. Also Sachen wie mysql_real_escape_string usw. ne funktion kann ich auch schreiben und verstehen, alles darüber verstehe ich aber auch nicht. wie gesagt ich brauch das pro Jahr halt an 3 Tagen ungefähr...
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Ging aus dem ersten Beitrag bei dir jetzt nicht hervor, sah halt aus als wenn das ein Teilproblem eines größeren Projektes ist, an dem du kontinuierlich arbeitest oder so. Für dich ergibt ein Framework und Co. eventuell wirklich keinen Sinn.



Will ich aber wirklich nur den Namen des Buches aufgrund der gegebenen ISBN auslesen (z.B. weil die Daten aus einem ERP-System kommen) würde ich nicht den Aufwand betreiben das in eine Klasse zu verpacken (das ist ja auch eine gern genutzte Möglichkeit der Klassen, die simple Zusammenfassung von Funktionen, meist um Kollisionen zu vermeiden)
Meine persönliche Faustregel ist so:
Einmal ist in Ordnung. Aber auf das zweite mal folgt irgendwann immer ein drittes und viertes mal. Deswegen refactor ich, sobald eine Doppelung auftritt.

Dein Beispiel-Code verstehe ich nicht. Wo ist das Problem? 2 Zeilen Code? Weniger Zeilen stehen allgemein weit unten in der Priorität.

[src=php]
$Book->SelectByISBN("1231231234");[/src]
Das gehört ja in den Controller.

[src=php]
$BookName = $Book->GetName();
[/src]
Und das in die View, ggf. aber gekapselt in einem Decorator oder Presenter.

Ohne ORM kann ich eventuell noch nachvollziehen. Aber ohne Kapselung wild auf die Datenbank zugreifen fände ich schon sehr grausam.
Komme auch nicht aus der PHP-Ecke, glaube in PHP werden solche Dinge eher mal nahe gelegt.
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
501
@braegler:
Für einen einmaligen Zugriff kann ich das nachvollziehen, will ich aber nicht nur den Namen sondern auch den Author, erzeugt dein Beispiel aber schon einen Rattenschwanz, den ich mit einer Class vermeiden könnte.

zb. Laravels ORM nutzt static methods zum erzeigen des Objects.
[src=php]
$book = ClsBook::where(['isbn' => '1232'])->get();

$name = $book->name;
$author = $book->author;
[/src]
 

dexter

Cloogshicer®
Teammitglied

Registriert
14 Juli 2013
Beiträge
5.306
Habe ein eigentlich simples Problem. Möchte Daten aus einer Datenbank auslesen (z.B. 9 Zufällige Datensätze aus einer DB) und diese dann in einem responsive Grid darstellen:
ein responsive grid funktioniert bei der Aufgabenstellung recht gut, wenn man drauf scheisst und es weglässt.


  • hole 9 elemente aus der DB
  • floate diese
  • Kaffee
 
Oben