Session en button.

Status
Niet open voor verdere reacties.

BZilla

Gebruiker
Lid geworden
16 apr 2014
Berichten
170
Goedemorgen allen,

Ik ben al vaker tegen dit probleem aangelopen en wil het nu graag goed oplossen..
Ik heb een textveld. Daar vul ik iets in en die waarde wil ik doormiddel van een button verplaatsen naar een andere pagina.

Ik doe dit met session.
Dit is geen enkel probleem wanneer ik eerst de waarde opsla met de ene button, en daarna verzend met een andere button.
Je begrijpt dat dit niet echt een fantstische oplossing is dus ik wil dat graag met 1 button doen..

Dit is mijn code. Enig idee wat ik hier fout doe?

Pagina 1:


PHP:
session_start();
$textoutput = '';	

if(isset($_POST['newsite']))
{
	$textoutput= $_POST['output'];
}
$_SESSION['textoutput'] = $textoutput;

HTML:
<form action=" <?php $_SERVER['PHP_SELF'] ?>" method="POST">
	<table>
		<tr>
			<td class="newSiteTable"><b>vul in:</b></td>
			<td class="newSiteTable"><input type="textbox" name="output" style="width: 150px;"></td>
		</tr>
	</table>
	<input type="button" class="newSite" name="newsite" value="New site" onclick="window.location.href='site.php'">
</form>

Pagina 2:
PHP:
session_start();

if(isset($_POST['newsite']))
{
	$textoutput = $_SESSION['textoutput'];
	echo $textoutput;
}

Bijvoorbaad dank!

Bzilla
 
In welke volgorde moet ik dit bekijken? Ik neem aan eerst het HTML-formulier, die stuurt het naar Pagina 1 maar wanneer kom ik op Pagina2 dan?

Verder heb ik al (meerdere keren volgens mij) aangegeven dat de enige juiste (en betrouwbare) manier om een formulier af te handelen is het controleren op REQUEST_METHOD en niet of een veld bestaat.

Ook is jouw probleem mij niet echt duidelijk, is het probleem dat de sessie niet juist opgeslagen wordt of wat zou er moeten gebeuren maar gebeurt niet?
 
Sorry voor het verkeerde uitleg, ik zal het duidelijker proberen te maken.

Op pagina 1 heb ik een html formulier met daarin een textbox en een button.
Die button moet de inhoud van de textbox versturen naar pagina 2.

Op dit moment werkt het niet. niets meer en niets minder.
 
Hoe kom je er dan bij dat je een sessie nodig hebt? :)

Het is een kwestie van het formulier naar de juiste pagina (action="{afhandelpagina.php}") sturen en dan afhandelen. Wanneer je het formulier op dezelfde pagina afhandelt kun je action="" gebruiken, is dat op een andere pagina dan moet je de link daarnaar als action gebruiken.

pagina1.html
HTML:
<form action="pagina2.php" method="POST">
    <table>
        <tr>
            <td class="newSiteTable"><b>vul in:</b></td>
            <td class="newSiteTable"><input type="textbox" name="output" style="width: 150px;"></td>
        </tr>
    </table>
    <input type="button" class="newSite" name="newsite" value="New site" />
</form>
pagina2.php
PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    echo $_POST['output'];
} else {
    echo 'Geen formulier verzonden. Klik <a href="pagina1.html">hier</a> om naar het formulier te gaan.';
}
 
Op deze manier doet mijn button het helemaal niet.

pagina1:

HTML:
<form action="pagina2.php" method="POST">
	<table>
		<tr>
			<td class="newSiteTable"><b>fill in:</b></td>
			<td class="newSiteTable"><input type="textbox" name="output" style="width: 150px;"></td>
		</tr>
	</table>
	<input type="button" class="newSite" name="newsite" value="New site">
</form>

pagina2:

PHP:
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
	echo $_POST['output'];
}
else
{
	echo 'No form was send. Please go to <a href="pagina1.php">this page</a> and send the form.';
}


K geloof dat ik hetzelfde doe of zie ik iets over het hoofd?..
 
Laatst bewerkt:
Verander het type van de knop eens naar submit, volgens mij werkt submitten alleen met type="submit" of <button>...</button>
 
hehe das waar ook XD 2 dingen door elkaar gehaald.
Dit werkt prima dankjewel!
 
Nog een extra vraagje bij komend in dit verhaal..

Ik had nu gezegt dat ik de ingevulde data wou overzetten naar de volgende pagina.
Het volgende wat ik wil is dat ik dit alleen kan doen als het ingevulde bestaat in de database.

Dus laten we zeggen ik heb een database met daarin bij naam: kaas, ham en brood.
In de textbox wordt ingevuld 'kaas'. Dan is de naam correct en wordt je doorverwezen naar pagina 2.
vul je 'hoi' in. Dan is die niet gelijk. Dan moet er een melding komen dat er iets niet goed is ingevuld.

Nu maak ik een query $vergelijking = 'select naam from database where naam = "'.$_POST["output"]."'";
Maar ik heb eigenlijk geen idee wat ik met die query moet doen om de vergelijking te maken wanneer er op de button geklikt wordt.
Zou je me hiermee opweg kunnen helpen?
 
Laatst bewerkt:
De vraag is wat de bedoeling van het script is, als je wilt voorkomen dat ze een waarde invoeren die niet in de database voorkomt kun je ze beter een lijst geven welke in de database staat (Zoals in deze vraag naar voren komt)

Wat moet er vervolgens met de ingevoerde waarde gebeuren wanneer je doorgestuurd wordt? Gebruik je die weer om iets uit de database op te vragen? Zo ja, zou je dat ook met een directe URL op kunnen vragen zonder het formulier te gebruiken?

Wanneer je de foutmelding wilt tonen kun je beter weer de afhandeling op dezelfde pagina doen als waar het formulier staat:
PHP:
<?php
// Opslag voor errors:
$errors = array();
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    // Connectie met database maken
    // Query opbouwen
    $query = sprintf("SELECT naam FROM database WHERE naam = '%s'", $_POST['output']);
    // Query uitvoeren
    $result = $mysqli->query($query);
    // Controleer of waarde voorkomt
    if ($result->num_rows > 0) {
        // Doorsturen, kan via header("Location: pagina2.php"), is afhankelijk van wat de bedoeling is.
    } else {
        // Error toevoegen
        $errors[] = sprintf("<b>%s</b> komt niet voor in de database.", $_POST['output']);
    }
    $result->close();
}

if (sizeof($errors) > 0) {
    ?>
    <ul>
        <?php
        foreach ($errors as $error) {
            printf('<li>%s</li>', $error);
        }
        ?>
    </ul>
    <?php
}
?>
<form action="" method="POST">
    <table>
        <tr>
            <td class="newSiteTable"><b>fill in:</b></td>
            <td class="newSiteTable"><input type="textbox" name="output" style="width: 150px;"></td>
        </tr>
    </table>
    <input type="button" class="newSite" name="newsite" value="New site">
</form>
 
Goeiemorgen.

Inprincipe was de bedoeling, zoals ik geloof een maand of 2 geleden, ik deze vraag stelde : http://www.helpmij.nl/forum/showthread.php/835235-Textbox-met-dropdown-onchange

Dit vind ik iets te ingewikkeld met de tijd die ik heb vandaar dat ik het simpeler (wat mij overigens dus ook niet lukt) wil oplossen.
De bedoeling is inderdaad dat ik wil voorkomen dat een niet bestaande waarde wordt ingevoerd. Dus met een lijst van wel bestaande zou dit heel goed kunnen.
Het formulier verzend waarna ik de rest van die tabel zichtbaar laat komen. Dit formulier is een must (dit hoort bij de opdracht).


Over die list:
PHP:
<select onChange="if (this.selectedIndex!=0) { Color=this.options[this.selectedIndex].value }">
<?php
while ($row = mysql_fetch_array($result)) {
    echo "<option value='" . $row['kleurnaam'] . "'>" . $row['kleurnaam'] . "</option>";
}
?>
</select>

Dit stukje moet ik gaan toepassen in mijn code. Nu snap ik eergelijk gezegd de 'if' bij de onchange niet. (niet eerder op die manier met een onchange gewerkt)
Zou je dit mij een beetje kunnen toelichten waardoor ik dit kan toepassen in mijn eigen code?

Alvast bedankt :)

edit: Ik heb de select voor elkaar gekregen. Ook met een submit naar pagina 2.
Nu had je mij geholpen met die REQUEST_METHOD..
Inprincipe heb k alles hetzelfde gedaan, maar nu kent ie mijn variable niet meer in page 2.

pagina 1:
PHP:
<form action="pagina2.php" method="POST">
<select>
	<option> Please select a site. </option>
	<?php
	$queryNewSite = "SELECT distinct kolom_name FROM database order by kolom_name";
	$stmtNewSite = sqlsrv_query($link, $queryNewSite);
		
		if( $stmtNewSite === false )
		{
			 die( print_r( sqlsrv_errors(), true));
		}
	
		while($row = sqlsrv_fetch_array( $stmtNewSite, SQLSRV_FETCH_ASSOC)) 
		{
			echo "<option name='output' value='" . $row['kolom_name'] . "'>" . $row['kolom_name'] . "</option>";
		}
	?>
</select><br><br>
<input type='submit' name='submitSite' value='Continu'>
</form>


pagina 2:
PHP:
if ($_SERVER['REQUEST_METHOD'] == "POST")
	{
		echo $_POST['output'];
	}
	else
	{
		echo 'Geen formulier verzonden. Klik <a href="pagina1.php">hier</a> om naar het formulier te gaan.';
	}

Foutmelding : Undefined index: output
Deze output kent ie niet in pagina 2. (echo $_POST['output'];)

Enig idee wat ik nu fout doe waarom die eerst wel werkte en nu niet?
 
Laatst bewerkt:
De "onchange" van die andere vraag is hier natuurlijk niet van toepassing ;)

Waar het bij jou nu mis gaat is in je HTML. Je geeft elke <option> een attribuut "name" maar dat hoort niet. Het betreffende <select> element hoort een "name" te hebben en een <option> kan alleen een "value" hebben.
 
Haha thanks :) die onchange had k idd al weggelaten.
Thanks voor de opmerking van de select. Het werkt nu allemaal prima naar behoren :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan