Optimale Vorgehensweise html5/php/my sql - Anfänger fragt

  • Hallo Zusammen!



    Ich möchte einen Konfigurator ähnlich:
    http://www.litetech.ch/de/configurator/



    programmieren.



    In html5 habe ich mich relativ gut
    eingearbeitet, bin mir jetzt aber nicht sicher, wie sich ein solcher
    Konfigurator am Besten umsetzen lässt.



    Laut gedacht würde ich jetzt so
    vorgehen.



    • Html Seite schreiben mit option
      select Feldern.


      Die Ausrichtung der Felder könnte ich
      über eine unsichtbare Tabelle erledigen.


    • Nach Auswahl einer select option
      z.B. Felge müsste eine Verbindung zu einer Datenbank aufgebaut
      werden (php???).


      Aus der Datenbank würde man dann
      Preis und Gewicht der mit select option ausgewählten Felge erhalten
      (mysql???).


    • Die Felge wäre ausgewählt
      (option select). Der dazugehörige Preis und das Gewicht würden auf
      der website anzeigt werden.


    • Die Einzelpreise und
      Einzelgewichte müssen addiert werden (php???)....und auf der Seite
      angezeigt werden.



    Würde mich über Feedbacks freuen, ob
    das so Sinn macht...


    und wo ich eventl. Mehr Input zum Thema
    finden kann. Die zwei mir vorliegenden php und mysql Bücher sind
    doch recht theoretisch gehalten.



    Besten Dank vorab!



    P.S. ...ist es möglich php und mysql
    zu umgehen??? Hier finden sich Wege, wie in einer select option Felge
    / Preis und Gewicht gleichzeitig angezeigt werden kann:
    http://stackoverflow.com/questions/1...t-on-the-right
    bzw. http://www.cs.tut.fi/~jkorpela/forms....html#multiple
    . Ich finde die Lösung sehr elegant...müsste allerdings einen Weg
    finden, wie ich die Einzelpreise und Einzelgewichte noch addieren
    kann.

  • Gehen wir auf den Direktlink zum Rechner (Direktlink) und schauen uns den Quelltext an, so erkennen wir:


    Code
    <script type="text/javascript">
    //<![CDATA[
    new Form.Element.EventObserver('wheel_set_front_wheel_felly_id', function(element, value) {new Ajax.Request('/configurator', {asynchronous:true, evalScripts:true, method:'put', parameters:'wheel_set[position]=front&' + Form.serialize('wheel_set_form') + '&id=felly' + '&authenticity_token=' + encodeURIComponent('fd29ca1f6d977362e6fe15afbf9aa9d78d336209')})})
    //]]>
    </script>


    Sobald du eines der select-Felder änderst wird mithilfe von JavaScript (Stichwort: AJAX) eine PHP-Datei angesprochen, was genau dort passiert lässt sich nur spekulieren, vermutlich wird, wie du schon erwähntest, eine Datenbank ausgelesen und der Wert wird an JavaScript zurückgegeben, dann kann JavaScript die erhaltenen Daten auswerten und die Tabelle mit den Resultaten entsprechend ändern.


    Du kannst PHP und MySQL umgehen, dementsprechend groß wird allerdings dein JavaScript-Code ausfallen (welcher sowieso schon recht beachtlich ist).


    Ich würde in diesem Fall meinen Rechner nicht ganz so dynamisch gestalten wie er hier vorzufinden ist, sondern würde mich nur auf PHP und eine Datenbank beschränken, zwar kann die Tabelle dann nicht so häufig neu geladen werden, es ist jedoch um einiges einfacher, eine entsprechende AJAX Funktion oder eine komplette Auswertung durch Javascript ist recht umständlich und kaum machbar wenn man sich noch nicht richtig auskennt.


    Das deine Bücher eher theoretisch gehalten sind ist klar, es sind Bücher.. ein toller Anreiz aber keine optimale Lernergänzung, klare Empfehlung hier: php-kurs.com
    Einfach mal ein paar Tage Zeit nehmen und die Punkte durchgehen, viel probieren, erste Ansätze deines Zieles programmieren und bei dem Punkt wo du nicht mehr weiter weißt bist du gerne eingeladen im Forum um Hilfe zu bitten.


    Sollte noch etwas in Sachen Umsetzung unklar sein darfst du auch gerne weiter nachfragen.


    Liebe Grüße und gutes Gelingen :love:

  • edit: oops da war jemand schneller =)


    Das "komplette Programm" würde ich sagen.
    Stichworte: mysql, php, jsvascript, ajax


    Per MySql speicherst Du Deine Daten
    - die Preise ect. müssen ja irgentwo her kommen. Kannst auch Files nutzenm. Ist aber nicht zu empfehlen.


    Per PHP erstellst du die Website dynamisch auf den Kunden bezogen
    - Kd eingeloggt, evtl Vorzüge, ect


    Per Javascript legst Du Events auf die Buttons bzw Select fields.
    - onchange() -- siehe zB hier: http://www.mediaevent.de/javascript/onchange.html


    Per Ajax lädst Du bei Veränderung ( onchange() ) die Preise, Größen ect vom Server nach.
    - wenn Daten erfolgreich geladen, dann zum letzten Punkt:


    Per Javascript sprichst Du die Betroffenen Felder/Tabellen/Ergebnisanzeigen an um die neuen Daten anzuzeigen.
    - zB: getElementById('gewicht').innerHTML = calcNewWeight(...);



    edit: wie Basiii schon sagte ist es einfacher ohne ajax. Somit müsste der benutzer zum neuberechnen das Formular absenden und die Werte würden seitens php erneuert.
    btw - Du solltest auch nicht auf das Formular verlassen. POST oder GET -Daten können "gefaked" werden.
    Soll heißen: verlass Dich nicht auf den in der Form stehenden Endpreis/Gewicht/ect. Es sollte serverseitig auf jeden Fall alle "Items" gegen gecheckt werden, sonst sendet Dir jemand per POST seine "eigenen" Werte =)


    Wobei diese Function sogar für beide Seiten - php-seitig und javascript-seitig - genutzt werden kann:
    - onchange lässt Du per ajax die php function auf dem server die Werte neu berechnen und gibst die neuen Daten zurück
    - wenn das Formular angesendet wird nutzt Du die gleiche function erneut, um zu sehen ob Auswahlt und Ergebnis passen


  • Hallo Basiii,


    zunächst mal vielen Dank für die Anleitung!!!
    Ich hätte dazu noch folgende Frage. Eine Kollege hat mir zu einer csv Datei geraten anstelle einer Datenbank > siehe z.B.:


    http://www.php-resource.de/forum/showthread/t-103487.html
    Ausserdem meinte er, dass mysqli anstelle von mysql die besser Lösung wäre.
    Kannst Du mir dazu noch eine zweite Meinung geben?!
    Auf jeden Fall noch schönes Wochenende!
    Grüsse aus Ludwigsburg.

  • Hallo cottton,


    auch hier vielen Dank für die tolle Anleitung!
    Du schreibst..."Kannst auch Files nutzenm. Ist aber nicht zu empfehlen." ...meinst Du damit csv Files.
    Die Version die mir ein Kollege als einfachere Alternative zu mysql empfohlen hat?
    Bsp.: http://www.php-resource.de/forum/showthread/t-103487.html



    Wie ist deine Meinung zu mysql versus mysqli?


    Auch Dir noch ein sonniges Wochenende!!

  • Du kannst Files nutzen - .txt, .dat, .csv ... . Es macht halt mehr Sinn eine Datenbank zu nutzen, sobald es "viele" Daten werden.
    Und ich denke bei dem was Du vor hast werden es nicht wenig sein.


    Unterschiede zw. mysql und mysqli weiß ich nicht. Würde aber auch gleich das hier empfehlen: http://www.php.net/manual/de/pdo.prepared-statements.php


    Zitat von http://www.webmasterwork.com/page/p359250-mysqli-oder-normales-mysql.html#post359250


    Bevor du nun aber beginnst, dich mit mysqli zu beschäftigen, rate ich dir eher, dich mit pdo-Treibern (mysql-pdo) zu beschäftigen. In der kommenden php -Version 6 werden die pdo-Treiber der empfohlene Standart für den Zugriff auf Datenbanken sein. Der Vorteil dieser pdo-Treiber ist, dass sie gemeinsame Schnittstellen nutzen. Dadurch ist die Migration von einem Datenbankmanagementsystem auf ein anderes wesentlich einfacher möglich, als bisher.


    Ich weiß ja auch nicht wie weit Du bist. Evtl ist es für Dich mit Files einfacher. Hab auch so angefangen. Allerdings wird es "komisch" sobald Du um die 50 000 Einträge einzulesen hast.
    Um es ein bischen zu verdeutlichen:
    durchsuchen von rund 50 000 Einträgen
    - in Files ~2 sec (wenn ich mich richtig erinnere) (einlesen plus durchlaufen/suchen)
    - in datenbank ~ 0.00x sec


    Btw - von "normalem" sql zu PDO kann man auch nochmal einen kleinen Geschwindigkeitsschub feststellen.
    Liegt u.a. an Sachen wie mysqli_real_escape_string(). Diese function wird im "normal"-sql gebraucht, um Benutzer-Input zu maskieren, ist aber auch arsch langsam.
    Bei PDO aber brauchst Du gar keinen Input maskieren (WENN man es richtig nutzt!).
    Aber ich schweife ab ... =)

  • Von Dateien rate ich hier ab da es sich ganz klar um eine Aufgabe für eine Datenbank handelt, diese sind dafür perfekt geeignet.


    Der Unterschied zwischen MySql und MySqli ist relativ einfach zu erklären:


    Das i steht in diesem Fall für improved (verbessern, aufbessern). MySqli bietet in erster Linie den Vorteil das es direkt in objektorientierte Programmierung eingebunden werden kann (für dich also derzeit eher uninteressant). MySqli bietet einige Funktionen mehr, es handelt sich hierbei grob gesehen lediglich um MySql (ohne i) ab der Version "4.1.irgendwas".


    PDO bietet in diesem Fall absolut keinen Vorteil gegenüber MySqli, der Aufwand beim programmieren ist nicht wesentlich geringer und auch die Geschwindigkeit von PDO ist im Durchschnitt nicht so gut wie die von MySqli.
    Maskieren bleibt dir übrigens auch bei PDO nicht erspart, das Prinzip ist nicht so weit ausgereift, dass man einfach darauf verzichten könnte sich gegen Injectons abzusichern, dabei geht es hier vor allem um Schaden der beim Auslesen angerichtet wird.


    Zur Performance:
    PDO ist genau dann schneller wenn viele Daten eingefügt werden.
    Beim Auslesen ist MySqli deutlich schneller und in diesem Fall würde die Datenbank nur ein mal gefüllt werden, danach wird sie fast nur noch ausgelesen und vielleicht mal geupdated wenn sich ein Preis/etc. anpasst, jedoch auch die Updates von MySqli sind kurioserweise etwas schneller.




  • Hallo Basiii,


    bei Dir möchte ich mich auch nocheinmal bedanken!!!
    Scheinst sehr viel mit dem Thema zu tun zu haben. Also ich gehe auf ne Datenbank - Ihr habt mich überzeugt.


    Vielen Grüsse!

  • Sehr gerne :love:


    Wie bereits angesprochen darfst du gerne im entsprechenden Bereich des Forums nachfragen wenn du Hilfe brauchst, denk dabei daran uns so viel Code und Information wie möglich bereitzustellen ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!