Jump to content
GSForum - Segélyvonal

URL léptetés


doctorwho

Recommended Posts

doctorwho

Sziasztok!

 

Ismét a segítségeteket szeretném kérni.

Van egy html oldalam, amiben select, option megoldással egy legördülõ listában fel vannak sorolva témák.

Hogy tudom azt megcsinálni, hogyha az egyiket kijelöltem majd rámegyek a kiválaszt gombra, akkor a megfelelõ oldalra ugrik.

Köszönöm a segítségeteket!

Link to comment
Share on other sites

arpsoft

A gombra meghívsz egy php oldalt, ami kiértékeli a legördülõ mezõ tartalmát és a kívánt url-t elhelyezi a $cUrl változóba, majd egy header("Location: ".$cUrl); hívással elküldöd a megfelelõ oldalra.

Link to comment
Share on other sites

doctorwho

Szia!

 

Azt írja, hogy az oldal nem megfelelően van átirányítva.

Tudnál ide írni általánosságban egy kódot?

Köszi

Edited by doctorwho
Link to comment
Share on other sites

kléni

Ha ilyen hibát kapsz, akkor ugyan arra a fájltra irányít vissza. Lehetséges, hogy elírtad az url-t. Az átirányítást vedd ki, és írd ki a változót, aholva átirányítanád, hogy tudd, mi a baj vele. Ha például üres, akkor fentebb valamit elírtál.

Link to comment
Share on other sites

doctorwho

<?php

$cUrl="valaszt";

("Location: ".$cUrl);

?>

 

Mit javítsak benne?

Link to comment
Share on other sites

payskin
<?php

$cUrl="valaszt";

("Location: ".$cUrl);

?>

Erre nem azt mondja a PHP, hogy nem megfelelően van átirányítva, hanem, hogy mi a búbánatos retek van a 3. sorban? :o

 

Úgyhogy itt álljunk meg, és lássuk a először a form html kódját!

 

[ code ] és [ /code ] jelölők közé másold be ide, csak ne tegyél bele szóközt, mint most én, és akkor ilyesmi lesz az eredmény, mikor elküldöd a hozzászólást, és mindannyian kulturált keretek között tudjuk szemlélni!

 

<form name="tralala" id="valami" action="én-vagyok-az-url-ahova-a formot-küldjük-vagy-üres-vagyok-úgy-is-jó" method="post">
    <select name="nyeremeny">
        <option value="0">Okvetlenül válassz!</option>
        <option value="1">Egyes ajtó, nyílj ki!</option>
        <option value="2">Kettes ajtó, nyílj ki!</option>
        <option value="3">Megnézem, mi van a hármas ajtó mögött</option>
    </select>
    <button type="submit">Igen, Vágó úr, biztos vagyok</button>
</form>

Ha 39 option van benne, elég csak az első 3-4-et bemásolni, ok? Aztán majd onnan lépünk tovább okosan. :igen:

Link to comment
Share on other sites

doctorwho

Szia!

 

Köszi, eddig megvagyok. Mehetünk tovább. :)

Link to comment
Share on other sites

doctorwho
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Teszt</title>
</head>
<body>
<form action="valaszt.php" method="POST">
<table align="center" width="400" border="0">
  <tr>
    <th scope="col"><img src="logo.png" width="117" height="132" /></th>
    <th scope="col">Teszt</th>
  </tr>
</table>
</head>
<body>
<table align=center cellspacing=15>
<tr>
<td><b>Kérlek válassz kart:</b></td>
<td>
<select name"karok">
<option value="ajk">Állam -és Jogtudományi Kar</option>
<option value="btk">Bölcsészettudományi Kar</option>
<option value="htk">Hittudományi Kar</option>
</select>
</td>
</tr>
</table>
<p align="center">
<button type="submit">Kiválaszt</button>
</p>
</form>
</body>
</html>

Link to comment
Share on other sites

kléni

Ennek valahogy így kellene kinéznie, hogy szabályos, szép, működőképes, és átlátható legyen:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Teszt</title>
    </head>
    <body>
        <form action="valaszt.php" method="post">
            <p>
                <img src="logo.png" />
                Teszt
            </p>
            <p>Kérlek válassz kart:
                <select name="karok">
                    <option value="ajk">Állam -és Jogtudományi Kar</option>
                    <option value="btk">Bölcsészettudományi Kar</option>
                    <option value="htk">Hittudományi Kar</option>
                </select>
            </p>
            <input type="submit" name="kuldes" value="Kiválaszt" />
        </form>
    </body>
</html>

Egymás mellé igazításhoz nem kell táblázat. A head-ot kétszer zártad le, és a body-t is kétszed nyitottad meg. A select name attribútuma után lemaradt a =, így nem is volt neki neve, a későbbiekben nem is küldte el az értékét a php fájlnak. Elküdő gombnak button helyett használj input-ot. A html5 megjelent már egy ideje, használd! :) Látod, sokkal egyszerűbb vele felépíteni a fejlécet is. Balázs várjuk meg a következő lépéssel. :D

 

<code> helyett

 kell, hogy átalakuljon formázottra a kód itt a fórumon.
Link to comment
Share on other sites

doctorwho

Köszi!

Link to comment
Share on other sites

payskin

Jól sejtettem, hogy a probléma még nem a programozás szintjén van, hanem az alapoknál.

 

Mondanám, hogy a téma tetején van egy FIGYELEM! című doboz, és az abban leírtak esetedben hatványozottan érvényesek, de ezzel persze te nem leszel előbbre, nekem viszont nincs se időm, se kedvem, meg az utóbbi években kicsit belefáradtam, hogy falra hányt borsó formájában próbáljam meg átadni a tudásom. (Vagy csak rossz napom van, tegnap meg nem volt az.)

 

Nem tudom, hogy olvasol-e PC Worldöt, amennyiben igen, úgy nagyon ajánlanám a 3-4 évvel ezelőtti Weboldalkészítő suli cikkeit (fent vannak a neten is), hasznodra lehetnének.

 

Mivel Kléni még lelkes, rábízom, hogy írjon neked egy egyszerű működő példát, aztán lépjünk túl az egészen eldöntheted, hogy érteni is akarod a dolgot, vagy csak egy egyszeri kaland volt. :hááát:

 

Az e-mailes dolognál dettó ezt kéne tenni, csak nagyon szépen kérem, hogy azt a hülyeséget ne kövessük el, hogy közvetlenül, szűrés nélkül használjuk a $_GET-ben, $_POST-ban jövő adatokat, mert sírva fakadok. :)

Link to comment
Share on other sites

kléni

Ha az általam írt példát követed, a valaszt.php-nak így kellene kinéznie:

 

<?php
if (!isset($_POST["karok"]))
    header("Location: form.php");
switch ($_POST["karok"])
{
    case "ajk" :
    case "btk" :
    case "htk" :
        header("Location: ".$_POST["karok"].".php");
    default:
        header("Location: form.php");
}
?>

Ha nincs karok az elküldött adatok között (például gönbészőből nyitotta meg valaki a fájlt), vagy a select elküldött értéke más, mint amit mi szeretnénk (konzolból át lehet írni), a kiindulási fájlra térünk vissza. Ha viszont jó, akkor átirányítjuk a megfelelő fájlra.

 

Szerintem, ha csak ez a 3 opció van, érdemes lenne egy listába írni linkekkel, és nincs is szükség erre az átirányító programra.

Link to comment
Share on other sites

payskin

Kösz, Kléni! :)

Link to comment
Share on other sites

doctorwho

Nagyon szépen köszönöm mindenkinek a segítséget!

Link to comment
Share on other sites

sandor676

Kipróbáltam ezt a kódot.

<?php
if (!isset($_POST["karok"]))
    header("Location: form.php");
switch ($_POST["karok"])
{
    case "ajk" :
    case "btk" :
    case "htk" :
        header("Location: ".$_POST["karok"].".php");
    default:
        header("Location: form.php");
}
?>

Nálam nem mûködik.

Én is ilyen legördülõ menübõl akarok kiválasztani dolgokat, de mindig visszadobja a kezdõ oldalt.

Link to comment
Share on other sites

kléni

Használd a fentebb lévõ form kódot is.

Link to comment
Share on other sites

payskin

A default elé, a header(...) után tegyél be egy break-et vagy egy exit-et!

 

<?php
if (!isset($_POST['karok']))
{
    header('Location: form.php');
    exit;   
}

switch ($_POST['karok'])
{
    case 'ajk' :
    case 'btk' :
    case 'htk' :
        header('Location: ' . $_POST['karok'] . '.php');
        exit;

    default:
        header('Location: form.php');
        exit;
}

A header() kiadása után ugyanis NEM ÁLL MEG a PHP futása. A böngésző megkapja ugyan, hogy mennie kell máshova, de amíg ezt "lereagálja", azalatt a PHP fut tovább, a fenti esetben például simán rámegy a default: ágra, és végül a form.php-ra küldi vissza a böngészőt. Épp ezért ezt elegánsan úgy szokták megoldani, hogy

 

function redirect($url)
{
    header('Location: ' . $url);
    exit;
}

És akkor nem kell mindenhol headerezni, meg exitelni, hanem elég a redirect functiont használni.

Link to comment
Share on other sites

kléni

Hopp, az tényleg kimaradt. :upsz: Én egy külön függvényt használok átirányításra, és utólag megnézve abban is benne van.

Link to comment
Share on other sites

payskin

Esetleg, ha meg akarunk halni a szépség oltárán, és hódolni az 1 helyen lépünk be, 1 helyen lépünk ki irányelvnek, akkor...

 

<?php
$ide_megyunk = 'form.php';

if (isset($_POST['karok']))
{
    switch ($_POST['karok'])
    {
        case 'ajk' :
        case 'btk' :
        case 'htk' :
            $ide_megyunk = $_POST['karok'] . '.php';
        break;
    }
}

redirect($ide_megyunk);

+ a fenti redirect function...

;)

 

Sőt, mivel én nem kimondottan szeretem a switchet:

 

<?php
$ide_megyunk = 'form.php';

if (isset($_POST['karok']) && preg_match('/^(ajk|btk|htk)$/', $_POST['karok']))
{
    $ide_megyunk = $_POST['karok'] . '.php';
}

redirect($ide_megyunk);

+ a fenti redirect function...

 

PHP Szabadegyetem :) De mindjárt jön Pjotr, és úgy helyretesz minket, öröm lesz nézni! :D

Link to comment
Share on other sites

kléni
Egyébként ehhez hogy-hogy volt kedved? :fütyül:
Link to comment
Share on other sites

payskin

Bent ültem még a melóhelyen, már félórája nem dolgoztam, de vártam arra, hogy a srácok három nagyon régi gép élveboncolásából összerakjanak egy használhatót. Úgyhogy épp nem volt jobb dolgom... :)

 

De ma amúgy sincs rossz napom. :P

Link to comment
Share on other sites

Pjotr

Eigen, a switch-case és a regexp-es megoldás hasonlóan rossz, mintkettő annyira rugalmas, mint az öntöttvas. :fogatlan:

 

A lehetőségeket érdemesebb egy kollekcióba rakni, majd a megfelelőt esetleg case-insensitive módon keresni (Unix/Linux rendszereken nyilván lehet szívás, de ezt is meg lehet oldani).

Link to comment
Share on other sites

payskin

Na, mondtam. :lol:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...