Hallo ik wil graag de username in de url als iemand is ingelogd en naar zijn/haar profiel pagina gaat. Nu is dat profile.php voor elke gebruiker.

Ik had dit gevonden maar ik vraag me af of dit de goede manier is om gebruikers hun eigen profiel pagina te geven? En ik vroeg me af of $_SERVER['REQUEST_URI'] nog wel bestaat? en ik kon nergens vinden waar die 3 voor is achter $getName?

Ik heb het iets aangepast, en het is dit geworden:

$getName = explode("/",$_SERVER['REQUEST_URI']);
mysqli_query($result,"SELECT first_name FROM users WHERE url='$getName[3]'");	
$num_rows = mysqli_num_rows($result);
if($num_rows == 0){
header ("Location: 404");
}


Maar het gaat al gelijk bij de eerste regel mis $getName blijft leeg.
Doe dit en je weet wat op 3 staat :

print_r($getName);
Hallo,

Er staat niks in de array
Maar het gaat al gelijk bij de eerste regel mis $getName blijft leeg.


Ik bedoel meer letterlijk, waarom 3?
Omdat het het vierde element is vanaf 0 gezien.
Als er niets in de array staat, zit je dan gewoon in de root?
Oke, bedankt Ariën.

Het bestand profile.php staat in de root. Ik gebruik Xampp en het staat in de htdocs. Als dat is wat je bedoeld?

Ik had gekeken bij w3school.com maar daar is niks te vinden over $_SERVER['REQUEST_URI']. Bestaat die nog wel?
Het is deel van de CGI standaard dus ja, die bestaat gewoon.
De bedoeling is dat je zometeen dit script aanroept ala /profile.php/user/naam. Je $_SERVER['REQUEST_URI'] bevat dan '/profile.php/user/naam'. Als je die explodeert op '/' krijg je dus een array met ['', 'profile.php', 'user', 'naam']. het 3e element (0-base) is dan 'naam'.

Als je het nog iets mooier wilt hebben (bijv. /user/naam) moet je in/via je .htaccess via een rewrite rule die profile.php wegwerken.
Na een tijdje puzzelen is het nog geen succes. Hij laat wel zien hoeveel gebruikers er zijn. Maar de naam wordt niet gevonden.

$getName = explode("/",$_SERVER['REQUEST_URI']);
$result = mysqli_query($connect,"SELECT first_name FROM users WHERE url = '$getName[3]'");
$num_rows = mysqli_num_rows($result);
if($num_rows == 0){
   
	header ("Location: index.php");

}

print_r ($result);
print_r($getName); 


Ik had eigenlijk verwacht dat $getName wel in $result zou zitten of zit ik nou helemaal verkeerd? de uitkomst van de arrays zijn:

Notice: Undefined offset: 3 in C:\xampp\htdocs\profile.php on line 11
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 2 [type] => 0 ) Array ( [0] => [1] => profile.php ) 
Wat is dan de URL die je opvraagt?
Volgens mij denk je er allemaal wat te makkelijk over. Gebruikersnamen passen namelijk helemaal niet zomaar in de URL. In de URL mogen maar een beperkt aantal karakters voorkomen. Natuurlijk kun je urlencode() gebruiken maar dat ziet er vaak niet uit. Mooier zou het zijn om een slugifier te gebruiken.

Daarnaast zit je nog met het feit dat een (ge-slugify-de) gebruikersnaam UNIEK moet zijn binnen je tabel. Als er twee gebruikers zijn die dezelfde slug/naam hebben dan zal gebruiker twee nooit meer gevonden worden :-). Ik zelf genereer die slug slechts één maal voor een gebruiker en sla hem dan op in de database tabel. De kolom in de tabel -die ik gewoon "slug" noem krijgt een UNIQUE beperking. Vervolgens vind ik de juiste gebruiker *gegarandeerd* terug in de tabel aan de hand van de slug die dus zo uit de URL komt (en dus niet aan de hand van de gebruikersnaam).

Reageren