Wie eine Online-Datenbank erstellen? (SQL + PHP?)

M

McMoneysack91

Gast
Liebe Freunde,

ich möchte eine simple Website erstellen, wo ein Nutzer/Anwender anhand von bestimmten Suchkriterien (entweder händisch eingegeben oder aus Dropdown-Menüs) seine gewünschte Information aufgelistet bekommen soll.

Beispiel: Jemand möchte herausfinden, ob das Auto, das er für sich rausgesucht hat einen Zahnriemen oder eine Steuerkette hat (wichtige Frage).

https://www.autosmotor.de/audi-a6-c5-typ-4b-zahnriemen-oder-steuerkette-67409

Diese Website ist genau auf dieses Thema spezialisiert und ich weiß gar nicht, wie oft ich mich ihrer bedient habe. Nun fällt mir in der Website-Landschaft ein weiterer Defizit auf, der mir als Autofahrer übel aufstößt...

"Handelt es sich bei dem Automatikgetriebe um einen Wandler, ein Doppelkupplungsgetriebe oder eine CVT?" Das ist in der Tat eine SEHR wichtige Frage, weil sie viel über die Geeignetheit für bestimmte Situationen verrät (Anhängerbetrieb, Bergfahrten, Stop-And-Go, Stau/Schleichen, etc.).

Leider gibt es weit und breit keine Website, die sich genau auf diese Frage spezialisiert und man muss ständig in Foren nach Anekdotenwissen graben. "Ich kannte mal einen, der einen kannte und dessen Cousin sagt, da ist eine 6-Gang ZF Wandlerautomatik drin."

Wäre doch schön, ein gigantisches Verzeichnis zu haben, wo man mit nur wenigen Klicks sein Wunschfahrzeug findet und direkt sieht, was verbaut ist.



__________________________________________________________________________

Der Aufbau soll SEHR simpel sein. So hier, in etwa:

beispiel datenbank.jpg

Selbstverständlich würde ich da noch nen Haufen Parameter mehr einfügen, weil all das auch innerhalb von Modellen über das Ergebnis entscheiden kann (Motorisierungen, Facelift ja/nein, etc.).



Nun also die Frage nach dem WIE.

Ich habe bislang nur in HTML/CSS gearbeitet. GANZ vereinzelt habe ich JavaScript auf meinen Websites für einfache Suchfunktionen eingebunden, diese jedoch NICHT selbst geschrieben sondern hier von Forenmitgliedern übernommen. PHP benutze ich eher oberflächlich, würde ich sagen, um meine Websites "zentral" aufzubauen. Ich verwende also die INCLUDE-Funktion, um Webseitenemelente von einem Zentralen "Architektur-Verzeichnis" zu laden.

Aber dieses Vorhaben schreit ja förmlich nach Datenbanken (SQL?) und PHP. Oder? Oder denke ich da viel zu weit?

Die Liste würde einzig und alleine durch mich (bzw berechtigte Personen) in der Quelldatei bearbeitet und ergänzt werden. Der Anwender muss eigentlich nichts selbst beitragen können. Er wird nur seine Parameter aus den Dropdown-Feldern auswählen müssen und dann die passenden Ergebnisse präsentiert bekommen.

Ich habe bei W3schools angefangen das SQL Tutorial durchzugehen, aber bei all den mannigfaltigen Funktionen frage ich mich, ob das wirklich das richtige ist. Kann es sein, dass ich mich viel eher auf PHP stürzen sollte?

Muss ich für die Erstellung einer solchen Datenbank unbedingt Programme wie MySQL etc benutzen oder kann ich schlicht eine Tabellendatei (Excel, Calc, etc.) anlegen?
 
"Handelt es sich bei dem Automatikgetriebe um einen Wandler, ein Doppelkupplungsgetriebe oder eine CVT?"

Frage: Das weiß jeder Fachmann. Es steht in allen Software etc.
Wer ist die Zielgruppe? Amateure/Fachfremde?
Und per Google kam ich bei Opel, VW etc. auf Übersichten, wo die Infos zu finden war.
 
In meine Augen kann sowas schon mit PHP MySQL "easy" umgesetzt werden.

Wichtig wird für dich vermutlich sein, sich vorher die Datenstruktur der Datenbank zu überlegen. Die Website ist dann ja nur noch das Frontend welches dir die gewünschten Daten anzeigt.

Sei dir aber bewusst dass zumindest Werkstätten diese Informationen haben, daher weiß ich nicht ob dein Projekt "sinnvoll" ist.

Dennoch ein schönes Thema zum üben denke ich :)
 
  • Gefällt mir
