Hei.
Eli, jos rekisteröityy niin profiili tulee osoitteeseen /user_Esimerkkitunnus.php jossa kys. profiili siis on.
Miten sen saa includattua /user.php?nick=Esimerkkitunnus osoitteeseen?
Kokeilin tällaista user.php:seen (huonolla menestyksellä)
<?php $nick = $_REQUEST['nick']; include 'user_$nick.php'; ?>
Merkkijonon keskellä oleva muuttuja $nick ei erotu riittävästi tekstistä, jotta php-tulkki osaisi tulkita sen oikein. Kokeileppa jotain tällaista:
include "user_{$nick}.php";
Toimii. Kiitos!
Tuo ei ole kovin hyvä tapa käsitellä tunnuksia. Parempi olisi hakea tunnuksen tiedot jostakin lähteestä (tekstitiedosto, tietokanta jne.), ja tehdä vain pohja (esim. user.php), jonka kautta tunnukset haetaan ja näytetään halutut tiedot.
Minulla on siten, että profiilisivu on profile.php. Tunnusta haetaan ID:n perusteella, esimerkiksi profile.php?id=1234. Tunnuksen (käyttäjän) tiedot haetaan ID:n perusteella tietokannasta.
Heikki kirjoitti:
Merkkijonon keskellä oleva muuttuja $nick ei erotu riittävästi tekstistä, jotta php-tulkki osaisi tulkita sen oikein.
Ei, vaan '-merkkien väliin kirjoitetussa tekstissä muuttujia ei käsitellä.
Mikä olisi järkevin tapa nyt tässä vaiheessa laittaa user.php:seen esto, että jos user_$nick.php tiedostoa ei löydy niin tulee error tyyliin "Pelaajaa ei löytynyt!"
eikä tyypillistä WARNING: CAN NOT FOUND USER_JOTAIN.PHP IN LINE bla bla..
<?php $nick = "matti"; if (preg_match("/[^A-Za-z0-9_]/", $nick) || !file_exists("user_{$nick}.php")) { include "virhe.php"; die(); }
Funktiolla preg_match voi tarkistaa, ettei tunnus sisällä kiellettyjä merkkejä, ja file_exists tarkistaa nimensä mukaisesti, onko tiedosto olemassa.
toimii, kiitoksia taas kerran Metabolix :)
miksei kumpikaan näistä toimi?
<?php $nick = $_REQUEST['nick']; if (file_exists("user_{$nick}.php")) { include 'ylaosa.php'; echo'<h1>Haun tulokset</h1><p>Pelaajaa ei löytynyt! Tarkista oikeinkirjoitus.</p>'; include 'alaosa.php'; } else { include "user_{$nick}.php"; } ?>
tai
<?php $nick = $_REQUEST['nick']; if (file_exists("user_{$nick}.php")) { include 'ylaosa.php'; echo'<h1>Haun tulokset</h1><p>Pelaajaa ei löytynyt! Tarkista oikeinkirjoitus.</p>'; include 'alaosa.php'; die(); } include "user_{$nick}.php"; ?>
metabolixin koodi oli hyvä ja toimiva, mutta preg_match esti - ja _ merkit myös jotka ovat sallittuja nimimerkeissä.
Clacier kirjoitti:
miksei kumpikaan näistä toimi?
Logiikkas on just väärinpäin. Vaihda if ja else-lohkojen sisältö keskenään.
Eihän ole.?
<?php $nick = $_REQUEST['nick']; if (file_exists("user_{$nick}.php")) { // jos user_$nick ei löydy, annetaan errori haun epäonnistumisesta include 'ylaosa.php'; echo'<h1>Haun tulokset</h1><p>Pelaajaa ei löytynyt! Tarkista oikeinkirjoitus.</p>'; include 'alaosa.php'; } else { // jos se taas löytyi, includataan se. include "user_{$nick}.php"; } ?>
Kyllä se on. Vertaa vaikka esimerkkiini – on yksi aika olennainen merkki eroa.
Clacier kirjoitti:
<? if (file_exists("user_{$nick}.php")) { // jos user_$nick ei löydy, annetaan errori haun epäonnistumisesta ?>
file_exists (file = tiedosto, exists = on olemassa) kertoo tiedoston olemassaolosta, ei puuttumisesta kuten kommentissa välitetään. Eli juuri päinvastoin.
Aivan. tajusin hieman väärin mutta kiitoksia taas nopeasta avusta. nyt kunnossa ja toimii kuten pitää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.