kostenloser Webspace werbefrei: lima-city


MySQL Profile

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    Hallo,
    Nehmen wir an ich habe eine Tabelle mit 3 Spalten. ID, Vorname, Nachname.

    Folgende Einträge:


    ID   Vorname    Nachname
    1    Max        Musterman


    ID   Vorname    Nachname
    2    Peter      Wurst


    ID   Vorname    Nachname
    3    Max        Neuman



    Ich würde gerne für jede Person einen Überblick haben. Sozusagen ein profil.



    Ich stell mir das so vor, jeder hat durch seine ID einen Link. Zb: abc.com/profil.php=1
    Auf dieser Seite werden dann die Informationen von Max angezeigt, die anderen zwei nicht.


    Idee?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. <?php
    ....
    SELECT vorname, nachname
    FROM tabelle
    WHERE id = $id
    ...
    ?>
  4. Schön, und deine Frage ist genau - Umsetzung, Zu Grunde liegendes Schema, etc. pp.?

    Du möchtest wahrscheinlich eine relationale Datenbank aufbauen. Das ganze ist recht fundamental.
    Dein Ansatz ist richtig: Gängig ist, dass jeder Datensatz, in deinem Fall jeder User, eine eindeutige ID hat. Diese ID identifiziert sowohl den User, als auch (fast - es gibt immer "shared" Datensätze...) alle mit ihm in Zusammenhang stehenden Datensätze.


    Tabelle User wäre dann Beispielsweise:
    ID Vorname Nachname

    Tabelle Profile:
    ID Wohnort Alter Vorlieben AnzahlGestreichelterNashoerner



    In sehr speziellen Fällen macht es auch Sinn einem Datensatz eine eigene ID zu geben und diesen dann indirekt mit dem Hauptdatensatz zu verknüpfen.
    ID UserID Foo Bar

    Das sind aber wirklich sehr spezielle Nutzungen, die dich erstmal weniger interessieren werden.
    Befasse dich einfach mal ein wenig mit relationalen Datenbanken.



    PS: Alle Angaben ohne Gewähr, es ist Ewigkeiten her, dass ich mich mit Datenbanken befasst habe und es könnte definitiv sein,dass die Terminilogie u.ä. sich inzwischen etwas aus meinem Gedächtnis verflüchtigt hat. ;)


    Edit: Ansonsten natürlich SELECT und die WHERE clause. Escapen nicht vergessen. (mysql_real_escape_string etc.)
    Das ganze habe ich wohl in der Überzeugung überlesen, dass man, bevor man etwas mit SQL machen möchte SQL lernt...

    http:://www.schattenbaum.net
    Hat ein nettes PHP und (my)SQL Tutorial.

    Beitrag zuletzt geändert: 26.4.2012 0:27:12 von adrians
  5. Als erstmal der Link "abc.com/profil.php=1" wird so nicht funktionieren sondern müsste in etwa so aussehen abc.com/profil.php?id=1

    <?php
    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".$_GET['id']."'";
    $result = mysql_query($sql);
    
    while ( $row = mysql_fetch_object($result) ) {
    
        echo $row->ID.": ".$row->Vorname." ".$row->Nachname;
    
    }


    dieser Quelltext gibt dir folgende ausgabe:

    1: Max Musterman

    `tabelle` statt tabelle nusst du den richtigen Tabellenamen einsetzen.

    Hoffe ich konnte dir weiterhelfen

    Gruss snvr1

    Beitrag zuletzt geändert: 26.4.2012 0:17:33 von snvr1
  6. Man sichert die Daten von außen!

    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".$_GET['id']."'";

    Sehr BÖSE!!!

    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".mysql_real_escape_string ($_GET['id'])."'";

    Richtig!

    Alternativ ist es hier möglich, die GET-Variable in einen Integer zu wandeln.
  7. Danke für die Korrektur arbeite selber noch nicht solange mit Datenbanken. Werde ich wohl mal schauen ob ich auf meiner Seite was ändern muss.

    Gruss snvr1
  8. s*************h

    chatter schrieb:
    Man sichert die Daten von außen!

    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".$_GET['id']."'";

    Sehr BÖSE!!!

    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".mysql_real_escape_string ($_GET['id'])."'";

    Richtig!

    Alternativ ist es hier möglich, die GET-Variable in einen Integer zu wandeln.

    Ich schreibe bei soetwas immer einen Filter mit
    preg_match
    . Da in der URL nur Zahlen zulässig sind könnte man wie folgt vorgehen:
    <?php 
    $id = (int)  $_GET['id'];
    if(preg_match('/^[0-9]*$/', $id) == 0) {
    die("Falsche Eingabe!");
    }

    So wird es dem bösen Besucher nicht ermöglicht eine SQL-Injection oder eine XSS-Attacke auszuführen, da alle Parameter zuvor durch den Filter gejagt werden. Ich mache das meist mit Klasseneigenschaften welche in die Datenbank geschrieben werden. Wenn ein Wert nicht valide ist so wird dieser auf den Standardwert der Klasse zurückgesetzt und eine Fehlervariable gesetzt.

    Edit: Ich habe noch vergessen zu schreiben das wenn die Eingabe Pflicht ist (also auch eine leere Zeichenkette erlaubt ist) man im RegExp den Stern durch ein + ersetzen muss.

    Gruß S.Brosch

    Beitrag zuletzt geändert: 26.4.2012 9:48:48 von software-brosch
  9. preg_match brauchst du gar nicht, da du vorher schon nach Integer konvertierst. $id ist also in jedem Fall eine Zahl. Entweder der übergebene Wert, oder falls konvertierung nicht möglich, eine 0.

    $id = (int) 'abc'; // $id ist 0
    $id = (int) '123abc'; // $id ist 123
    $id = (int) '456'; // $id ist 456
    $id = (int) 'abc789'; // $id ist 0


    Sonst dürften auch die Funktionen is_int, ctype_digit, u.ä. schneller als ein Regex sein.

    Beitrag zuletzt geändert: 26.4.2012 12:36:01 von chatter
  10. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    snvr1 schrieb:
    Als erstmal der Link "abc.com/profil.php=1" wird so nicht funktionieren sondern müsste in etwa so aussehen abc.com/profil.php?id=1

    <?php
    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".$_GET['id']."'";
    $result = mysql_query($sql);
    
    while ( $row = mysql_fetch_object($result) ) {
    
        echo $row->ID.": ".$row->Vorname." ".$row->Nachname;
    
    }


    dieser Quelltext gibt dir folgende ausgabe:

    1: Max Musterman

    `tabelle` statt tabelle nusst du den richtigen Tabellenamen einsetzen.

    Hoffe ich konnte dir weiterhelfen

    Gruss snvr1



    Also ich muss mich ja zuerst mit dem Datenbankserver verbinden, hab ich gemacht. Tabelle natürlich in den Namen meiner Tabelle umgeändert.

    In dieser Zele
    $sql = "SELCT * FROM `tabelle` WHERE `id` = '".$_GET['id']."'";
    wird dann .$_GET in das, was nacht dem = steht umgewandelt, richtig? Also bei link.com/profil.php?=1 wird 1 eingetragen.




    Das gibt mir folgenen Error aus:
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /data/multiserv/users/540111/projects/2045115/www/profil.php on line 21



    Linie 21:
    echo $row->ID.": ".$row->Vorname." ".$row->Nachname;
  11. `tabelle` angepasst? Groß und Kleinschreibung bei den Spalten beachtet?
  12. Hast du den Link:abc.com/profil.php=1 auch geändert ?

    abc.com/profil.php?id=1 so muss der aussehen sonst wird in dem $_GET array nichts gespeichert.


    Gruss snvr
  13. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    snvr1 schrieb:
    Hast du den Link:abc.com/profil.php=1 auch geändert ?

    abc.com/profil.php?id=1 so muss der aussehen sonst wird in dem $_GET array nichts gespeichert.


    Gruss snvr



    Ja natürlich. Bzw verbinden klappt ohne Probleme, die Datenbank anwählen auch.
    Tabelle usw alles richtig geschrieben.


    EDIT: Ohne folgende Zeile gibt es keinen Error.
    while ( $row = mysql_fetch_object($result) )


    Und gibt aber alles in diesen Anfürungszeichen aus:
    echo $row->ID."IN DIESEN".$row->Vorname." ".$row->Nachname;



    Mehr nicht, nichts aus der Datenbank.

    Beitrag zuletzt geändert: 26.4.2012 21:21:59 von rate
  14. rate schrieb:

    Ja natürlich. Bzw verbinden klappt ohne Probleme, die Datenbank anwählen auch.
    Tabelle usw alles richtig geschrieben.


    EDIT: Ohne folgende Zeile gibt es keinen Error.
    while ( $row = mysql_fetch_object($result) )


    Und gibt aber alles in diesen Anfürungszeichen aus:
    echo $row->ID."IN DIESEN".$row->Vorname." ".$row->Nachname;



    Mehr nicht, nichts aus der Datenbank.


    echo $row->ID."IN DIESEN".$row->Vorname." ".$row->Nachname;


    kommentiere die zeile mal aus und schreibe
    echo mysql_error();


    und poste mal die ausgabe hier.

    Gruss snvr1

    Beitrag zuletzt geändert: 26.4.2012 21:59:11 von snvr1
  15. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    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 'SELCT * FROM `Name` WHERE `ID` = ''' at line 1
  16. Was ergibt:

    while ( $row = mysql_fetch_object($result) ) {
    die(var_dump($row));
    }
  17. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    fabo schrieb:
    Was ergibt:

    while ( $row = mysql_fetch_object($result) ) {
    die(var_dump($row));
    }



    Den gleichen Error wie vorhin.
  18. Poste mal bitte den kompletten Code.

    Der Fehler liegt definitiv im SELECT.
  19. fabo schrieb:
    Der Fehler liegt definitiv im SELECT.

    Der Fehler IST das SELECT (oder eben das falsch geschriebene :)

    SELCT * FROM...
    Korrekt:
    SELECT * FROM...
  20. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    fabo schrieb:
    Poste mal bitte den kompletten Code.

    Der Fehler liegt definitiv im SELECT.


    <?php
    
    
    
    if ($dbserver = mysql_connect("-", "-", "-"))
    {
    
     if (mysql_select_db("db2045115-main", $dbserver))
     {
    
     }
     else
     {
      echo "Fehler: Die Datenbank konnte nicht angewählt werden.<br>";
     }
    }
    else
    {
     echo "Fehler: Die Connection zum Server ist fehlgeschlagen.<br>";
    }
    
    
    
    
    $sql = "SELCT * FROM `Name` WHERE `ID` = '".$_GET['ID']."'";
    $result = mysql_query($sql);
     {
    
    
    echo $row->ID.":".$row->Vorname." ".$row->Nachname;
    
    }
    
    
    
    ?>
  21. Versuchs es mal so.

    $id = mysql_real_escape_string ($_GET['id']);
    $sql = "SELECT * FROM `Name` WHERE `ID` = '$id'";
    $result = mysql_query($sql);
     {
    
    
    echo $row->ID.":".$row->Vorname." ".$row->Nachname;
    
    }


    So sollte es denn Sicherheitstechnisch fast ok sein, obwohl man noch prüfen könnte ob $_GET['id'] auch wirklich nen Integer ist.
    Aber für's erste Sollte es so gehen.

    Gruss snvr1

    P.S. aber rate ich kann dir die Seite http://www.php-einfach.de/ empfehlen da findest du ein gutes Einsteiger-Tutorial für PHP und MySQL

    Beitrag zuletzt geändert: 28.4.2012 0:04:25 von snvr1
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!