MySQL Profile
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aussehen
code
dank
datenbank
datensatz
fehler
host
nachname
profil
server
spalten
syntax
tabelle
test
url
verbindung
vorname
zahl
zeile
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<?php .... SELECT vorname, nachname FROM tabelle WHERE id = $id ... ?>
-
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 -
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 -
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. -
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 -
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
. Da in der URL nur Zahlen zulässig sind könnte man wie folgt vorgehen:preg_match
<?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 -
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 -
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
wird dann .$_GET in das, was nacht dem = steht umgewandelt, richtig? Also bei link.com/profil.php?=1 wird 1 eingetragen.$sql = "SELCT * FROM `tabelle` WHERE `id` = '".$_GET['id']."'";
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;
-
`tabelle` angepasst? Groß und Kleinschreibung bei den Spalten beachtet?
-
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
-
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 -
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 -
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
-
fabo schrieb:
Was ergibt:
while ( $row = mysql_fetch_object($result) ) { die(var_dump($row)); }
Den gleichen Error wie vorhin. -
fabo schrieb:
Der Fehler liegt definitiv im SELECT.
Der Fehler IST das SELECT (oder eben das falsch geschriebene :)
SELCT * FROM...
Korrekt:
SELECT * FROM... -
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; } ?>
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage