[PHP] $_POST informatie onthouden in volgende isset

Pagina: 1
Acties:
  • 119 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een pagina met een dropdown box, waarin informatie zit (voor het gemaakt info-a en info-b).

Bij het selecteren van info-a blijf je in dezelfde pagina maar komt er achter de pagina ?informatie te staan.

Met behulp van deze code:
PHP:
1
2
3
 if(isset($_GET['informatie'])){
$informatienaam = $_POST['selectinfo']; //selectinfo is de naam van de dropdown box
}


Maar het probleem komt nu. Ik wil verder gaan met de url in een volgende isset. Wanneer de pagina pagina.php?informatie geopend wordt komen er namelijk nog meer keuzes, voor het gemak keuze 1 en keuze 2.

Keuze 1 leidt naar pagina.php?informatie&k1
Keuze 2 leidt naar pagina.php?informatie&k2

Het probleem komt nu:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
if(isset($_GET['informatie'])){
$informatienaam = $_POST['selectinfo']; //selectinfo is de naam van de dropdown box

if ((isset ($_GET['informatie'])) and (isset ($_GET['k1']))){
echo "$informatienaam";
echo "keuze 1 gekozen"; }

if ((isset ($_GET['informatie'])) and (isset ($_GET['k2']))){
echo "$informatienaam";
echo "keuze 2 gekozen"; }

} //sluiting if(isset($_GET['informatie']))


Het probleem is dat $informatienaam 'vergeten' is bij keuze 1 en keuze 2 en er niks komt bij echo "$informatienaam"; Dus ik vroeg mij af waarom dit zo is en hoe het op te lossen is?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • tyrion70
  • Registratie: December 2006
  • Laatst online: 14-05-2021
Euhm.. Als ik een beetje snap wat je bedoeld, ben je dus de info van je dropdown kwijt.

Wat ik meestal doe is het volgende:

code:
1
2
3
4
5
6
7
8
<?
if ($informatienaam) {
  echo "<input type=hidden name=informatienaam value=informatienaam";
} else {
  echo "<select name=informatienaam";
  ...
  ...
}


Op het moment dat je in het "tweede" formulier zit, houdt je dus de eerste in een hidden field. Als je dat consequent doet voor alle dropdowns, blijft die informatie beschikbaar.

Een tweede mogelijkheid is om de info in een session var te stoppen, zodat deze (eenmaal set) continu beschikbaar blijft..

HTH

Doe maar gek! Anderen doen al gewoon genoeg :P


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
tyrion70 schreef op maandag 22 januari 2007 @ 18:08:
Euhm.. Als ik een beetje snap wat je bedoeld, ben je dus de info van je dropdown kwijt.

Wat ik meestal doe is het volgende:

code:
1
2
3
4
5
6
7
8
<?
if ($informatienaam) {
  echo "<input type=hidden name=informatienaam value=informatienaam";
} else {
  echo "<select name=informatienaam";
  ...
  ...
}


Op het moment dat je in het "tweede" formulier zit, houdt je dus de eerste in een hidden field. Als je dat consequent doet voor alle dropdowns, blijft die informatie beschikbaar.

Een tweede mogelijkheid is om de info in een session var te stoppen, zodat deze (eenmaal set) continu beschikbaar blijft..

HTH
Ik ga maar voor de tweede mogelijkheid, want bij de eerste kom ik er niet helemaal uit.

De sessie mogelijkheid had ik zelf ook al eerder bedacht maar die werkte ook niet. Precies hetzelfde probleem :S

PHP:
1
2
$_SESSION['informatien'] = $_POST['selectinfo'];
        $informatienaam = $_SESSION['informatien'];


Dat kan ik dan overal neerzetten, maar bij de tweede isset komt er niks bij $informatienaam. Als ik echo "$informatienaam"; bij de eerste isset zet komt er wel uitvoer :S

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 18:29
session_start(); niet vergeten..

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat werkt ook niet. Ik heb session start net even overal geplaatst en het werkt nog steeds niet. Ik post even mijn volledige code:


PHP:
1
2
3
4
5
6
7
8
<?php
        session_start();
        $usern = 'test1';
        $_SESSION['usern'] = $usern;

        //verbinding met de database maken
        include("include/mysql.php");
?>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
        // Dorp Selecteren
        $sqldn = "SELECT naam AS dorpnaam FROM dorpen WHERE gNaam = '" . $_SESSION['usern'] . "'" ;
        $resultdn = mysql_query($sqldn) or die(mysql_error());
        $idn = mysql_fetch_array($resultdn);
        $idnaam = $idn['dorpnaam'];

        // Krachten van speler
        $sqlzw = "SELECT hoeveelheid AS zwtot FROM eenheden WHERE type = 'Zwaardvechter' AND  dorp = '" . $idnaam . "'" ;
        $resultzw = mysql_query($sqlzw) or die(mysql_error());
        $izw = mysql_fetch_array($resultzw);
        $zwtot = $izw['zwtot'];
        
        $sqlspm = "SELECT hoeveelheid AS spmtot FROM eenheden WHERE type = 'Speerman' AND  dorp = '" . $idnaam . "'" ;
        $resultspm = mysql_query($sqlspm) or die(mysql_error());
        $ispm = mysql_fetch_array($resultspm);
        $spmtot = $ispm['spmtot'];
        
        $sqlcav = "SELECT hoeveelheid AS cavtot FROM eenheden WHERE type = 'Cavalerie' AND  dorp = '" . $idnaam . "'" ;
        $resultcav = mysql_query($sqlcav) or die(mysql_error());
        $icav = mysql_fetch_array($resultcav);
        $cavtot = $icav['cavtot'];
?>

<p><span class="style1">Mijn leger<br>
</span><span class="style2">Zwaardvechters: <?php echo "$zwtot" ;?><br>
Speermannen: <?php echo "$spmtot" ;?><br>
Cavalerie: <?php echo "$cavtot" ;?></span></p>
<p class="style1">Dorp aanvallen<br>
<span class="style2"><em>
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
        
        echo "<form action=aanval.php?beginaanval method=POST><select name=dorpen>";
        while ($record = mysql_fetch_array($resultaat))
        {
            echo "<option value='". $record["naam"] ."'>".$record["naam"]."</option>";
        }
        echo "</select>";
        echo "<input type='submit'>";
        echo "</form>";?>


PHP:
1
2
3
4
5
<?php
        if(isset($_GET['beginaanval'])){
        $_SESSION['dorpnaamses'] = $_POST['dorpen'];
        $dorpnaam = $_SESSION['dorpnaamses'];
?>

<p class="style1">Kies een gevechtstype:</p>
<ul>
<li class="style2"><a href="aanval.php?beginaanval&speermannen">Speermannen</a></li>
<li class="style2"><a href="aanval.php?beginaanval&zwaardvechters">Zwaardvechters</a></li>
<li class="style2"><a href="aanval.php?beginaanval&cavalerie">Cavalerie</a></li>
</ul>
PHP:
1
2
3
4
5
<?php  }  // sluiting isset($_GET)
php if ((isset ($_GET['beginaanval'])) and (isset ($_GET['speermannen']))){
            echo "$dorpnaam";
}
?>


----------------------------


Dat is mijn volledige code. Dat van informatienaam enzo was maar een voorbeeld ;)

[ Voor 17% gewijzigd door Verwijderd op 22-01-2007 19:57 ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Waarom doe je alles zo moeilijk en erg lelijk. Sessies, POST en GET; alles door elkaar.
Ook
PHP:
1
<?php } ?>
zijn vreemde dingen.

Wat is er nu mis met
PHP:
1
2
3
4
<?php if ((isset ($_GET['beginaanval'])) and (isset ($_GET['speermannen']))){
echo $_POST['dorpen'];
}
?>


