Datenbanksortierung beim Scipt im php-kurs (bzw. DVD)

  • Hallo Team Axel,


    mal wieder was vom Anfänger.


    habe nun fast alles aus den DVDs durch. Besonders die letzte DVD mit der Datenbankanwendung war mit das Beste, wenn auch richtig anstrengend. Inzwischen versuche ich durch diverse Anpassungen einfach auch zu lernen.

    So habe ich es geschafft, die Anzahl der am Bildschirm angezeigten Datensätze durch den Benutzer selbst in das Script mit einzucodieren; bis der Benutzer einen anderen Wunsch festlegt (also nicht fest vorgegeben, wie im Script), aber auch andere Kleinigkeiten in CSS, etc.


    Woran ich im Moment bei Eurem Script ein wenig scheitere:

    Ich würde gerne eine benutzerdefinierte Sortierung durchführen können. Beispielsweise soll der Benutzer nach Nachnamen aufsteigend oder absteigend sortieren können. Dabei sollen allerdings die anderen Einstellungen beibehalten werden.

    Im Netz gibt es da einige Hinweise und ich habe auch so die ein oder andere Idee (Session wird es wohl sein müssen; Sortierlink im Tabellenkopf, somit auch die Ausgabe anpassen, etc.) - möchte aber das Ganze in das bestehende Script einbauen. Habt Ihr da ein paar Ansätze für Euer Script?



    Danke


    olkostbe

  • Wills du die sortierung von der Datenbank sortieren lassen oder erst später wenn sie schon auf dem rechner ist ?

    Für die Browser Variante gibt es doch https://datatables.net/

    Fals du das mit Datenbank und Php machen willst ist es ein anderes Thema wo ich nicht richtig helfen kann

  • Hi Basti,


    Jep, das ist ein Ansatz. Eigentlich wollte ich das in dem Script von Axel implementieren (des Lernens wegen). Aber wenn ich nicht weiterkomme hier im Forum, dann ist das Genau der link den ich brauchte. Danke!!


    Übrigens ist dort auch Datenbank und PHP hinterlegt - passt also.


    olkostbe

  • Eigentlich wollte ich das in dem Script von Axel implementieren (des Lernens wegen).

    In welchen Script meinst du ? Ist das irgendwo Online ,oder nur auf der DVD?

    Die Suche mit in den Script einbauen wäre sicher kein problem, ist sogar schneller. Weil wenn du nur noch Einträge anzeigen lassen mußt nach dem du gesucht hast. Ein Client Seitiges Script kann nur in den Daten suchen die schon runtergeladen wurden Theoretisch müßte man die ganze Tabelle laden um dann mit einen Script die gesuchten Einträgen rausfiltern.


    Eine Serverseitige Variante wäre da bestimmt besser , und wenn deine Datenbank mehrere 1000 Einträge hat wäre es erst recht besser und viel schneller

  • Hi Basti;


    geht auch bei php-kurs.com:

    link: https://www.php-kurs.com/db-login-bereich-db-abgleich.htm


    hier ist der Originalcode: https://www.php-kurs.com/downl…com-db-anwendung-kmpl.zip

    zum runterladen.


    Ich habe zwar mit dem Originalcode schon kräftig drin rumgespielt (sprich mein Code ist schon etwas anders), aber bei Unterstützung von Euch wird das kein Problem sein.


    Danke.


    olkostbe


    P.S.: Bisher lerne/spiele ich mit der Datenbank, also von Hunderten von Daten zu sprechen ist etwas übertrieben.

  • Die Liste willst du jetzt sortieren ?


    Es gibt mindestens 3 möglichkeiten die ich kenne.

    Am Browser mit JS zb mit den dataTables Script

    Mit der Datenbank zb so

    SQL
    1. SELECT * FROM `TabellenName` ORDER BY WasSollSortiertSein ASC

    Oder mit Php in array Speichern

    Code
    1. $viehzeug = array("hund", "katze", "maus", "löwe");
    2. sort($viehzeug);

    Es gibt noch mehr möglichkeiten die bestimmt besser sind. Deswegen lass dir das mal von den Php Profis erklären.

    Ich würde das wohl auch hinbekommen aber ist bestimmt nicht vorzeige fähig.

    P.S.: Bisher lerne/spiele ich mit der Datenbank, also von Hunderten von Daten zu sprechen ist etwas übertrieben.

    Die hat man aber schnell zusammen wenn man zb ein Chat baut oder was auch immer. Da währe eine Sortierung mit der Datenabank vorteilhaft.

    Bei den Chat den ich gerade versuche zu baue lasse ich auch nur die 100 Letzten Beiträge anzeigen ,weil eine Sortierung mit JS da kein sinn hätte wenn ich mehrer 1000 Einträge hätte die ich erst alle laden muß

  • Hey,


    du kannst das angeklickte Formularfeld, wie es sortiert werden soll, nach dem Absenden des Formulares über Post/Get auslesen. Nun hast du eine Value vorliegen.

    Nehmen wir da Name. Wenn du diesen Wert hast führst du in einer if-bedingung dann die DB-Abfrage SELECT name, nachname, alter FROM Tabelle ORDER BY name DESC/ASC. Du musst dich dann nurnoch für DESC oder ASC entscheiden.

    Dann werden dir die Daten anstatt unsortiert, sortiert zurückgegeben. So brauchst du dann auch kaum was an der Ausgabe zu ändern.


    Grüße,

    Stef

  • Hi,


    Die erste Version von Basti werde ich als letzte Möglichkeit einsetzen, wenn ich an allem weiteren scheitere.


    Die zweite Version habe ich mal auf die Schnelle ausprobiert:

    Bin in die Datenbank (via phpmyadmin) rein und habe die Datenbank sortiert (habe ich total vergessen, dass man so auch ran kann).

    Funktionierte erwartungsgemäß hervorragend.

    ABER: Wenn ich jetzt das Script von Axel aufrufe, werden die Datensätze nicht sortiert wiedergegeben.

    Habe ich hier einen gedanklichen Fehler? Danke für Hinweise.


    Die dritte Version mit PHP und array ist genau die Version, bei der ich in dem Axel Script Schwierigkeiten habe, weil die Ausgabe durch die vielen Verschachtelungen ... na sagen wir mal ziemlich "hochgetuned" ist. Die Funktionsweise mit dem Array ist mir schon klar.

    Ich glaube auch, dass ich vermutlich auch mit einer Session arbeiten muss, um die Sortierung auf der jeweiligen Spalte zu halten - richtig?

    Vielleicht kann mir da das Axel Team weiterhelfen. Danke


    olkostbe


    P.S.: Bin bald wieder nicht mehr Strohwitwer, somit bitte Verständnis, wenn ich ein wenig Zeit brauche.

  • Wenn die Daten aus einer Datenbank kommen, ist das die dümmste Idee

    Ja schon,wenn die sowieso aus Datenbank kommen kann man sie ja gleich sortiert ausgeben lassen.


    Gehen wir mal von aus der läßt sich das nicht aus der DB sortiert ausgeben und klatscht alle Einträge raus ( zb 1000 Stück ).

    Wie würde man die dann mit Php sortieren ? Mit arrays weiß ich wie,nur wie macht man es ohne ? und ohne Js.?

  • Ungetestet, könnte aber passen

    Mit ein paar Anpassungen sollte man damit jede Tabelle darstellen können. Ich habe bewusst die einfachste Methode geschrieben, die sollte auch ein Anfänger nachvollziehen können.

  • Gerade mal die Variante von m.scatello ausprobiert als Schmalspurvariante blank ohne in Axels Script einzubauen: Danke klappt!

    Mit den Anpassungen von mir, hier das Script:


    Werde nach ein wenig Zeit das dann in das Axel Script einbauen. Mal sehen wie mein Level ist. Wenn es dumm läuft muss ich mich halt wieder hier im Forum als Anfänger outen (-> Danke für den Hinweis m.scatello )


    Nur so als Hinweis. Dieses Script hat bei mir nicht funktioniert:

    Das Ganze kommt dann mit der Fehlermeldung:

    Notice: Undefined variable: reihe in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 46
    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 46


    Mit ist zwar klar das die variabel $reihe nicht definiert ist, aber komme nicht dahinter wie ich diese Variable richtig definieren soll.


    Vielleicht hier ein Korrekturhinweis zum Lernen, was mein Denkfehler ist von den Experten. Danke schon jetzt.



    Am Schluss dann noch die 2. Frage von oben: Trotz Sortierung in der Datenbank wird das nachher nicht angezeigt. Warum ist das so?

    (Auch hier nur zum besseren Verständnis der Materie; - ich kann ja sonst niemanden fragen).


    Danke und gute Nacht


    olkostbe

  • Hallo m.scatello


    Hatte ich auch schon probiert:

    Folgende Fehlermeldung:


    Notice: Trying to get property 'vorname' of non-object in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 47
    Notice: Trying to get property 'nachname' of non-object in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 48
    Notice: Trying to get property 'anmerkung' of non-object in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 49
    Notice: Trying to get property 'erstellt' of non-object in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 50
    Notice: Trying to get property 'vorname' of non-object in C:\xampp\htdocs\projekte\db-test\sortieren.php on line 47


    wiederholt sich dann für jeden Datensatz.


    Muss also ein anderer Fehler von mir sein.

  • Hey,


    olkostbe :

    Du musst auch FETCH_OBJ hinzufügen als Parameter. Sonst erhälst du generell Arrays zurück.


    ich habe es so mit meinem Vorschlag gemeint:



    Grüße,

    Stef

  • Stef

    Keine schlechte Lösung, aber


    Da hast du doppelte Zeilen, besser wäre


    Code
    1. $query = "SELECT id, name, rang, created_at FROM bewerbungen ORDER BY created_at";
    2. if($sortWay === "sortDesc")
    3. $query .= " desc";
    4. else
    5. $query .= " asc";
    6. $stmt = $dbv->prepare($query);
    7. $stmt->execute();
    8. $data = $stmt->fetchAll(PDO::FETCH_ASSOC);