Textbox waarde opvragen in elke pagina (PHP)

Status
Niet open voor verdere reacties.

BZilla

Gebruiker
Lid geworden
16 apr 2014
Berichten
170
Goedemorgen,

Na vele mislukte pogingen om de windows username te verkrijgen ben ik van plan veranderd, en ga ik de naam opvragen aan de user..
Eerst even heel simpel voor alleen de naam, dus zonder wachtwoord, op te vragen.

Nu heb ik een pagina met een textbox, en de waarde die hier in wordt gevuld, wil ik in elke pagina kunnen opvragen, zo dat ik op elke pagina de rechten kan aanpassen naar de gebruiker.
Ik wil geen aparte pagina's gaan gebruiken, dat is onhandig, iedereen moet namelijk alles kunnen zien, alleen de acties die kunnen gedaan worden zijn anders.
Tot nu toe krijg ik de waarde alleen in de eerst volgende (dus in mijn geval home.php) weergegeven, in elke andere pagina (of wanneer ik F5 druk) is de waarde niet meer zichtbaar omdat ik de waarde via de link mee geef..

De vraag in het kort:
Hoe krijg ik de zelf ingevulde waarde van een textbox (wordt verzonden via een button), in elke andere php pagina zichtbaar?

alvast bedankt

Bzilla
 
Je zou de waarde in een sessie kunnen gooien.

session_start(), moet je helemaal boven in je php file aanroepen als eerste.
http://nl1.php.net/function.session-start
PHP:
session_start();

$_SESSION['username']   = $textboxVal;
// Nu $_SESSION['username'], bestaat kan je op elke pagina deze achterhalen.

Succes!
 
Bedankt voor de snelle reactie!

Maar even kijken of ik het helemaal begrijp.

Ik heb een index.php, een home.php en een tables.php.

in de index.php heb ik een textbox, en daarin vraag ik de username op.
Daar boven aan de pagina (de index.php dus) zet ik neer:
PHP:
 session_start(); 
$_SESSION['username']   = $textboxVal;

Daar onder alle html met de form etc. (die form kan blijven staan op POST??)
en vervolgens kan ik in elke pagina $textboxVal aanroepen?

OF


Ik roep sesstion_start(); aan in de index.php en zet in de home.php en de tables.php $_SESSION['username'] = $textboxVal; neer?
En dan pas in textboxVal aan te roepen in elke pagina?
 
1) Je roept session_start(); aan in je index.php helemaal bovenin na je openingstag van je php
2) Nadat je je tekstveld hebt ingevuld + het formulier hebt verzonden dan doe je bv : $_SESSION['username'] = $_POST['tekstbox'];
3) Nu is op elke php pagina de variable $_SESSION['username'] beschikbaar.

dus dan kan je bv op tables.php -> echo 'Username : ' .$_SESSION['username']; en als het toont hij dan de value die jij hebt gevuld in stap 2.

Hopelijk dat ik nu iets duidelijker ben geweest.

Succes!
 
En in de $_POST zet je de naam van de textbox? en in de SESSION gewoon een willekeuig iets?

Heb nu dit:
In de index.php roep ik session_start() aan.
Onder de form doe ik $_SESSION['yourName'] = $_POST['username']; (geen idee of in beide 'username' neerzetten problemen mee geeft vandaar)

En doe in tables.php echo $_SESSION['username'];
Vervolgs krijg ik een lege waarde terug.

Dit is mijn form :
PHP:
<form method="POST" action="home.php">
	Before start, we need your username to continue.<br>
	<input id="tbUsername" type="text" name="username" value="username">
	<button	 type="submit" name="submit" >submit</button>
</form>
<?php 
	$_SESSION['username'] = $_POST['username'];
?>

Je legt het ongetwijfeld goed uit, maar vat ik het slecht op ;)

Alvast bedankt!
 
session_start(), kan je gewoon boven in index.php laten staan.

Zo te zien submit je je form naar home.php.
Dus je moet hier je variable vullen.
Je hebt het nu willekeurig onder het formulier staan en dan is deze $_POST variable waarschijnlijk leeg. Vandaar dat je een lege session krijgt.


PHP:
// home.php
  // Hier zou die moeten komen nadat je het formulier gesubmit hebt.

if(isset($_POST['username'])){
$_SESSION['username']  = $_POST['username'];
echo "Variable session succes gevuld!";
}else{
   exit('Blijkbaar is de post leeg!! controleren!!');
}

PS: De naam van de $_SESSION mag je maken wat je wilt. Dit zorgt voor geen problemen.
 
Op elke pagina waarin je de sessie wilt gebruiken moet session_start() bovenaan staan :)

Oh en verzonden formulieren gaan we niet met isset() controleren he? ;)

PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
  // Er is een formulier verzonden
} else {
  // Geen formulier verzonden
}
 
Laatst bewerkt:
Het is gelukt! beide vele dank voor de oplossing :) eindelijk kan ik iets gaan doen met de rechten haha.
Nogmaals bedankt :)
 
Toch nog een probleempje..

Wanneer ik van inde.php naar de home.php wordt gestuurd krijg ik de naam mee.
Wanneer ik dan weer op home.php druk, of eerst op tables.php en dan terug keer naar home.php, dan ben ik de waarde kwijt.
Ik wil de waarde eigenlijk houden tot de browser afgesloten wordt, dus ook wanneer er F5 wordt geklikt etc.

Iemand die mij hiermee kan helpen?
 
Dat heb ik, en het werkt ook goed, tot ik de pagina voor de 2e keer wil openen.

Merk nu ook wanneer ik gebruik maar van een button die naar de zelfde pagina verwijst, ik de waarde ook niet mee krijg..
 
Laatst bewerkt:
Ik denk dat als jij iedere keer op home.php komt je variabele opnieuw insteld.

Dus het stukje van @Tha Devil, moet je even toevoegen in je home.php

PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
  $_SESSION['username'] = $_POST['username'];
  // Er is een formulier verzonden
}

Dus nu stelt hij de variabele alleen in als het formulier van index.php is verstuurd.
Anders probeert die hem in te stellen als je op home.php komt elke keer en dan is je $_POST['username'] leeg ;)

Succes!
 
Dit was inderdaad het geval dankje :)
Ik dacht dat dat stukje was om te debuggen domme ik haha.

Dankjewel :)
 
Of toch niet helemaal.. haha,
Wanneer ik op mijn upload button klik krijg ik de waarde nog steeds niet mee. Voor elke andere actie die ik doe werkt het voor de rest wel.
 
Code zegt meer dan een beschrijving ;)
 
PHP:
session_start();
	
	if($_SERVER['REQUEST_METHOD'] == 'POST') 
	{
	  $_SESSION['username'] = $_POST['username'];
	  // Er is een formulier verzonden
	}


<form onSubmit="return check(fileForm)" name='fileForm' action="home.php" method="POST" enctype="multipart/form-data">
							<label for="file">Filename:</label><br><br>
							<input type="file" name="fileInput" id="file"><br>
							<input type="text" name="name" onkeyup="removeInvalidChars(this)" onblur="removeInvalidChars(this)"><br>
							<input type="submit" name="upload" value="Upload"/>
<script>
								function removeInvalidChars(input)
								{
									return input.value = input.value.replace(/[^a-z0-9]+/i, '');
								}


								<!-- looks if there is a choosen file and a fillt textbox. if not a alert is given. -->
								function check(frm)
								{
									if (frm.name.value.length == 0)
									{
										alert("Please enter the table name.");
										frm.name.focus();
										return false;
									}
									if (frm.fileInput.value.length == 0)
									{
										alert("Please select a file.");
										frm.name.focus();
										return false;
									}
								}
							</script>
						</form>

eigenlijk hier bij de form gaat het mis, hopelijk is dit genoeg :)
 
En het gaat mis omdat?

Als je nu op home.php dit doet:
PHP:
echo $_SESSION['username'];
Dan hoort daar de waarde te komen die je daarvoor hebt opgegeven :)

Als die waarde leeg is kan het zijn dat je $_POST['username'] ook leeg is wanneer je op bovenstaande code terecht komt.
 
Die echo had ik inderdaad al staan, maar de session is inderdaad leeg wanneer ik bij die code terecht komt.
Enig idee waarom?
 
PHP:
session_start();
    
    if($_SERVER['REQUEST_METHOD'] == 'POST') 
    {
      $_SESSION['username'] = $_POST['username'];
      // Er is een formulier verzonden
    }
 
 
<form onSubmit="return check(fileForm)" name='fileForm' action="home.php" method="POST" enctype="multipart/form-data">
                            <label for="file">Filename:</label><br><br>
                            <input type="file" name="fileInput" id="file"><br>
                            <input type="text" name="name" onkeyup="removeInvalidChars(this)" onblur="removeInvalidChars(this)"><br>
                            <input type="submit" name="upload" value="Upload"/>
<script>
                                function removeInvalidChars(input)
                                {
                                    return input.value = input.value.replace(/[^a-z0-9]+/i, '');
                                }
 
 
                                <!-- looks if there is a choosen file and a fillt textbox. if not a alert is given. -->
                                function check(frm)
                                {
                                    if (frm.name.value.length == 0)
                                    {
                                        alert("Please enter the table name.");
                                        frm.name.focus();
                                        return false;
                                    }
                                    if (frm.fileInput.value.length == 0)
                                    {
                                        alert("Please select a file.");
                                        frm.name.focus();
                                        return false;
                                    }
                                }
                            </script>
                        </form>

Ja ik weet precies waarom ;)
In de eerste paar regels controleer je of er een formulier gesubmit is, is dit het geval? dan slaat hij $_POST['username'] op.
Het formulier wat je op home.php hebt staan die linkt ook naar home.php.
Dus wanneer jij je formulier van index.php (met username) post kom jij in die if waar je de session in stelt. Maar je komt hier ook als je t formulier submit die op home.php staat.


Ik denk dat het onderstaande stukje code de oplossing zal zijn ;)


PHP:
 if($_SERVER['REQUEST_METHOD'] == 'POST'){
      if(isset($_POST['username']) && !empty($_POST['username'])){
            // isset controleert of er iets gepost word met de variable username, en empty controleert of deze niet empty is. Als hij gepost is + niet leeg is komt die in de volgende if en dan word die ingesteld.
            // heb deze code niet getest maar ga dr van uit dat het werkt ;)

            $_SESSION['username'] = $_POST['username'];
      }

      
      // Er is een formulier verzonden
    }


Succes!
 
Dit werkt goed bedankt voor de uitgebreide uitleg erbij :)
Snap nu ook precies wat ik doe dat is mooi haha.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan