Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ?on=jotain- ongelma

Sivun loppuun

Clacier [12.04.2010 19:44:15]

#

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';
?>

Heikki [12.04.2010 19:54:00]

#

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";

Clacier [12.04.2010 19:57:16]

#

Toimii. Kiitos!

trilog [12.04.2010 20:06:13]

#

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.

Macro [12.04.2010 20:19:18]

#

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.

Metabolix [12.04.2010 21:15:13]

#

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ä.

include 'user_$nick.php';   // Ei toimi.
include 'user_{$nick}.php'; // Ei toimi.
include "user_$nick.php";   // Toimii.
include "user_{$nick}.php"; // Toimii.

Clacier [20.04.2010 20:43:18]

#

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..

Metabolix [20.04.2010 20:49:45]

#

<?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.

Clacier [20.04.2010 23:20:44]

#

toimii, kiitoksia taas kerran Metabolix :)

Clacier [21.04.2010 16:39:12]

#

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ä.

Blaze [21.04.2010 18:57:05]

#

Clacier kirjoitti:

miksei kumpikaan näistä toimi?

Logiikkas on just väärinpäin. Vaihda if ja else-lohkojen sisältö keskenään.

Clacier [21.04.2010 21:42:16]

#

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";
}
?>

Metabolix [21.04.2010 21:43:42]

#

Kyllä se on. Vertaa vaikka esimerkkiini – on yksi aika olennainen merkki eroa.

Grez [21.04.2010 21:49:22]

#

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.

Clacier [21.04.2010 21:54:49]

#

Aivan. tajusin hieman väärin mutta kiitoksia taas nopeasta avusta. nyt kunnossa ja toimii kuten pitää.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta