toon($row['var1'],$row['var2']);
word in een loop aangeroepen met nieuwe waardes uit de database.
zo bouw ik een pagina op.
bij de 11e regel wil ik dat de huidige $_SESSION['mynaam'] word getoond.
dus in de database staat '$_SESSION['mynaam']' de string
dus ik krijg dan geen waarde maar de text $_SESSION['mynaam']
dus er is geen sprake van herhaalde queries
als er iets staat in de links die je hebt geplaatst dan lees ik er overheen.
Als de aard van de data tijdelijk is / mogelijk vaker veranderd wordt, waarom zou je data dan elke pagina-aanroep terugplaatsen in de sessie (als hier sprake van is)? Hiermee haal je jezelf een hoop administratie op de hals. Als dit bijvoorbeed user-data betreft -die op elk moment veranderd zou kunnen worden- zet deze dan in een user object, die is enkel geldig tijdens de uitvoer van PHP-code, deze hoef je ook niet terug te plaatsen in de sessie, en al helemaal niet als deze elke page-access toch overschreven wordt. Het enige wat je nodig hebt om het user object te vullen is een user id, en als je dat wenst te onthouden dan zou je dat (als enig stukje informatie, bijvoorbeeld na authenticatie) kunnen onthouden in de sessie; de rest is afleidbaar.
Eerst zul je na moeten gaan of de data geschikt is om in een sessie onder te brengen, dus een eerste vraag is dan ook: wat voor data probeer je in de sessie te plaatsen?
En dan is het misschien handig om wat meer uitleg te geven over wat je precies met het bovenstaande probeert te bereiken, want dit is mogelijk (waarschijnlijk?) de verkeerde aanpak.
Geef een concreet voorbeeld / een concrete toepassing.
EDIT: var1, var2, var3 et cetera zegt ons niet zoveel. Wat zou deze code functioneel moeten doen?
EDIT: constructies als [color=#ff0000]$[/color]$var zou ik zéér spaarzaam gebruiken, en alleen als er geen andere mogelijkheid is, want daar kun je je potentieel veel ellende mee op de hals halen.
De aard van de data is dat ik een inputveld maak en vul met variabelen uit een database en de volgende regel kan een combobox zijn of opnieuw een inputveld.
wat ik als vooringevulde waarde in de combobox wil zetten is de naam van de ingelogde persoon. $_SESSION['mynaam']
maar dat weet ik nog niet als ik de pagina opbouw in de database zet. dus wil ik daar een variabele in zetten.
[size=xsmall]Toevoeging op 02/04/2020 22:25:14:[/size]
Sorry, jij vraagt om code. ik dacht dat de uitleg genoeg zou zijn.
de $$var was een probeersel om de $_SESSION['mynaam'] tussen de quotes uit te halen zodat hij als variable word doorgegeven en niet als waarde.
ik wil maar 1 ding en dat is de text $_SESSION['mynaam'] als variabele doorgeven aan toon()
[size=xsmall]Toevoeging op 02/04/2020 22:34:51:[/size]
- Ariën - op 02/04/2020 22:13:05
Verder gooi je nu zonder enige vorm van controle dit in je query:
$_POST['formulier']
Nu kan iemand of jij gemerkt of ongemerkt je query verzieken met bijvoorbeeld een single quote '.
Dus escape je input met mysqli_real_escape_string()
wat ik als vooringevulde waarde in de combobox wil zetten is de naam van de ingelogde persoon. $_SESSION['mynaam']
Uhm, waarom niet via het user id? Een naam is doorgaans niet zo'n sterke referentie. Je slaat deze naam toch ook hopelijk niet op, maar een user id? Wat als de naam verandert?
EDIT: en als je dan toch een generieke functie wilt maken voor een dropdown, dan zou ik deze opties voeren, en mogelijk een geselecteerd element (of nog beter, een index). Een stapje verder en je hebt al een soort van formuliersysteem.
De functie in zijn huidige opzet is nogal (veel te?) specifiek, omdat je daar een query ingebakken hebt. Trek deze query buiten de functie, en voer deze functie de resultaten van de query, dan is deze functie beter herbruikbaar voor andere dropdowns.
ik wil graag automatisch pagina's opbouwen, heel specifiek met allemaal voorwaarden.
alles werkt ook goed.
alleen als ik een waarde uit d database haal en deze in een functie zet is dat een string. prima als een een vaste waarde is. maar als jan inlogt wil ik zijn naam ergens in een combobox neer zetten. (geen nummer) en als piet inlogt moet er piet staan. de naam is bekend in $_SESSION['mynaam'] ( evenals zijn id)
in variabele uit een database staan alleen strings waaronder $row['var5'] deze bevat de text ... $_SESSION['mynaam']
in je edit staan allemaal termen waar ik niets mee kan omdat ik geen opleiding heb zoals: dan zou ik deze opties voeren, en mogelijk een geselecteerd element (of nog beter, een index).
[size=xsmall]Toevoeging op 02/04/2020 23:35:43:[/size]
="Gert-willem Sanders op 02/04/2020 23:25:10"]
ik wil graag automatisch pagina's opbouwen, heel specifiek met allemaal voorwaarden.
alles werkt ook goed.
alleen als ik een waarde uit de database haal en deze in een functie zet is dat een string. prima als een een vaste waarde is. maar als jan inlogt wil ik zijn naam ergens in een combobox neer zetten. (geen nummer) en als piet inlogt moet er piet staan. de naam is bekend in $_SESSION['mynaam'] ( evenals zijn id)
in variabele uit een database staan alleen strings waaronder $row['var5'] deze bevat de text ... $_SESSION['mynaam']
if(isset($_POST['formulier']))
{
$sql = "SELECT * FROM `paginas` WHERE naam ='". $_POST['formulier']."'";
$con = connecten();
$result = mysqli_query($con,$sql);
//echo $sql;
while ($row = mysqli_fetch_array($result)) {
//print_r($row);
If ( $row['user'] <= $mag){
If ($row['functienaam'] =='toon') {tooninvoer( $row['var1'],$row['var2'],$row['var3']);}
If ($row['functienaam'] =='comb') {plaatscombo( $row['var1'],$row['var2'],$row['var3'],$row['var4'],$_SESSION['mynaam']);}
If ($row['functienaam'] =='bijz') {toonbijz( $row['var1'],$row['var2']);}
}
}
}
voorlopig heb ik het zo opgelost maar dat is niet flexibel.
in je edit staan wat termen waar ik niets mee kan omdat ik geen opleiding heb zoals: dan zou ik deze opties voeren, en mogelijk een geselecteerd element (of nog beter, een index).
<?php
// deze data komt uiteraard uit de database, zet deze in een array
$userData = array(
5 => 'Jan',
8 => 'Piet',
9 => 'Klaas',
88 => 'Ikke',
// et cetera
);
// sessie simulatie
session_start();
$_SESSION['my_user_id'] = 88; // Ikke
// functiedefinitie
function myDropdown($name, $id, $options, $selectedOption=false) {
// @todo escaping van alle waarden van variabelen
?><select name="<?php echo $name; ?>" id="<?php echo $id; ?>">
<option value="">- selecteer -</option><?php
foreach ($options as $k => $v) {
$selected = ($k == $selectedOption ? ' selected="selected"' : '');
?><option<?php echo $selected; ?> value="<?php echo $k; ?>"><?php echo $v; ?></option><?php
}
?></select><?php
}
// aanroep
$myUserId = (isset($_SESSION['my_user_id']) ? $_SESSION['my_user_id'] : false);
myDropdown('users', 'myform_users', $userData, $myUserId);
?>
myDropDown kun je volledig hergebruiken omdat het geen enkele aannames doet over wat deze dropdown aan opties heeft, dit geef je mee als parameter. Er zitten geen hard-coded queries in de functie zelf. Als je dit wel zou doen zou je deze enkel kunnen gebruiken als user-dropdown, en als je andere dropdowns hebt en je op eenzelfde wijze de aardappelstempel zou hanteren zou je voor al dit soort dropdowns aparte functies moeten schrijven. En dat is nou niet bepaald het idee van een functie.
EDIT: en ter verduidelijking, als het gegarandeerd is dat $_SESSION['my_user_id'] bestaat, dan zou je die ook rechtstreeks kunnen aanspreken in de functie-aanroep:
<?php
// aanname: $_SESSION['my_user_id'] bestaat
myDropdown('users', 'myform_users', $userData, $_SESSION['my_user_id']);
?>