[PHP/HTML] Keuze menu specifieke redirect

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
Dag mensen,

Ik probeer een stukje code te schrijven in PHP en HTML, een combinatie daarvan.
Probeer het volgende te bereiken:
Een formulier waar men zijn/haar voornaam, achternaam en mailadres invult, vervolgens kies je met een keuze menu (drop-down menu) een vestiging, alles gegevens worden gebundeld en worden naar hun respectievelijke vestiging gestuurd.
Elke vestiging heeft haar logo en adres gegevens en kleuren.
Ik heb de volgende code gemaakt maar ik krijg een aantal foutmeldingen vooral als ik op "Handtekening maken" klik, namelijk de volgende foutmelding:

code:
1
Notice: Undefined index:


Nu weet ik ongeveer wel hoe het komt, hij weet niet waar hij de informatie moet zoeken.
Ik heb echter geen idee hoe ik dit moet oplossen.

Dit is mijn index.php:
https://pastebin.com/zcs8hZpQ

En hier is een voorbeeld pagina van een vestiging:
https://pastebin.com/h9DJmzBt

Kan iemand mij helpen? Het is waarschijnlijk zo gepiept.. ik kom er alleen niet meer uit..

Groet,
Luuk

Soundcloud!

Alle reacties


Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Gefeliciteerd met je eerste stapjes in PHP.
Voordat je deze code überhaupt op internet slingert moet je even aan beveiliging doen zoals:

PHP:
1
echo isset($_GET['voornaam']) ? htmlspecialchars($_GET['voornaam']) : 'onbekend';
of met if/else i.p.v. ternary
PHP:
1
2
3
4
5
if (isset($_GET['voornaam'])) {
    echo htmlspecialchars($_GET['voornaam']);
} else {
    echo 'onbekend';
}



