Hallo allemaal,

ik wil vanuit een mysql database een aantal functies uitvoeren
bv

toon($row['var1'],$row['var2']);

alleen $row['var2'] moet een variable naam bevatten $_SESSION['mynaam']

zodat de functie zo wordt

toon('waarde van row var1',$_SESSION['mynaam']);


ik weet niet hoe ik dit moet googlen :)

Groetjes Gert-Willem
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.
Heb je wat relevante code die je kan laten zien? Want ik kan niet zien wat je 11e regel nu is.
- Ariën - op 02/04/2020 22:02:06

Heb je wat relevante code die je kan laten zien? Want ik kan niet zien wat je 11e regel nu is.


regel 11 is niet belangrijk, kan elke keer een andere regel zijn.
ik ben bang dat mijn code niet veel duidelijk maakt maar hier is hij

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){
echo $row['user'].' en mag '.$mag;
If ($row['var5'] !="") {$test =($$row['var5']); }
If ($row['functienaam'] =='toon') {tooninvoer( $row['var1'],$row['var2'],$row['var3']);}
If ($row['functienaam'] =='comb') {plaatscombo( $row['var1'],$row['var2'],$row['var3'],$row['var4'],$test);}
If ($row['functienaam'] =='bijz') {toonbijz( $row['var1'],$row['var2']);}
}
}
}
?>
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.
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()
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.

<?php
function plaatscombo($tabel,$kolom1,$kolom2,$gekozen,$geselecteerd){
?><label for="<? echo $gekozen; ?>"><? echo $gekozen; ?></label><?
$sql="SELECT * FROM ".$tabel;//`opdrachtgever` LIKE '%e%' AND `bedrijfsnaam` LIKE '%c%'";
$con = connecten();
$result=mysqli_query($con, $sql);
$num_rows = mysqli_num_rows($result);
        ?>
        <select class="inp" name="<? echo $gekozen; ?>"  class="">
                    <option value= 0 >Selecteer <? echo $kolom1.' '.$kolom2; ?></option>
                    <?php
                    while ($row = mysqli_fetch_array($result)) 
					{
                        $kolom = $row[$kolom1].' '.$row[$kolom2];
						if ($kolom == $geselecteerd){ $sel = "selected";} else { $sel = "";}
                        echo "<option value=\"$kolom\"".$sel.">" . $kolom . '</option>';
                    }?>
		</select>
<br class="clear" />		
?> }
?>


[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()


Gert-willem Sanders op 02/04/2020 22:19:24
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).


Misschien heb je gewoon wat inspiratie nodig.

<?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']);
?>

Reageren