Reaktionen: McMoneysack91
McMoneysack91 schrieb:
Aber dieses Vorhaben schreit ja förmlich nach Datenbanken (SQL?) und PHP. Oder?
Wenn es nicht um tausende Modelle geht und man das ganze recht einfach halten kann (also es gibt nur Automodelle und deren Eigenschaften), kann da auch eine .csv mit php ausreichen. Sobald es komplexere Beziehungen zwischen den Datensätzen und Eigenschaften geben soll brauchst du eine Datenbank.
 
Public erreichbar?
Dann solltest du dir auch Gedanken drum machen, ob/wenn die Page mal von Little Bobby Tables besucht wird.
 
  • Gefällt mir
Reaktionen: jlnprssnr, Mordi, up.whatever und 2 andere
duAffentier schrieb:
Wer ist die Zielgruppe?
tatsächlich die, die die Foren mit genau diesen Fragen fluten. Bei den Fachwerkstätten liegen 200-Seiten lange Pampflete der Hersteller rum mit Millionen von Daten und Parametern, die einen Normalnutzer einfach überfordern und sogar die Suche erschweren würden.

Deswegen SOLLS ja gerade so "simpel" und nur auf das Wesentlichste runter gebrochen sein.

Es muss jetzt auch nicht unbedingt ein Nachschlagwerk für Getriebe sein. Das war jetzt nur MEIN persönliches Anliegen. Es kann alles mögliche sein. Ich wollte nur das Lernen von Datenbanken und PHP mit einem solchen "Proof of concept" Projekt verbinden.

aronlad schrieb:
Public erreichbar?
Dann solltest du dir auch Gedanken drum machen, ob/wenn die Page mal von Little Bobby Tables besucht wird.
Diesen Beitrag habe ich nicht verstanden.



Frage:

Brauche ich um bloßen Erstellen der Datenbank WIRKLICH ein spezielles Programm wie MS Access oder Libre Office Base? Ich mein, HTML, CSS und PHP kann man ja auch einfach in einem leeren Editor schreiben und einfach mit entsprechender Dateiendung abspeichern.
 
nciht schrieb:
Wenn es nicht um tausende Modelle geht und man das ganze recht einfach halten kann (also es gibt nur Automodelle und deren Eigenschaften), kann da auch eine .csv mit php ausreichen. Sobald es komplexere Beziehungen zwischen den Datensätzen und Eigenschaften geben soll brauchst du eine Datenbank.
Da bin ich tatsächlich nicht so sicher. Ich möchte ja nicht nur nach fertigen Zeilen filtern können, sondern auch durch alle Spalten hinweg "kreuz-und-quer" suchen können.

Beispiel:

"Zeig mir alle Autos von 2005 mit Wandlergetriebe" (also nur die Felder "Baujahre" und "Getriebeart")
"Zeig mir alle VWs mit über 3.2L Hubraum" (also nur die Felder "Hersteller" und "Motorisierung")

Dem Nutzer werden also zu jeder möglichen Spalte der Datenbank Dropdown-Menüs angezeigt. Er KANN sie alle befüllen für ein super genaues Ergebnis, muss aber nicht. Er kann auch schon ab einem Wert sowie "zeig mir alle CVT-Autos" Ergebnisse bekommen.

Als gutes Beispiel fällt mir eBay ein, wo man bei der Bestellung von Autoteilen alle möglichen Parameter mittels Dropdown auswählen kann und am Ende eine kleine Liste kompatibler Autos bekommt.
 
Oh Bobby :D
Kontext und Hinweise dazu: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html

Welche SPrachen und welchen Stack nutzt du normalerweise? Postgres? MySQL?

Von allen sprachen mit denen ich jemals gearbeitet habe finde ich PHP wirklich am unangenehmsten. ABer das ist subjektiv.

Wenn ich sowas from-scratch quick and dirty bauen muesste, wuerde ich verutlich symphony oder Django nehmen, das Datenmodell darin definieren. Die changes an der Datenbank dann bei aenderungen durch automatisch generierte Migrations ausfuehren und fertig. Dann ist das auch gleich halbwegs normalisiert und du musst dir keine gedanken uber queries machen. Das Modell optimieren und ordentliche indices kann man spaeter noch immer setzen.
Wenn du es in php bauen willst ist das ein ansatz: https://symfony.com/doc/current/doctrine.html#installing-doctrine
Ergänzung ()

Oh, siehe da: gibts fertig in django: https://github.com/trco/django-funky-sheets
Famous last words: deployen, 3 zeilen anpassen, spass haben:) Es sind garantiert, wie immer nur 3 Zeilen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Dante2000 und derlorenz
Ich bin etwas überfordert :D So viele Infos und ich weiß nicht wo ich anfangen soll XD