Verder heb je
PHP:
1
2
3
   if (isset($_GET["school"])) {
       // User submitted their choice, so redirect to that page
       // Make sure not to echo anything when using header():

Doe dat dan ook niet en schuif dit stuk naar regel 1 VOORDAT je echo "anything" (de HTML dus).

[ Voor 19% gewijzigd door DJMaze op 03-10-2017 16:30 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Luister zeker naar de tip van @DJMaze over de veiligheid van je $_GET-variabelen, dit is echt essentieel!

M.b.t. je 'undefined index' error het volgende:

In de hoofdpagina wil je het volgende doen:

PHP:
1
2
3
4
5
6
7
   if (isset($_GET["school"])) {
       // User submitted their choice, so redirect to that page
       // Make sure not to echo anything when using header():
       header("Location: " . $_GET["school"] . ".php");
       // Make sure to not execute any other code in this file
       exit();
   }


Zoals DJMaze al aangaf moet je dit bovenaan in je code zetten, vervolgens stuurt dit stuk code de user door naar de geselecteerde school, op dit moment keuze tussen 1,2,3 en 4. Kiest iemand voor 3 dan wordt deze persoon met je code dus naar 3.php gestuurd.

Maar in de pagina van de vestiging (3.php?) wil je vervolgens allerlei $_GET-variabelen outputten zoals:

PHP:
1
<?php echo $_GET["functie"]; ?>


Maar deze variabelen zijn natuurlijk volstrekt onbekend omdat ze niet in de querystring zitten.

En zoals je het nu in elkaar hebt zitten moet je dus voor elke vestiging een aparte .php-file maken. De kern van een dynamische taal is nu net dat je daar slimme oplossingen voor verzint:

PHP:
1
2
3
4
5
6
7
8
if (isset($_GET["school"])) {
    // we verwachten een nummer, dus test daarop
    if (is_numeric($_GET["school"])){
        // 1 vestiging-pagina waarin je de $_GET['school']-var op kunt halen
        header("Location: vestiging.php?school=" . $_GET["school"]);
        exit();
    }
}

[ Voor 18% gewijzigd door Harrie_ op 03-10-2017 17:02 ]

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
Harrie_ schreef op dinsdag 3 oktober 2017 @ 16:50:
Luister zeker naar de tip van @DJMaze over de veiligheid van je $_GET-variabelen, dit is echt essentieel!

M.b.t. je 'undefined index' error het volgende:

In de hoofdpagina wil je het volgende doen:

PHP:
1
2
3
4
5
6
7
   if (isset($_GET["school"])) {
       // User submitted their choice, so redirect to that page
       // Make sure not to echo anything when using header():
       header("Location: " . $_GET["school"] . ".php");
       // Make sure to not execute any other code in this file
       exit();
   }


Zoals DJMaze al aangaf moet je dit bovenaan in je code zetten, vervolgens stuurt dit stuk code de user door naar de geselecteerde school, op dit moment keuze tussen 1,2,3 en 4. Kiest iemand voor 3 dan wordt deze persoon met je code dus naar 3.php gestuurd.

Maar in de pagina van de vestiging (3.php?) wil je vervolgens allerlei $_GET-variabelen outputten zoals:

PHP:
1
<?php echo $_GET["functie"]; ?>


Maar deze variabelen zijn natuurlijk volstrekt onbekend omdat ze niet in de querystring zitten.

En zoals je het nu in elkaar hebt zitten moet je dus voor elke vestiging een aparte .php-file maken. De kern van een dynamische taal is nu net dat je daar slimme oplossingen voor verzint:

PHP:
1
2
3
4
5
6
7
8
if (isset($_GET["school"])) {
    // we verwachten een nummer, dus test daarop
    if (is_numeric($_GET["school"])){
        // 1 vestiging-pagina waarin je de $_GET['school']-var op kunt halen
        header("Location: vestiging.php?school=" . $_GET["school"]);
        exit();
    }
}
Ah, dat stukje code moet dus bovenaan de pagina, ik heb hem boven de button staan..
Verder is dit een intern stukje code en zal dus niet buiten de organisatie gebruikt worden.

Het declareer ik deze variabelen op de andere pagina? Hoe stuur ik deze mee?

Soundcloud!


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Luukwa schreef op woensdag 4 oktober 2017 @ 07:58:
[...]
Het declareer ik deze variabelen op de andere pagina? Hoe stuur ik deze mee?
Zoals ik in onderstaand stuk code al aangaf:

PHP:
1
2
3
4
5
6
7
8
if (isset($_GET["school"])) {
    // we verwachten een nummer, dus test daarop
    if (is_numeric($_GET["school"])){
        // 1 vestiging-pagina waarin je de $_GET['school']-var op kunt halen
        header("Location: vestiging.php?school=" . $_GET["school"]);
        exit();
    }
}


Als je meer variabelen mee wilt geven, kan dat ook:

PHP:
1
header("Location: vestiging.php?school=" . $_GET["school"] . "&var1=". $var1 . "&var2=" . $var2); // etc.


Vervolgens kun je op de vestiging.php (of whatever pagina je de user naartoe stuurt) alle variabelen aan in de $_GET-scope. In bovenstaand voorbeeld heb je dan $_GET['school'], $_GET['var1'] en $_GET['var2'] om te gebruiken....

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
Harrie_ schreef op woensdag 4 oktober 2017 @ 08:27:
[...]


Zoals ik in onderstaand stuk code al aangaf:

PHP:
1
2
3
4
5
6
7
8
if (isset($_GET["school"])) {
    // we verwachten een nummer, dus test daarop
    if (is_numeric($_GET["school"])){
        // 1 vestiging-pagina waarin je de $_GET['school']-var op kunt halen
        header("Location: vestiging.php?school=" . $_GET["school"]);
        exit();
    }
}


Als je meer variabelen mee wilt geven, kan dat ook:

PHP:
1
header("Location: vestiging.php?school=" . $_GET["school"] . "&var1=". $var1 . "&var2=" . $var2); // etc.


Vervolgens kun je op de vestiging.php (of whatever pagina je de user naartoe stuurt) alle variabelen aan in de $_GET-scope. In bovenstaand voorbeeld heb je dan $_GET['school'], $_GET['var1'] en $_GET['var2'] om te gebruiken....
Het probleem, als je dat zo kunt noemen, is dat je niet op een aparte pagina komt, maar op vestiging.php?school=2 of vestiging.php?school=3

Hoe zorg ik er voor dat elk volg nummer een aparte layout heeft?

Soundcloud!


Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Harrie_ schreef op woensdag 4 oktober 2017 @ 08:27:
Als je meer variabelen mee wilt geven, kan dat ook:

PHP:
1
header("Location: vestiging.php?school=" . $_GET["school"] . "&var1=". $var1 . "&var2=" . $var2); // etc.
Zullen we dat even netjes doen?
PHP:
1
2
$params = $_GET;
header("Location: vestiging.php?" . http_build_query($params));

of
PHP:
1
2
3
$params = array();
$params['school'] = 1;
header("Location: vestiging.php?" . http_build_query($params));
Luukwa schreef op woensdag 4 oktober 2017 @ 09:04:
Hoe zorg ik er voor dat elk volg nummer een aparte layout heeft?
PHP:
1
2
3
4
5
6
7
8
$school = isset($_GET['school']) ? intval($_GET['school']) : 0;
if (1 == $school) {}
// of
switch ($school)
{
    case 1:
        break;
}

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

DJMaze schreef op woensdag 4 oktober 2017 @ 09:57:
[...]

Zullen we dat even netjes doen?
PHP:
1
2
$params = $_GET;
header("Location: vestiging.php?" . http_build_query($params));

of
PHP:
1
2
3
$params = array();
$params['school'] = 1;
header("Location: vestiging.php?" . http_build_query($params));
@DJMaze heeft gelijk; dat is een stuk netter. Mijn methode was nogal quick en dirty. Hou er rekening mee dat je bij de methode van DJMaze al je variabelen eerst in een array (in zijn voorbeeld [i]$params[/i]) moet duwen.
Luukwa schreef op woensdag 4 oktober 2017 @ 09:04:
[...]
Het probleem, als je dat zo kunt noemen, is dat je niet op een aparte pagina komt, maar op vestiging.php?school=2 of vestiging.php?school=3

Hoe zorg ik er voor dat elk volg nummer een aparte layout heeft?
Als de layouts echt vollédig afwijken van elkaar dan zou je terug kunnen gaan naar je originele insteek waarbij je via de header doorverwijst naar $_GET['school'] . ".php", waarmee je de gebruiker dus effectief naar 1.php, 2.php, 3.php, etc. stuurt.

Als je dezelfde layout/content hanteert maar met andere styling zou je ook bijvoorbeeld een apart CSS-bestand kunnen inladen wanneer vestiging.php?school=2 wordt geopend, als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="css/style_algemeen.css">
        <?PHP
            if (isset($_GET['school']){
                if (file_exists("css/style_school_" . $_GET['school'] . ".css")) {
                    // checken of specifiek css bestand voor school bestaat, zoja: inladen
                    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style_school_" . $_GET['school'] . ".css\">";
                } else {
                    // specifiek css bestand voor school bestaat niet: default-file inladen.
                    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style_school_default.css\">";
                }
            }
        ?>
     </head>
[...]


Disclaimer: voorbeeld ter illustratie hoe je zo'n probleem zou kunnen aanvangen. In bovenstaand voorbeeld heb ik $_GET['school'] verder niet gecheckt of gesanitized op malafide input; daarvoor verwijs ik je door naar het bovenstaande voorbeeld van DJMaze d:)b

[ Voor 3% gewijzigd door Harrie_ op 04-10-2017 10:11 ]

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Luukwa schreef op dinsdag 3 oktober 2017 @ 15:55:
Nu weet ik ongeveer wel hoe het komt, hij weet niet waar hij de informatie moet zoeken.
Feitelijk betekend de waarschuwing dat er naar een index/key in een array verwezen wordt die gewoon niet bestaat binnen de opgegeven array.

[ Voor 23% gewijzigd door CH4OS op 04-10-2017 10:16 ]


Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
Mensen, met hulp van jullie en iemand van stack overflow ben ik iets verder gekomen, maar zit nu weer vast.
Ik heb de volgende code toevoegt aan de bovenkant van mijn pagina:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    if(isset($_GET["school"])) {
        if($_GET["school"] == 1){
           header('Location: bbs.php');
       }elseif($_GET["school"] == 2){
           header('Location: http://www.youtube.com/');
       }elseif($_GET["school"] == 3){
           header('Location: http://www.stackoverflow.com/');
       }
       exit();
       }
       
    $voornaam = $_GET["voornaam"];
    $achternaam = $_GET["achternaam"];
    $email = $_GET["mail"];
    $functie = $_GET["functie"];

    echo $voornaam;
    echo $achternaam;
    echo $email;
    echo $functie;
?>


Dit stuurt volgens mij alles netjes naar de volgende URL:
post?voornaam=test&achternaam=test&email=test&functie=test&school=1

Echter heb ik geen idee hoe ik deze informatie kan verwerken in aparte pagina's?
Ik wil persé aparte pagina's omdat de handtekeningen al gemaakt zijn in HTML.

Iemand die me verder kan helpen?

Soundcloud!


Acties:
  • 0 Henk 'm!

  • Hopscotch
  • Registratie: September 2015
  • Laatst online: 28-09-2021
Als je enige doel van de eerste pagina is om je door te verwijzen naar de juiste volgende pagina waarbij je alle ingevulde informatie doorgeeft kan je dat volgens mij veel beter client side oplossen met javascript.

Zet op de onchange van je select een functie die de action van je form aanpast naar de juiste vestigings url. Disable je submit knop zolang de action leeg is.

Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
Hopscotch schreef op donderdag 5 oktober 2017 @ 09:44:
Als je enige doel van de eerste pagina is om je door te verwijzen naar de juiste volgende pagina waarbij je alle ingevulde informatie doorgeeft kan je dat volgens mij veel beter client side oplossen met javascript.

Zet op de onchange van je select een functie die de action van je form aanpast naar de juiste vestigings url. Disable je submit knop zolang de action leeg is.
Totaal geen ervaring mee, is er ergens een handleiding of documentatie van?

Soundcloud!


Acties:
  • +1 Henk 'm!

  • Shivs
  • Registratie: Januari 2010
  • Niet online
Het kan op meerdere manieren worden opgelost, maar dat is niet zozeer het probleem. Ik denk dat je voor jezelf goed moet nagaan wat het moet doen en welke stappen er nodig zijn om dit voor elkaar te krijgen. Als voorbeeldje:

- Selecteren van een locatie
-- HTML formulier met dropdown veld met waardes per locatie
- Invullen naam
-- HTML input veld voor naam
- Invullen functie
-- HTML input veld voor functie
enz.

- Op basis van locatie de gebruiker naar de pagina van de locatie sturen met behoud ingevulde waardes
-- PHP afvangen ingevulde locatie
-- PHP op basis van ingevulde locatie een redirect naar de locatie pagina
-- PHP meesturen ingevulde waardes naar nieuwe pagina

- Op elke locatiepagina de ingevulde waardes uitlezen
-- PHP waardes ophalen
-- PHP waardes op de juiste locatie plaatsen

Als je op deze manier het hele verhaal invult en stapje voor stapje dit in de code zet krijg je veel meer een beeld van wat je aan het doen bent en waar de uitdagingen zitten. Het kopiëren van stukken code zonder te snappen welk van je uitdagingen dit oplost brengt je uiteindelijk niet het gewenste resultaat.

Probeer dus eerst voor jezelf duidelijk te maken wat je wilt doen en daarna pas het op te lossen.

Acties:
  • 0 Henk 'm!

  • Hopscotch
  • Registratie: September 2015
  • Laatst online: 28-09-2021
Luukwa schreef op donderdag 5 oktober 2017 @ 10:28:
[...]


Totaal geen ervaring mee, is er ergens een handleiding of documentatie van?
Teveel om op te noemen, zou ook niet echt weten waar je het best kunt beginnen.

Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<title>test</title>
<form id="myform" action="" method="GET">
  <label for="voornaam">Voornaam</label> <input id="voornaam" type="text" name="voornaam"><br>
  <label for="vestiging">Vestiging</label> <select id="vestiging">
    <option value="" selected disabled>Kies een vestiging</option>
    <option value="http://www.youtube.com">youtube</option>
    <option value="http://www.google.com">google</option>
    <option value="http://www.tweakers.net">tweakers</option>
  </select><br>
  <button id="submitbutton" type="submit" disabled>Submit</button>
</form>
<script>
  var select = document.getElementById("vestiging");
  select.addEventListener("change", vestigingChanged);

  function vestigingChanged(event) {
    var form = document.getElementById("myform");
    var action = this.options[this.selectedIndex].value;
    form.setAttribute("action", action);
    
    var button = document.getElementById("submitbutton");
    button.removeAttribute("disabled");
  }
</script>

Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Luukwa schreef op donderdag 5 oktober 2017 @ 09:10:
Echter heb ik geen idee hoe ik deze informatie kan verwerken in aparte pagina's?
Ik wil persé aparte pagina's omdat de handtekeningen al gemaakt zijn in HTML.

Iemand die me verder kan helpen?
Ja, je eigen code en de posts hierboven kunnen je prima verder helpen.
Gewoon aan de slag gaan.

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
Mensen, het is me inmiddels gelukt!

Ik heb het met hulp van iemand van stack overflow en jullie op deze manier opgelost:
Deze lijn code is per vestiging, dus 5 in totaal.
code:
1
2
if($_GET["school"] == 1){
           header("Location: " . "bbs.php" . "?voornaam=" . $voornaam . "&achternaam=" . $achternaam . "&email=" . $email . "&functie=" . $functie);


Oproepen doe ik op deze manier:
code:
1
:<?php echo $_GET["email"]; ?>


Hartstikke bedankt!

[ Voor 3% gewijzigd door Luukwa op 05-10-2017 14:49 ]

Soundcloud!


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
edit:
dubbel post

[ Voor 92% gewijzigd door DJMaze op 05-10-2017 15:35 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Luukwa schreef op donderdag 5 oktober 2017 @ 14:49:
Deze lijn code is per vestiging, dus 5 in totaal.
Graag gedaan, maar je hebt niet helemaal geluisterd.
Zoek hierboven even naar de oplossing met: http_build_query

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Luukwa
  • Registratie: Maart 2013
  • Laatst online: 08-10 09:07
DJMaze schreef op donderdag 5 oktober 2017 @ 15:35:
[...]

Graag gedaan, maar je hebt niet helemaal geluisterd.
Zoek hierboven even naar de oplossing met: http_build_query
Ik heb het met de querry geprobeerd maar kreeg het niet aan de praat..
Dit was mijn stukje code:

code:
1
2
3
4
$query = array(
            'voornaam' => $_POST['voornaam']);
            $query = http_build_query($query);
           header('Location: 2.php?$query');

Soundcloud!


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Luukwa schreef op donderdag 5 oktober 2017 @ 16:00:
Ik heb het met de querry geprobeerd maar kreeg het niet aan de praat..
Dit was mijn stukje code:

code:
1
2
3
4
$query = array(
            'voornaam' => $_POST['voornaam']);
            $query = http_build_query($query);
           header('Location: 2.php?$query');
Je zult de andere variabelen aan de array toe moeten voegen:

PHP:
1
2
3
4
5
6
7
$params = array(
    'voornaam'   => $_GET['voornaam'],
    'achternaam' => $_GET['achternaam'],
    'email'      => $_GET['email'],
    'functie'    => $_GET['functie']
);
header("Location: vestiging.php?" . http_build_query($params));


Of, zoals in het voorbeeld van @DJMaze per key:

PHP:
1
2
3
4
5
6
7
8
$params = array();

$params['voornaam']   => $_GET['voornaam'];
$params['achternaam'] => $_GET['achternaam'];
$params['email']      => $_GET['email'];
$params['functie']    => $_GET['functie'];

header("Location: vestiging.php?" . http_build_query($params));

Wanneer je in HTML je PHP variabelen wil echo-en dan kan dat trouwens (vanaf PHP v5.4.0) met short-tags:

HTML:
1
2
3
<div>
    <p><?= $var; ?></p>
</div>


Kleine sidenote: fijn dat je de [code]-tag gebruikt dat wil men hier nog weleens vergeten... Als je de tag verrijkt met [code=PHP] dan krijgen we de PHP-code ook nog met mooie kleurtjes te zien :) :>

[ Voor 23% gewijzigd door Harrie_ op 05-10-2017 16:16 ]

Hoeder van het Noord-Meierijse dialect

Pagina: 1