PHP Parameter

  • Hallo,


    ich würde nun gerne via PHPParameter 6 Werte aus der Datenbank auslesen.
    Hierzu habe ich folgendes rstellt.



    nun soll blabla nicht blabla sein sondern sich jedesmal verändern wenn ich etwas anderes in die URL eingebe. Wie mache ich das am sinnvollsten ?


    //edit ich habe gerade nochmal nachgedacht


    Ich könnte ja die ID angeben die er auslesen soll. Nur wie mache ich das ganze 6 x ?

  • Zum Beispiel so:



    PHP
    $table = mysqli_real_escape_string($con, $_GET['table']);
    $query = "SELECT * FROM $table";

    Und dann so nutzen:


    http://deineURL.de?table=blabla


    oder irgendwas anderes eben :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Danke dir schonmal für deinen hilfreichen Tipp. Allerdings merke ich gerade das meine Beschreibung eben nicht genau genug war.
    Es ist am sinnvollsten Abzufragen welche ID abfragt wird und welcher Inhalt dann mit der ID ist.


    Tut mir leid für das falsche ausdrücken

  • Versuch dich nochmal präziser, am Besten mit Code (kann auch pseudo Code sein) und Beispielen auszudrücken, ich verstehe nämlich gerade nicht, was du vor hast ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • ID Inhalt Zeit
    1 Ich bin ID 1 1
    2 Ich bin ID 2 2
    3 Ich bin ID 3 3
    4 Ich bin ID 4 4


    Nehmen wir mal an dies ist eine Datenbank Tabelle. Die bis zu 100 IDs hat. Nun möchte ich als erstes nur id 1-6 abfragen und ausgeben.
    Natürlich sollen die ids die abgefragt werden auch in dem Link angegeben werden können

    Code
    $query = "SELECT * FROM blabla WHERE id = '$id(id 1-6 )'";
  • Achso, das geht entweder so:


    $query = "SELECT * FROM users WHERE id < 7";


    oder du nimmst einfach die ersten 6 Einträge (unabhängig von der id)


    $query = "SELECT * FROM users LIMIT 6";

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ahja, dann kannst du es so machen:


    PHP
    $p0 = intval($_GET["p0"]);
    $p1 = intval($_GET["p1"]);
    $p2 = intval($_GET["p2"]);
    $p3 = intval($_GET["p3"]);
    $p4 = intval($_GET["p4"]);
    $p5 = intval($_GET["p5"]);
    $query = "SELECT * FROM users WHERE `id` IN ($p0,$p1,$p2,$p3,$p4,$p5)";

    Und aufrufen dann: http://deineDomain.de?p0=1&p1=2&p2=3&p3=4&p4=5&p5=6


    Dann würde er die IDs von 1-6 abfragen.


    Gibt hier viele Lösungsmöglichkeiten, kannst auch nur einen Parameter mit Trennzeichen übergeben und dann aufsplitten.


    Hoffe habe dich richtig verstanden gehabt ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wir sind schon fast da. Entweder ich zu doof oder es fehlt noch ein bisschen.


    Also wir sagen mal wir haben folgende URL


    Code
    http://deineDomain.de?p0=1&p1=2&p2=3&p3=4&p4=5&p5=6


    und folgende Spalten



    1 Das ist Inhalt 1 20:20
    2 Das ist Inhalt 2 12:00
    3 Das ist Inhalt 3 13:00
    4 Das ist Inhalt 4 23:00
    5 Das ist Inhalt 5 11:00
    6 Das ist Inhalt 6 1:00
    7 Das ist Inhalt 7 00:00
    8 Das ist Inhalt 8 05:00
    9 Das ist Inhalt 9 04:00
    10 Das ist Inhalt 10 10:00
    11 Das ist Inhalt 11 3:00
    12 Das ist Inhalt 12 10:00




    Das heißt er soll den Inhalt also die Mittlere Spalte der ID ausgeben die in p1,p2,p3,p4,p5,p6 angegeben wurde.


    sollte die URL also wie folgt sein



    Code
    http://deineDomain.de?p0=2&p1=3&p2=4&p3=5&p4=6&p5=7

    soll er den Inhalt (Mittlere Spalte) von 2-7 ausgeben.

  • Ja, das sollte so gemacht werden :D


    Was wird denn ausgegeben?


    Also wenn du nur die mittlere Spalte möchtest, würde ein einfaches echo $row[1].","; reichen, aber da du mehr Spalten ausgibst, sollte die Mittlere trotzdem immer vorhanden sein :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ja jetzt gerade habe ich es auch verstanden. Nun habe ich noch eine Frage


    $query = "SELECT * FROM 1601 WHERE `id` IN ($p0,$p1,$p2,$p3,$p4,$p5)";


    in das Rot markierte möchte ich nun gerne auch über die url eine Zahl eingeben können die dann in der Datenbank abgefragt wird.


    So wie die Zahl dort gerade oben steht gibt diese keinen Wert aus. Wie regel ich das am besten ?

  • Also da wo diese Zahl ist (1601), da gehört eigentlich der Tabellenname rein.


    Hatte weiter oben schon ein Beispiel dafür:


    C
    $table = mysqli_real_escape_string($con, $_GET['table']);
    $query = "SELECT * FROM $table WHERE `id` IN ($p0,$p1,$p2,$p3,$p4,$p5)";

    Dann kannste die URL so machen: http://deineDomain.de?p0=2&p1=3&p2=4&p3=5&p4=6&p5=7&table=1601


    oder alles andere :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Empfehlung: lasse niemals einen query über die URL ändern. Siehe dazu: SQL Injektion

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Der Tabellenname besteht mehr aus Ziffern als aus Buchstaben. Users war nur ein beispiel.
    Ich habe das nun auch nochmal mit den Ziffern probiert allerdings findet er da kein Resultat obwohl die Tabelle vorhanden ist



    Empfehlung: lasse niemals einen query über die URL ändern. Siehe dazu: SQL Injektion

    Wie ist es dann sinnvoll wenn man mehrere von Hundert verschiedenen Daten aus einer Datenbank Abfragen möchte wo die Tabellennamen immer anders sind ?

  • Whitelisting, Prepared Statements... Nur als Stichwörter :)

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Ich habe das nun auch nochmal mit den Ziffern probiert allerdings findet er da kein Resultat obwohl die Tabelle vorhanden ist

    Um dir da zu helfen, bräuchten wir die Info, was du genau eingibst und wie genau deine Tabelle aussieht (evtl Screen) :)



    Wie ist es dann sinnvoll wenn man mehrere von Hundert verschiedenen Daten aus einer Datenbank Abfragen möchte wo die Tabellennamen immer anders sind ?

    Er wollte nur darauf aufmerksam machen, dass jeder dann an deine Datenbank Querys senden könnte und dadurch Sicherheitsmängel entstehen.
    Aber ich denke mal, du nutzt das nur privat und nicht produktiv oder?

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Um den Injections nun an den kragen zu gehen habe ich es selbst mal probiert allerdings ohne Erfolg.


    er zeigt mir keinen wert an der entsprechend ist


    ich gebe folgendes im Browser ein


    Code
    https://breadscript.de/ibis/test3.php?table=1601&id=1

    Es gehen wieder nur Buchstaben und keine Ziffern

  • Du brauchst nicht MySQLi und PDO nutzen.


    Prepared heißt nur, dass die einzelnen Variablen escaped werden, selbiges machst du mit mysqli escape string.


    Theoretisch kannst du den Code von oben verwenden, dort ist schon alles escaped und SQL-Injections in dem Sinne sind nicht möglich.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S