Wie gehe ich nun Schritt für Schritt vor? Ich mache jetzt ein wirklich superbanales Beispiel.

Ich erstelle jetzt eine .csv Datei im leeren Texteditor

Ich habe folgende 3 Spalten mit folgenden 3 Einträgen:

Geschlecht // Name // Augenfarbe

männlich // Manfred // grün
weiblich // Sonja // blau
männlich // Thomas // braun

Speichere sie nun auch als .csv ab.


Nun muss ich diese Datei doch bestimmt auf meinen Server hochladen, wo meine ganzen .html-Dateien liegen oder?

Und dann? (Das ist WIRKLICH nur Laienwissen)

Gehe ich dann innerhalb der HTML-Datei hin und fange an mit PHP-Befehlen wie <?include> diese Werte in einer Tabelle darzustellen?
 
McMoneysack91 schrieb:
Ich wollte nur das Lernen von Datenbanken und PHP mit einem solchen "Proof of concept" Projekt verbinden.
Dann rate ich dir ehrlich gesagt eher zu Lösungen wie google docs und dergleichen. Ein Webserver mit Datenbank ist kein Spielzeug und eher wenig geeignet, um von 0 an zu lernen.

Das angesprochene Thema SQL Injection bezieht sich u.a. genau auf sowas: Datenbank-Webseiten, die ohne das nötige KnowHow erstellt wurden. Wobei leider auch der eine oder andere Profi nicht an sowas denkt... Gibt ein böswilliger Besucher in dem Suchfeld, in dem du eigentlich den Fahrzeugtyp erwartest, etwas ganz bestimmtes ein, kann er damit deine komplette Datenbank löschen, wenn du dich nicht vor solchen (mutwilligen) "Eingabefehlern" schützt.

Ich weiß nicht was du so an Besucherzahlen erwartest, aber ich würde denken, dass so eine Datenbank doch eher ein Nischendasein führen wird - nicht zuletzt, weil mutmaßlich 9 von 10 Besuchern ihr Fahrzeugmodell gar nicht wiederfinden, weil es nicht in der Datenbank enthalten ist. Für den Anfang würde ich es daher simpel halten und besagte google docs nehmen und ein Spreadsheet erstellen und (lesend) freigeben. Das ist auch ohne Hintergrundwissen recht einfach und birgt weniger Risiken, dass ein Fehler deinerseits einen vollständigen Datenverlust zur Folge hat.
 
  • Gefällt mir
Reaktionen: madmax2010 und iSight2TheBlind
Oha, klingt gar nicht wünschenswert.

Könnte man dann nicht NOCH einfacher vorgehen?

Beispiel: ich erstelle einfach eine ganz stupide <table> (die ich mit CSS natürlich bildhübsch mache). Und jeder <td> Eintrag wird eine <a id> erhalten.

Und nun kann man oben am Anfang der Seite die gewünschten vorgegebenen Werte eingeben und wird mittels JavaScript zu dem besagten Wert navigiert?

Auf meiner Test-Website habe ich mit riesengroßer Hilfe der hiesigen Forennutzer eine ähnliche Aktion gemacht. Ich habe ein Glossar erstellt, welches (irgendwann mal) zigtausend Begriffe beinhalten wird. Jeder Begriff, der auch eine kleine Überschrift ist, hat eine <a id>. Ganz am Anfang der Seite ist ein Suchfeld. Fängt man nun an irgendwas zu tippen, werden einem alle dazu buchstablich passenden IDs angezeigt, bis der Nutzer die stehen hat, die er wollte. Nun braucht er nur noch auf den "LOS" Button Klicken und wird mittels <a href="#..."> zur passenden ID gebracht.

Ich denke NOCH viel einfacher wäre eine Filterfunktion mittels JavaScript. Oder?

Da die Tabelle lediglich per Hand geschrieben ein reiner Text sein wird, dürfte sie selbst mit zigtausend Einträgen keinen Browser überlasten. Und wenn doch, kann man doch bestimmt mit Seiten arbeiten. Also iwie 100 Einträge pro Seite.

Das aber wie gesagt nur, wenn der Nutzer noch keine Parameter eingegeben hat. Sobald er anfängt zu filtern, bleiben natürlich nur seine gewünschten Ergebnisse stehen.

Also

<table width="100%">
<tr>
<th>Geschlecht</th>
<th>Name</th>
<th>Augenfarbe</th>
</tr>
<tr>
<td>männlich</td>
<td>Manfred</td>
<td>grün</td>
</tr>
<tr>
<td>weiblich</td>
<td>Sonja</td>
<td>blau</td>
</tr>
<tr>
<td>männlich</td>
<td>Thomas</td>
<td>braun</td>
</tr>
</table>

Besonders historische Daten ändern sich ja nicht. Wenn ein Benz von 2005 Wandler verbaut hatte, hatte er nunmal Wandler verbaut und an der Tatsache wird sich nie wieder was ändern. Sprich hier wäre es meiner Ansicht nach gerechtfertigt, die paar Daten von Hand einzutippen.

Ich muss keine Funktionen für Massenimporte oder Veränderbarkeit haben. Lediglich eine schöne reichhaltige Liste, die vom Nutzer mit wenigen Klicks herunterzubrechen ist auf seine Wunschinhalte.


Also wird meine nächste Etappe sein, mich zu informieren, ob man Tabellen mit MEHREREN Auswahlparametern filtern kann.

Am Liebsten hätte ich ja, dass jede Spalte ein eigenes Dropdownmenü bekäme, in dem man filtern könnte. In unserem Beispiel mit den Leuten wären des 3 Menüs, die der Nutzer bedienen könnte.

Klickt er auf Geschlecht, werden ihm die beiden möglichen vorgeschlagen. Klickt er auf Name, werden die drei Namen vorgeschlagen. Klickt er auf Augenfarbe, werden die drei Augenfarben vorgeschlagen.

Wenn er jetzt 2 der 3 Felder befüllt und sagt "Zeig mir alle männlichen Personen, die Sonja heißen", kriegt er 0 Treffer oder noch besser die Fehlermeldung "Keine Ergebnisse". Wenn er sagt "Zeig mir alle männlichen Personen an" indem er nur 1 Dropdown Menü bedient, kriegt er 2 Treffer, Manfred und Thomas. Und so weiter.
 
Raijin schrieb:
Ein Webserver mit Datenbank ist kein Spielzeug und eher wenig geeignet, um von 0 an zu lernen.
Deshalb kann die "Datenbank" auch einfach eine csv auf deim eigenen PC sein, welche dann dort gepflegt und dann auf den Webserver übertragen wird. Ansonsten muss er eh regelmäßig Backups vom Webserver machen. So braucht er auch erstmal kein SQL lernen und lässt die Webseite z.B. über PHP einfach auf die CSV zugreifen - löscht die jemand, hat er zig Backups davon.

Edit:
Abseits davon - natürlich kann das Spielzeug sein, so lange da nicht die eigene Existenz dran hängt und man easy drüber hinwegkommt, sollte man alles verlieren, ist jeder erste Server zunächst mal Spielzeug, bzw. Hobby und da muss man sich jetzt auch nicht die immensen Gedanken um die Sicherheit machen. So wie ich den TE verstehe, nimmt er dieses Projekt jetzt nicht allzu ernst. Sicherheit um den Server und Datenbank ist dann Wissen, was er sich mEn auch später aneignen kann.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: KitKat::new()
nciht schrieb:
Abseits davon - natürlich kann das Spielzeug sein, so lange da nicht die eigene Existenz dran hängt und man easy drüber hinwegkommt, sollte man alles verlieren, ist jeder erste Server zunächst mal Spielzeug
Es ging mir eher darum, dass ein öffentlicher Server auch öffentlichen Gefahren ausgesetzt ist, von denen man insbesondere als Laie gar nichts ahnt. Bei einem Webserver ist das Missbrauchspotential sicher noch überschaubar, aber wenn man da zu naiv rangeht und sich beispielsweise durch Zuruf eines Kumpels im nächsten Step für schmales Geld einen VPS mietet, ist es nur eine Frage der Zeit bis $BotnetzwerkXY um einen Bot erweitert wird ;)
Das Internet ist nun mal ein Sumpf voller böswilliger Skriptkiddies


Wie dem auch sei, CSV würde die Komplexität deutlich verringern, das stimmt. Wäre auch ein gangbarer Weg ohne allzu viele Stolpersteine.
 
  • Gefällt mir
Reaktionen: aronlad und madmax2010
McMoneysack91 schrieb:
Am Liebsten hätte ich ja, dass jede Spalte ein eigenes Dropdownmenü bekäme, in dem man filtern könnte. In unserem Beispiel mit den Leuten wären des 3 Menüs, die der Nutzer bedienen könnte.

Klickt er auf Geschlecht, werden ihm die beiden möglichen vorgeschlagen. Klickt er auf Name, werden die drei Namen vorgeschlagen. Klickt er auf Augenfarbe, werden die drei Augenfarben vorgeschlagen.

