• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

dynamische URL

jayb

Neues Mitglied
Hallo zusammen!
Ich möchte folgendes für meine Website realisieren:

Jemand registriert sich auf der HP. So weit bin ich schon. Nun will ich aber für jeden angemeldeten User einen dynamischen Link(z.B. in Abhängigkeit von seiner ID) generieren. Hintergrund: Ich will zählen, wie viele Leute dann über seinen Link auf meine Seite gelangt sind. Ich habe eine DB mit 2 Tabellen:

Spieler(ID,Nickname,email,linkNr) --> PK ist ID, FK ist linkNr
PersLink(linkNr,link,aufrufe) -->PK ist linkNr

Sobald also ein User seine Daten im Formular eingegeben hat(Nickname und E-mail Adresse), wird er in die DB eingetragen und soll per E-mail seinen "persönlichen" Link bekommen.

Wie realisiere ich diese dynamische URL? Ich habe etwas von mod_rewrite oder so was gelesen und von .htaccess , verstehe jedoch bisher nichts davon. Wäre euch sehr dankbar wenn mir jemand helfen könnte.(Am besten möglichst einfach)

MfG
 
Je nachdem.. mod_rewrite ist nur von Nöten, falls du die URL SEO-Tauglich machen willst.

Ansonsten kannst du folgenden Link generieren:

http://{LINK}/datei.php?userid=$id

und mit $_GET[ 'userid' ] bekommst du die UserId und kannst damit eine Datenbank-Abfrage machen, welcher die Daten für den User lädt.
 
Danke schonmal für die schnelle Antwort!
Aber ich verstehe es noch nicht so ganz. Wird der Link dann auch tatsächlich auf meine Seite führen wenn ich eben das mit der userid hinten anfüge? Oder muss ich den dann wieder umwandeln oder so was?

Und wofür genau ist das $_GET[ 'userid' ] ?

Entschuldigt wenn ich etwas genauere Antworten versuche zu erhaschen, ich bin PHP Neuling :P (Seit 2Tagen)
 
Wenn du ein Link z.B. so machst:

http://localhost/index.php?test=15

Dann kannst du automatisch ohne weiteres zu machen, per $_GET[ 'test' ] dann den Wert erhalten. Du kannst dann einfach oben in der Browser Adress-Leiste die 15 zu 16 änder, Enter drücken und $_GET[ 'test' ] erhält dann 16 als Wert.

Du kannst auch mit entsprechender Software HTTP Header senden und somit $_POST Variablen senden/auslesen, was aber umständlicher ist.

Was du beachten musst ist, dass jeder Mensch diese URL natürlich sieht, so ist es falsch da z.B. Login Daten oder ähnliches zu übergeben.

Außerdem musst du drauf achte, dass auch jeder Mensch die GET Variablen ändern kann..

Wenn du nun $_GET[ 'userid' ] ausliest, der User "Peter" mit der ID "16" die 16 in eine "1" umändert, welcher dem User "Admin" gehört, dann kann das unter umständen zu Sicherheits problemen führen!

Außerdem solltest du dich in sachen XSS ( Cross-Site-Scripting ) und MySQL-Injection informieren, ansonsten ist es ganz leicht für "Hacker" deine Seite zu übernehmen oder zu verändern.

Übe einfach mal und informier dich über Globale Variablen wie $_GET , $_POST, $_SERVER und $_SESSION. Variablen wie $_REQUEST oder $_GLOBALS sind veraltet und sollten wenn möglich nicht mehr benutzt werden!

Wenn du mehrere Variablen übergeben willst, trennst du das mit einem kaufmänniches "Und"-Zeichen ( & )

http:// localhost/datei.php?variable1=haus&variable2=12&variable3=iwas
 
Zuletzt bearbeitet:
Also ich habe jetzt folgendes:

<form method="post" >
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td align="right">Ihr Nickname:</td>
<td><input type="text" name="nick" size="30" maxlength="30"></td><br>
</tr>
<tr>
<td align="right">E-mail Adresse:</td>
<td><input type="text" name="emailad" size="30" maxlength="30"></td><br>
</tr>
<tr>
<td></td>
<td><input type="submit" name="regbut" value="Abschicken"></td>
</tr>
</form>
<?PHP
error_reporting(E_ALL);
ini_set('display_errors', 1);
$nick=$_POST["nick"];
$emailad=$_POST["emailad"];
if (!empty($_POST["nick"]) &&
!empty($_POST["emailad"])) {
include("db.php");
mysql_query("INSERT INTO
Spieler(nickname,email)VALUES('$nick' , '$emailad')") or die($query.' Fehlermeldung der DB: '.mysql_error());
mysql_query("INSERT INTO
PersLink(link)VALUES('http://4mo.square7.ch/index.php?userid=$id')") or die($query.' Fehlermeldung der DB: '.mysql_error());
mysql_close();
}

folgender Fehler wird angezeigt:

Notice: Undefined variable: id in /users/4mo/www/anmeldung.php on line 147

ich verstehe nicht worin der Fehler liegt? Die ID ist ja in der Tabelle Spieler, und er kennt sie hier ja noch gar nicht, oder?
 
Die Fehlermeldung ist klar.
$id ist leer.

Was möchtest du genau?
Soll einfach jeder User eine id haben? Dann sieh dir die MySQL
Funktion AI an.

Ich würde aber anders machen zb so.

$key = rand(9999,99999);

dann die id in key umändern.
So wird eine zahl zwischen 9999 und 99999 generiert...

Wenn es um eine Art ref-Link geht würd ich es so machen.
Bei der regi musst du dann lediglich $key mit in die Datenbank eintragen.
 
Die Fehlermeldung ist klar.
$id ist leer.

Was möchtest du genau?
Soll einfach jeder User eine id haben? Dann sieh dir die MySQL
Funktion AI an.

ich möchte, dass jeder User per E-mail seinen persönlichen Link von mir geschickt bekommt, daher muss ich den ja erstmal in die Datenbank eintragen. Dies soll dazu dienen, um später zählen zu können, wie viele Leute auf den Link des Users geklickt haben. Es gibt dann später eine Rangliste, da es eine Art Wettbewerb wird.

Wie kann ich nun, so wie ich es oben versucht habe, einen Link anhand der id des Users erstellen? So wie es oben steht geht es ja nicht, da id noch leer ist.
mysql_query("INSERT INTO
PersLink(link)VALUES('http://4mo.square7.ch/index.php?userid=$id')") or die($query.' Fehlermeldung der DB: '.mysql_error());

Sobald ein User das Formular abschickt, bekommt er ja in der Datenbank eine ID, da auto_increment. Ich weiß nun aber nicht wie ich sie hierher übergeben soll? Oder ist meine Denkweise hier falsch?
 
PHP:
<form method="post" >
                            <table border="0" cellpadding="0" cellspacing="4">
                            <tr>
                            <td align="right">Ihr Nickname:</td> 
                            <td><input type="text" name="nick" size="30" maxlength="30"></td><br>
                            </tr>
                            <tr>
                            <td align="right">E-mail Adresse:</td> 
                            <td><input type="text" name="emailad" size="30" maxlength="30"></td><br>
                            </tr>
                            <tr>
                            <td></td>
                            <td><input type="submit" name="regbut" value="Abschicken"></td>
                            </tr>
                        </form>
                        <?PHP 
                        error_reporting(E_ALL);
                        ini_set('display_errors', 1); 
                        $nick=$_POST["nick"];
                        $emailad=$_POST["emailad"];
                        if (!empty($_POST["nick"]) && 
                            !empty($_POST["emailad"])) {
                                 include("db.php");
                                 mysql_query("INSERT INTO
                                 Spieler(nickname,email)VALUES('$nick' ,  '$emailad')") or die($query.' Fehlermeldung der DB: '.mysql_error());
                                 mysql_query("INSERT INTO
                                  PersLink(link)VALUES('http://4mo.square7.ch/index.php?userid=$id')") or  die($query.' Fehlermeldung der DB: '.mysql_error());
                                 mysql_close();
                        }


Pack alle Usereingaben in "isset" abfragen:

PHP:
$nick = isset( $_POST[ 'nick' ] ) ? mysql_real_escape_string( $_POST[ 'nick' ] ) : false;
..

Das ist eine kurze Abfrage die sofern wie folgendes heißt: Wenn folgendes WAHR ( true ) ist, dann tu dies, ansonsten das.

In dem Fall: Wenn eine POST Variable "nick" gesetzt wurde, dann speicher in der Variable $nick folgende Escape'te POST Variable rein, ansonsten lasse es leer/speicher es als FALSCH "false" ab.

Escape ist in dem Kontext gemeint, dass er aus Zeichen wie z.B. den doppelten Anführungszeichen ( " ) ein Backslash davor hinzufügt ( \ ) damit das Zeichen als normales Zeichen und nicht als Steuerzeichen angesehen wird.

Beispiel:

PHP:
echo "Hallo";

echo "Zitat:\"Geld ist Macht!\". ";

oder:

PHP:
$query = "SELECT * FROM `user` WHERE `loginname`='".$loginname."' AND `password`='".$password."' ";

$sql = mysql_query( $query );

Wenn man jetzt im Formular im Loginfeld folgendes eingibt:

Code:
Administrator' AND 1=1;#


Dann würde PHP die Query wie folgt interpretieren:

PHP:
$query = "SELECT * FROM `user` WHERE  `loginname`='Administrator' AND 1=1;# AND `password`=.........

Das Semikolon ( ; ) gibt das Ende der SQL-Query an und die Route ( # ) besagt, dass alles folgende nur Kommentare sind und ignoriert werden können.
Also sucht der in der Datenbank einfach nach "administrator" und ob 1=1 ist ( was immer JA ist ) und ist damit im besten Falle als Admin eingeloggt, daher immer schön Usereingaben Escapen!
 
Danke zorndyuke ! Aber ich werde vorerst noch keinen Login einrichten, sondern eine ledigliche Registrierung.
Und das löst leider trotzdem noch nicht das problem mit dem Link ...

Nochmal:
Ich brauche momentan Hilfe bei folgendem Szenario:
Jemand registriert sich, er wird in der Datenbank angelegt und bekommt auch eine ID in der Tabelle Spieler. Nun soll er noch einen Link mit angehängter ID bekommen. Wie hänge ich genau diese ID dran? Mein Versuch war:

<form method="post" >
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td align="right">Ihr Nickname:</td>
<td><input type="text" name="nick" size="30" maxlength="30"></td><br>
</tr>
<tr>
<td align="right">E-mail Adresse:</td>
<td><input type="text" name="emailad" size="30" maxlength="30"></td><br>
</tr>
<tr>
<td></td>
<td><input type="submit" name="regbut" value="Abschicken"></td>
</tr>
</form>
<?PHP
error_reporting(E_ALL);
ini_set('display_errors', 1);
$nick=$_POST["nick"];
$emailad=$_POST["emailad"];
if (!empty($_POST["nick"]) &&
!empty($_POST["emailad"])) {
include("db.php");
mysql_query("INSERT INTO
Spieler(nickname,email)VALUES('$nick' , '$emailad')") or die($query.' Fehlermeldung der DB: '.mysql_error());
mysql_query("INSERT INTO
PersLink(link)VALUES('http://4mo.square7.ch/index.php?userid=$id')") or die($query.' Fehlermeldung der DB: '.mysql_error());
mysql_close();

}

Hier ist id aber noch leer, wie kriege ich hier die ID des Spielers rein?? Dann müsste es doch gehen oder?
 
Du erstellst ihm den Account und lässt die Webseite automatisch erstmal auf die Seite:

localhost/registered.php?loginname=$loginname

wechseln welche dann ein Eintrag in der Datenbank sucht, wo der loginname = $loginname ist.

z.B.

localhost/registered.php?loginname=peter

Code:
mysql_query( 'SELECT * FROM `users` WHERE `loginname`="peter" ' );

und damit kannst du dann ein Link generieren mit entweder der ID oder Loginname oder sonstigen Inhalten.
 
ok ich habe jetzt mal weiter rumprobiert und bin jetzt so weit:

Code:
<?PHP 
                        error_reporting(E_ALL);
                        ini_set('display_errors', 1); 
                        $nick = isset( $_POST[ 'nick' ] ) ? mysql_real_escape_string( $_POST[ 'nick' ] ) : false;
                        $emailad = isset( $_POST[ 'emailad' ] ) ? mysql_real_escape_string( $_POST[ 'emailad' ] ) : false;
                        if (!empty($_POST["nick"]) && 
                            !empty($_POST["emailad"])) {
                                 include("db.php");
                                 mysql_query("INSERT INTO
                                 Spieler(nickname,email)VALUES('$nick' , '$emailad')");
                                 [COLOR=#ff0000]$key= "SELECT id FROM Spieler WHERE email like '$emailad' AND nickname like '$nick' ORDER BY id DESC Limit 1";
                                 $db_erg = mysql_query( $key ) or die($query.' Fehlermeldung der DB: '.mysql_error());
                                 mysql_query("INSERT INTO
                                 PersLink(link)VALUES('http://4mo.square7.ch/index.php?userid=$db_erg')") or die($query.' Fehlermeldung der DB: '.mysql_error());                                     
                                 mysql_close();[/COLOR]
                        }

Er speichert nun jeweils die URL ab, aber leider nur wie folgt:
Code:
http://4mo.square7.ch/index.php?userid=Resource id
könnt ihr mir sagen wo der fehler steckt? Gleich nachdem ich den Spieler angelegt habe, hol ich mir seine id und will die dran hängen.
 
Kannst du das bitte genauer erklären mit dem mysql_fetch , bzw mysql_insert_id , wozu dient das und wie verwende ich das?
 
Bitte nicht übel nehmen, aber darf ich dazu erst einmal sanft auf die Doku und die darin enthaltenen Beispiele (auf den Seiten zu den Funktionen) hinweisen?

- PHP: MySQL Functions - Manual

Grob gesagt: mysql_query liefert eine Ressource, die die Rückgabemenge verkörpert. Aus dieser Ressource rufst du dann mit mysql_fetch_assoc (oder so) die einzelnen Datensätze ab.

mysql_insert_id liefert die durch die letzte vorherige INSERT-Query generierte ID.
 
Zurück
Oben