En post aub nu niet je hele code, en gebruik er fatsoenlijke [php][/php] tags voor (of [code=<language>][/code] met <language> php, javascript, html, css etc..

[ Voor 25% gewijzigd door mithras op 22-01-2007 19:48 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry ik zal het nu even wijzigen (mijn vorige bericht).

Ik zie ook geen probleem wat er mis is met
PHP:
1
2
3
4
<?php if ((isset ($_GET['beginaanval'])) and (isset ($_GET['speermannen']))){
echo $_POST['dorpen'];
}
?>


Maar dat werkt ook niet :(

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Probeer uberhaupt eens te debuggen. Doe een print_r op je POST en GET, kijk wat php vindt van afzonderlijke isset's. Dit is echt niet meer dan basic php waar waarschijnlijk de fout ergens anders in zit dan deze enkele regeltjes.
Kijk ook of misschien variabelen wel gedefinieerd zijn, maar leeg zijn :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mithras schreef op maandag 22 januari 2007 @ 19:57:
Probeer uberhaupt eens te debuggen. Doe een print_r op je POST en GET, kijk wat php vindt van afzonderlijke isset's. Dit is echt niet meer dan basic php waar waarschijnlijk de fout ergens anders in zit dan deze enkele regeltjes.
Kijk ook of misschien variabelen wel gedefinieerd zijn, maar leeg zijn :)
Sorry voor mijn onwetendheid :o , maar ik weet niet echt hoe je dat allemaal doet :o

Acties:
  • 0 Henk 'm!

  • tyrion70
  • Registratie: December 2006
  • Laatst online: 14-05-2021
Okee wat bedoeld wordt is het volgende:

Door ergens in je code het volgende neer te zetten:
PHP:
1
2
3
4
5
6
echo "<pre>";
print_r($GLOBALS); // print alle variabelen
print_r($_POST); // print post vars
print_r($_GET); // print get vars
print_r($_SESSION); // print session vars
echo "</pre>";


kun je eenvoudig zien of alles wel gevuld is zoals je denkt dat het gevuld is. Als je dat stukje code nou 's een paar keer tussen je code zet zie je vanzelf wat we bedoelen.

Doe maar gek! Anderen doen al gewoon genoeg :P


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
^^ met als aanvulling debuggen met bijvoorbeeld dit soort dingen:
PHP:
1
2
3
4
5
6
if (isset ($_GET['beginaanval']) ) {
  echo "beginaanval is een variabele";
}
if (isset ($_GET['speermannen']) ) {
  echo "speermannen is een variable";
}
Zo kan je kijken door platte tekst neer te zetten of je met het if statement dus dingen kan triggeren of dat er binnen { en } iets verkeert gaat. Het is bij debuggen in het begin belangrijker om te weten wáár het fout gaat dan wát er fout gaat. Met simpele echo statements kan je dus kijken of de omliggende code wordt uitgevoerd of niet.

Als bovenstaande teksten niet worden geprint, weet je dat isset ($_GET['beginaanval']) een false returnt :)
offtopic:
En het was niet de bedoeling _zo_ bot over te komen. Echter zijn dit vrij simpele dingen, die vaak neerkomen op debuggen. En GoT is bedoeld voor structurele problemen, niet om code te debuggen. Vandaar mijn reactie. Excuses als het wat te hard over is gekomen :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mithras schreef op maandag 22 januari 2007 @ 21:10:
^^ met als aanvulling debuggen met bijvoorbeeld dit soort dingen:
PHP:
1
2
3
4
5
6
if (isset ($_GET['beginaanval']) ) {
  echo "beginaanval is een variabele";
}
if (isset ($_GET['speermannen']) ) {
  echo "speermannen is een variable";
}
Zo kan je kijken door platte tekst neer te zetten of je met het if statement dus dingen kan triggeren of dat er binnen { en } iets verkeert gaat. Het is bij debuggen in het begin belangrijker om te weten wáár het fout gaat dan wát er fout gaat. Met simpele echo statements kan je dus kijken of de omliggende code wordt uitgevoerd of niet.

Als bovenstaande teksten niet worden geprint, weet je dat isset ($_GET['beginaanval']) een false returnt :)
offtopic:
En het was niet de bedoeling _zo_ bot over te komen. Echter zijn dit vrij simpele dingen, die vaak neerkomen op debuggen. En GoT is bedoeld voor structurele problemen, niet om code te debuggen. Vandaar mijn reactie. Excuses als het wat te hard over is gekomen :)
offtopic:
Ik had er geen problemen mee :) Ik ben al hartstikke blij dat je mij probeert te helpen :)


Ik neem aan dat de informatie voor de phpsessieid het belangrijkste is bij de debug.

Als ik op de submit button klik krijg ik:
code:
1
2
3
4
5
6
Array
(
    [GLOBALS] => Array
 *RECURSION*
    [beginaanval] => 
    [dorpen] => Utrecht


En als ik op speermannen klik verschijnt er:
code:
1
2
3
4
5
6
Array
(
    [GLOBALS] => Array
 *RECURSION*
    [beginaanval] => 
    [speermannen] =>


Jaja [dorpen] is verdwenen!

Ik heb net een uur met sessies zitten werken en het was mij gelukt om het een klein beetje voor elkaar te krijgen, maar daar gaat het uiteindelijk ook fout.

Hiervoor had ik voor de include(config.php) code dit geschreven
PHP:
1
        $dorpnaam = $_SESSION['dorpnaamses'];


En de eerste isset verandert in:
PHP:
1
2
3
4
5
<?php
        if(isset($_GET['beginaanval'])){
        $_SESSION['dorpnaamses'] = $_POST['dorpen'];
        echo "$dorpnaam";
?>


Tweede isset:
PHP:
1
2
3
4
if(isset($_GET['speermannen'])){
        echo "$dorpnaam";
        echo "speermannen is een variable"; 
}


Na het klikken op het submit button krijg ik de uitvoer van $dorpnaam (Utrecht) te zien. Dit krijg ik dan nog een keer te zien als ik ook nog eens op speermannen klik, maar klik ik nogmaals op speermannen of op iets anders dan lijkt het alsof de sessie is geleegd en moet ik helemaal opnieuw beginnen. De sessie wordt dus automatisch geleegd na 2 links :|
Pagina: 1