Du musst dir dann natürlich gedanken machen:

Klickt er jetzt auf auf ein Geschlecht, sieht er alle Männer. Möchtest du dann noch weiter filtern und in der Datenbank unterscheiden?

Nur alle Männer mit Gründen Augen? Nur alle Männer die BJ88 oder später haben? Nur alle Männer mit einem Facelift.. ;) ?

Das wird bei KFZ entsprechend "komplex". EIn Golf 7 ist ja kein Golf 7. Je nach Modelljahr gibt es andere Motor/Getriebe kombinationen. Die gleiche Motor/Getriebe Kombination gibt es aber auch in einem T-Roc (vermutung).

Soll das nun mit angezeigt werden? Sollen die Daten verknüpft werden? Das muss deine Datenbank/System natürlich berücksichtigen.
 
  • Gefällt mir
Reaktionen: McMoneysack91
@Hanni2k sehr gute Frage und du kommst meinem Vorhaben schon sehr nah.

Sagen wir's so: egal wieviele Spalten meine Tabelle haben wird, es sollen exakt genausoviele Dropdown Menüs für den Anwender geben.

Wenn meine Tabelle

Hersteller -- Modell -- Baureihe -- Baujahr -- FL ja/nein -- Hubraum -- Leistung -- Getriebeart

als Spaltenüberschriften hat, dann muss dem Anwender auch genau so viel Filtermöglichkeit gegeben werden. Deshalb schreibe ich diese Wünsche/Befehle des Anwenders immer gerne in "..." weil ich ja die echten Programmierbefehle nicht kenne und stattdessen euch auf diese Weise vermittle, was der Anwender denn jetzt vom Computer haben will.

Es ist ja gut möglich, dass der Anwender nur nach einigen wenigen bestimmten Kriterien filtern möchte; er MUSS ja nicht aus allen Dropdown-Menüs was auswählen.

Er kann ja auch sagen: "Hey Tabelle, lass bitte nur noch Mercedesse der Baureihe W203 mit einer Leistung von 142PS stehen. Das ist nämlich meiner. Ich brauche keine anderen Filter setzen. Ich weiß, dass das Modell ein C180 ist und ich weiß dass die Baujahre 02/2000 bis 10/2007 ist."

Das heißt diese unterschiedlichen Dropdown-Felder haben untereinander eine UND-Bedingung, keine ODER-Bedingung.

Wenn ich zwei davon mit Einträgen versehe, dann MÜSSEN diese BEIDEN Einträge in einer Zeile vorhanden sein. Sonst hätte der Anwender in diesem Beispiel sowohl alle Mercedes der Baureihe W203 angezeigt bekommen UND alle möglichen Autos - auch nicht Mercedes - mit 142PS.

Worauf will ich hinaus?

Als ich hier im Forum um Hilfe für eine Suchfunktion bat, die den Anwender zum gewünschten <a id> href't, wurden mir einige Websites vorgestellt, wo mittels JavaScript ein Suchfeld so gestaltet wurde, dass aus dem gesamten Inhalt des Artikels nur noch die Wörter oder Textpassagen übrig blieben, die die Eingabe des Anwenders im Suchfeld beinhalteten. Ich könnte mir vorstellen, dass das der Sache nahe kommt. Bloß hat man dort mit einem einigen Filter gearbeitet. Nun ist die Frage, ob man mehrere Filter setzen kann UND ob man sie in eine UND-Beziehung zueinander bringen kann.

Keine Sorge, ich leiste schon fleißig meinen Part und lerne akribisch JavaScript in W3Schools :D
 
Das kannst du mEn noch immer recht einfach mit csv und script lösen. Du brauchst für die Filter nur ein script, welches dir aus der Tabelle immer die gewünschten Fahrzeuge heraussucht, sobald der Anwender auf filtern drückt, dann temporär ein eigenes array erstellt und dieses tabellarisch auf deiner Webseite darstellt.

Also Anwender wählt gewünschte Kriterien und drückt "Filtern" -> Script wird ausgeführt, welches in der csv nach den Kriterien sucht und diese in ein array schreibt -> array wird für den Anwender auf der Webseite grafisch ausgegeben.
 
  • Gefällt mir
Reaktionen: McMoneysack91
nciht schrieb:
Also Anwender wählt gewünschte Kriterien und drückt "Filtern" -> Script wird ausgeführt, welches in der csv nach den Kriterien sucht und diese in ein array schreibt -> array wird für den Anwender auf der Webseite grafisch ausgegeben.
Klingt nach der Top-Lösung. Mit Script meinst du dann vermutlich PHP? Oder doch JS?
 
Zurück
Oben