SQL-Abfrage-Parameter einem Link mitgeben

SQL-Abfrage-Parameter einem Link mitgeben | PSD-Tutorials.de

Erstellt von strichcode, 08.01.2020.

  1. strichcode

    strichcode Nicht mehr ganz neu hier

    Dabei seit:
    18.10.2007
    Beiträge:
    90
    Geschlecht:
    weiblich
    SQL-Abfrage-Parameter einem Link mitgeben
    Guten Tag zusammen.
    Ich möchte von einer php Seite heraus Links aufrufen können, die Parameter für eine SQL-Abfrage mit bringen.

    Beispiel: auf der Seite ausgabe.php befinden sich sehr viele Artikel und ich möchte dem Besucher eine Art "Sortierfunktion" anbieten.
    Das Einfachste wäre ja die Seite mehrfach zu kopieren und in jeder dieser Kopie die Sql-Abfrage zu ändern. Das möchte ich irgendwie verhindern, da das gesamte Projekt aus zu vielen Seiten besteht.

    Meine herangehensweise funktioniert aber nicht richtig.
    In die Datei ausgabe.php habe ich geschrieben:

    $sortkrit = $_GET['Sortkrit'];
    $abfrage = "SELECT * datenbank WHERE datenbankfeld LIKE 'on' ORDER BY '$sortkrit'";

    weiter unten

    <a href="ausgabe.php?Sortkrit=PLZ">sortiert rauf</a>
    <a href="ausgabe.php?Sortkrit=PLZ DESC">sortiert runter</a>
    (Die Ergebnisse auf der Seite sollen z.B. nach Postleitzahl sortiert werden.)

    Es passiert genau nichts. Beim Klick auf einen Link wird die Seite neu aufgerufen und in der URL steht: ausgabe.php?Sortkrit=PLZ (oder PLZ DESC) aber der Inhalt der Seite hat sich nicht verändert. error_reporting ist an.
    Was kann ich tun? Entschuldigt bitte die Formulierungen, ich benutze vlt. nicht die richtigen Fachbegriffe, meine php-Kenntnisse beschränken sich darauf, bis genau hier hin gekommen zu sein.
    Könnt Ihr mir mal auf die Sprünge helfen und beim Denken helfen?

    Lieben Dank.
    Heike
    PS. Wo ist der Button hin, mit dem man den Code besser darstellen kann?
     
    #1      
  2. TutKit

    TutKit Vollzugriff

    Vollzugriff auf sämtliche Inhalte für Photoshop, InDesign, Affinity, 3D, Video & Office

    Suchst du einen effektiven Weg, um deine Geschäftsideen aber auch persönlichen Kenntnisse zu fördern? Teste unsere Lösung mit Vollzugriff auf Tutorials und Vorlagen/Erweiterungen, die dich schneller zum Ziel bringen. Klicke jetzt hier und teste uns kostenlos!

  3. Kiddo

    Kiddo Nicht mehr ganz neu hier

    Dabei seit:
    02.07.2010
    Beiträge:
    90
    Geschlecht:
    männlich
    Ort:
    Offenburg
    Software:
    PS, PSPad, Brackets, Wordpress
    Kameratyp:
    Olympus DigiCam VH-210
    SQL-Abfrage-Parameter einem Link mitgeben
    Müsste es nicht heißen:
    Code (Text):
    1. $abfrage = "SELECT * FROM `datenbank` WHERE `datenbankfeld` LIKE 'on' ORDER BY '".$sortkrit."'";
     
    #2      
  4. strichcode

    strichcode Nicht mehr ganz neu hier

    Dabei seit:
    18.10.2007
    Beiträge:
    90
    Geschlecht:
    weiblich
    SQL-Abfrage-Parameter einem Link mitgeben
    Daaanke fürs Mithelfen.
    Wenn ich ORDER BY '".$sortkrit."'"; mit den beiden Punkten schreibe, dann ist es wie vorher. Die URL wird brav geschrieben, aber es passiert nichts.

    Wenn ich alle Hochkomma schreibe, also exakt genau, wie Du es vorschlägst, dann steigt es mit einer Fehlermeldung.... Syntax-Error aus.
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''datenbank.......
     
    #3      
  5. Kiddo

    Kiddo Nicht mehr ganz neu hier

    Dabei seit:
    02.07.2010
    Beiträge:
    90
    Geschlecht:
    männlich
    Ort:
    Offenburg
    Software:
    PS, PSPad, Brackets, Wordpress
    Kameratyp:
    Olympus DigiCam VH-210
    SQL-Abfrage-Parameter einem Link mitgeben
    Ja, weil du bei deinem alten SQL-Code das "FROM" vergessen hast. Wo soll er denn das * hernehmen? > FROM `datenbank`, und das FROM hat bisher gefehlt.
     
    #4      
  6. strichcode

    strichcode Nicht mehr ganz neu hier

    Dabei seit:
    18.10.2007
    Beiträge:
    90
    Geschlecht:
    weiblich
    SQL-Abfrage-Parameter einem Link mitgeben
    oh, nein.
    Sorry.
    Bei mir steht ganz brav ein "FROM".
    Das es oben fehlt, liegt daran, daß ich nach copy&paste aus meinem eigentlichem Datenbanknamen einen unverfänglichen für hier gemacht habe.Da hab ich die Brille nicht aufgehabt.
    Bei mir steht ganz ordentlich SELECT * FROM datenbank WHERE.....

    Er stellt die Seite ja auch ordentlich dar. Alle Inhalte kommen wie gewünscht. Nur von meinem Link auf die Seite ausgabe.php?Sortkrit=PLZ, sortiert er eben die Inhalte NICHT nach PLZ. Also er ignoriert das was hinter dem ? steht. Vielleicht macht man das gar nicht so?
     
    #5      
  7. owieortho

    owieortho Aktives Mitglied

    Dabei seit:
    25.06.2010
    Beiträge:
    722
    Geschlecht:
    männlich
    Ort:
    9.8241,51.3515
    Software:
    PS CS5, HomeSite
    Kameratyp:
    Casio EX-FH20
    SQL-Abfrage-Parameter einem Link mitgeben
    In solchen Fällen schaue ich mir an, :
    • was (in Deinem Beispiel) rauskommt, wenn per
      PHP:
      1. echo $sortkrit;
      die Übergabe der Variablen angezeigt wird
    • den Quelltext der resultierenden Seite, in Deinem Fall reicht eine Inspektion der fraglichen Links
    • prüfe, ob der Aufruf funktioniert, wenn Du die Ziel-URL manuell eingibst
    • wertet das empfangende Skript die Variable auch aus (Schreibweise beachten)? Auch hier prüfen, was in welcher Form in das SQL-statement übergeben wird. Lass gegebenenfalls auch das resultierende SQL per echo anzeigen
    auf diesem Weg lassen sich einige Fehler entdecken.
    Viel Erfolg
    O.
     
    #6      
  8. Kiddo

    Kiddo Nicht mehr ganz neu hier

    Dabei seit:
    02.07.2010
    Beiträge:
    90
    Geschlecht:
    männlich
    Ort:
    Offenburg
    Software:
    PS, PSPad, Brackets, Wordpress
    Kameratyp:
    Olympus DigiCam VH-210
    SQL-Abfrage-Parameter einem Link mitgeben
    Hmm ... noch einen Schreibfehler habe ich entdeckt, und zwar in der SQL-Abfrage schreibst du die Variable $sortkrit mit kleinem "s", aber bei den Parametern in der URL übergibst du "?Sortkrit=PLZ" mit großen "S". Liegt es vielleicht daran?

    Sorry, habe übersehen dass die $_GET auch mit großen "Sortkrit" ausgelesen wird, also vergiss was ich sagen wollte.
     
    Zuletzt bearbeitet: 09.01.2020
    #7      
  9. m_c

    m_c Nicht mehr ganz neu hier

    Dabei seit:
    26.08.2007
    Beiträge:
    164
    Geschlecht:
    männlich
    SQL-Abfrage-Parameter einem Link mitgeben
    Gibt es eine Ausgabe, wenn ORDER BY weg ist?
    Das ORDER BY sollte `Spaltenname` heißen. Die Reihenfolge muss außerhalb der Bezeichnung sein, also `Spaltenname` DESC. Probieren kann man auch Spaltenname.

    Außerdem ist die Abfrage so, wie sie jetzt, extrem anfällig für "Hacking".
     
    #8      
  10. strichcode

    strichcode Nicht mehr ganz neu hier

    Dabei seit:
    18.10.2007
    Beiträge:
    90
    Geschlecht:
    weiblich
    SQL-Abfrage-Parameter einem Link mitgeben
    Ganz lieben Dank an alle! Es funktioniert.
    Eigentlich sogar genauso, wie ich es oben geschrieben habe. Ich habe noch einiges rumprobiert, heute morgen dann ging es. Möglicherweise hat mich der Browser veräppelt, oder ich hab irgendwo ein ' nicht richtig gehabt.
    Sich das ganze mit echo anzeigen zu lassen ist ein extrem hilfreicher Tipp. Danke.

    Erfreulich fand ich auch, daß man sogar nach Datenbankfeldern sortieren kann, in denen z.B. ein 'on' steht. Mit dem Zusatz DESC erscheinen die Datensätze zuerst, die die Anforderungen erfüllen. Sehr nützlich für mich. (Und vielleicht auch für andere.)
    Warum das? Und was kann ich da besser machen?
     
    #9      
  11. owieortho

    owieortho Aktives Mitglied

    Dabei seit:
    25.06.2010
    Beiträge:
    722
    Geschlecht:
    männlich
    Ort:
    9.8241,51.3515
    Software:
    PS CS5, HomeSite
    Kameratyp:
    Casio EX-FH20
    SQL-Abfrage-Parameter einem Link mitgeben
    Wer Deinen Quelltext liest - und das würde jede/r tun, der/die was im Schilde führen - kann so Informationen über Deine Datenbankstruktur erlangen. Bspw., dass Du deutsche Begriffe für Datenbankobjekte verwendest. Dann brauch man schon mal nicht mehr mit `user` rumprobieren sondern gleich mit den deutschen Begriffen.
    Benenne Deine Formularelemente bzw. Deine URL-Codierungen (die Variablennamen-Werte-Pärchen hinter dem ? in der URL) unverfänglich und vergebe erst serverseitig im php-Skript die tatsächlichen Namen. Security by obscurity nennt sich sowas.
    Was niemand sieht, ist auch, welche anderen Maßnahmen Du skriptseitig triffst, um zum Beispiel SQL-injections zu unterbinden.
    Schau Dir mal als Beispiel die Live-Hacks von Sebastian Schreiber an: bspw. , sehr lehrreich.
    Weiter viel Erfolg und - trotz allem - Spaß
    O.
     
    #10      
    Kiddo, Dagobert68 und Rata gefällt das.
  12. Dagobert68

    Dagobert68 Nicht mehr ganz neu hier

    Dabei seit:
    01.12.2008
    Beiträge:
    209
    Geschlecht:
    weiblich
    Software:
    Win10, PS CS6, Affinity Photo, LR 6, DxO Photo Lab, ACDSee Ultimate 2018, NIK, Photomatix, PTGui Pro
    Kameratyp:
    Canon EOS 5D Mark IV und 7D Mark II
    SQL-Abfrage-Parameter einem Link mitgeben
    Moin ;)

    Danke @owieortho , dass du das Thema Sicherheit hier angesprochen hast! Superwichtig!

    @strichcode : Hier auch noch ein paar Links zum Einlesen in die Thematik:

    https://www.php-einfach.de/experte/php-sicherheit/
    https://www.webmasterpro.de/coding/...b-applikationen-schreiben-ein-ueberblick.html
    https://wiki.selfhtml.org/wiki/Programmiertechnik/Kontextwechsel

    Und wenn du gut mit Büchern lernen kannst, empfehle ich dieses Buch von Florence Maurice:
    PHP 7 und MySQL
    Ihr praktischer Einstieg in die Programmierung dynamischer Websites
    dpunkt.verlag GmbH
    ISBN-10: 3864906016
    ISBN-13: 978-3864906015

    Sie schreibt sehr schön verständlich und anschaulich, nicht zu technisch und sehr praxisorientiert, finde ich :)

    Viel Spaß beim Erkunden von PHP und MySQL! Bleib dran, es macht Spaß, auch wenn die Thematik hin und wieder etwas trocken erscheint, wie z.B. im Falle von Sicherheit...

    Liebe Grüße,
    Tina
     
    #11      
    Kiddo gefällt das.
  13. strichcode

    strichcode Nicht mehr ganz neu hier

    Dabei seit:
    18.10.2007
    Beiträge:
    90
    Geschlecht:
    weiblich
    SQL-Abfrage-Parameter einem Link mitgeben
    Uiuiui! Nach dem Video und den Links hab ich Angst. Danke auch für den Buchtipp.

    Aaalso. Wenn ich nun die Links
    <a href="ausgabe.php?wasauchimmer=lilalaune">sortiert nach PLZ</a>
    <a href="ausgabe.php?wasauchimmer=wurstwasser">sortiert nach Ort</a> nenne.
    Und
    $sortikrit = $_GET['wasauchimmer'];

    $abfrage = "SELECT * FROM datenbank WHERE datenbankfeld LIKE 'on'ORDER BY ".$sortkrit."";

    oder besser noch
    $sortkrit = mysql_real_escape_string( $_POST['wasauchimmer'] );

    Bin ich damit erstmal auf einem sichereren Weg unterwegs?

    Diese Prepared Statements fand ich a. etwas kompliziert und b. vielleicht übertrieben für meinen Fall, denn ich brauche GET nur für ORDER BY. Wenn ich das richtig verstehe, wären um den sql-befehl schadhaft zu verändern Hochkomma und Anführungszeichen gefährlich....
    Oder bin ich da auf dem falschen Pferd?

    danke übrigens für die interessante Diskussion.
     
    #12      
  14. owieortho

    owieortho Aktives Mitglied

    Dabei seit:
    25.06.2010
    Beiträge:
    722
    Geschlecht:
    männlich
    Ort:
    9.8241,51.3515
    Software:
    PS CS5, HomeSite
    Kameratyp:
    Casio EX-FH20
    SQL-Abfrage-Parameter einem Link mitgeben
    Tipp für hier;
    Wenn Du hier Code-Abschnitte postest, dann hilft es, diesen eben als solchen hier im Texteditor einzufügen. Dazu nutzt Du die Schaltfläche "Einfügen" (links neben dem Diskettensymbol). Dann kannst Du, nachdem Du anfangs "Code" auswählst, auswählen, ob Dein einzufügender Code:
    • Allgemeiner Code
    • PHP
    • HTML
    • Javascript
    • CSS
    ist.
    HTML:
    1. <a href="ausgabe.php?wasauchimmer=lilalaune">sortiert nach PLZ</a>
    2. <a href="ausgabe.php?wasauchimmer=wurstwasser">sortiert nach Ort</a> nenne.
    PHP:
    1. $sortkrit = $_GET['wasauchimmer'];
    2. $abfrage = "SELECT * FROM datenbank WHERE datenbankfeld LIKE 'on'ORDER BY ".$sortkrit."";
    3. $sortkrit = mysql_real_escape_string( $_POST['wasauchimmer'] );
    Sieht schon besser aus mit der Farbcodierung, oder?!
    Wenn Du einer Variable einen alphanumerischen Wert zuweist, dann muss dieser Wert entweder in Hochkommata oder in doppelten Anführungszeichen stehen. Da beißt die Maus keinen Faden ab.
    Dein lilalaune Wurstwasser-Beispiel macht es richtig. Ich mache das gerne so, dass meine URL-Codierung "kryptisch" ist:
    HTML:
    1. <a href="datei.php?aktion=qwert>Mach dies</a><br />
    2. <a href="datei.php?aktion=asdf>Mach jenes</a><br />
    3. <a href="datei.php?aktion=yxcv>Mach was anderes</a><br />
    um es dann so auszuwerten:
    PHP:
    1. $wasgeht = $_GET['aktion'];
    2.  
    3. switch ($wasgeht) {
    4.     case qwert:
    5.         $sql = SELECT foo FROM tabelle_x WHERE .....;
    6.         break;
    7.     case asdf:
    8.         $sql = UPDATE tabelle_y SET spalte=wert WHERE ....;
    9.         break;
    10.     case yxcv:
    11.         $sql = INSERT INTO tabelle_z (spalte, ...) VALUES (wert1, ...);
    12.         break;
    13.    default:
    14.         echo "Das Nichtstun dauert wieder so lange...";
    15.         break;
    16. }
    Das ist einfach und übersichtlich erweiterbar und wie Deine Datenbank, Deine Tabellen und die Spalten dort heißen weiß niemand außer Dir.

    O.
     
    #13      
    Dagobert68 gefällt das.
Seobility SEO Tool
x
×
×