niet de waarde van variable opslaan maar de variable
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
https://www.w3schools.com/php/php_functions.asp
En:
https://www.w3schools.com/pHP/php_ref_mysqli.asp
Ik neem aan dat dit voor het oefenen is? Want het is niet zinvol om voor elke keer dat je toon(...) uitvoert om een query uit te voeren.
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.
Gewijzigd op 02/04/2020 21:57:23 door gert-willem Sanders
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']);}
}
}
}
?>
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 $$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.
Gewijzigd op 02/04/2020 22:12:41 door Thomas van den Heuvel
$_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']
maar dat weet ik nog niet als ik de pagina opbouw in de database zet. dus wil ik daar een variabele in zetten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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" />
?>
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" />
?>
?>
Toevoeging op 02/04/2020 22:25:14:
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()
Edit:
Ik heb code-tags geplaatst. Zie ook de opmaakcodes in de Veelgestelde Vragen
Toevoeging op 02/04/2020 22:34:51:
- 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()
$_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()
Gewijzigd op 02/04/2020 22:27:17 door - Ariën -
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.
Gewijzigd op 02/04/2020 22:46:55 door Thomas van den Heuvel
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).
Toevoeging op 02/04/2020 23:35:43:
="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']
Quote:
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']);}
}
}
}
{
$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).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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);
?>
// 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:
Code (php)
1
2
3
4
2
3
4
<?php
// aanname: $_SESSION['my_user_id'] bestaat
myDropdown('users', 'myform_users', $userData, $_SESSION['my_user_id']);
?>
// aanname: $_SESSION['my_user_id'] bestaat
myDropdown('users', 'myform_users', $userData, $_SESSION['my_user_id']);
?>
Gewijzigd op 03/04/2020 01:35:17 door Thomas van den Heuvel
moderne tijden gewoon:
Of in deze Rob Doemaarwat op 03/04/2020 08:15:06:
Of in deze moderne tijden gewoon:
Aangezien TS shorttags gebruikt (<¿ ) zal zijn PHP versie niet een van de nieuwste zijn.
wat is er anders aan jouw dropdownfunctie ???
de naam is niet mydropdown maar plaatscombo.
jij stopt de data eerst in een array ik zet ze direct in de functie.
alleen blijft mijn vraag hoe zet ik een nog niet bekende variabele bijvoorbeeld $_SESSION['my_user_id'] of $myuserid of $wieissinterklaas in de functie variabele. ik weet wel welke variabele ik wil laten, zien ik heb alleen de waarde nog niet.
in kan natuurlijk een rijtje maken met
Code(php)
if ($row['var5']=='$_SESSION['my_user_id']') {$vulditin=$_SESSION['my_user_id']}
if ($row['var5']=='$datum') {$vulditin=$datum}
//...
plaatscombo( $row['var1'],$row['var2'],$row['var3'],$row['var4'],$vulditin);
code(php)
maar dat is zoveel extra werk.
hoe en waar vind ik die code tags. ze staan niet in veelgestelde vragen (of zijn goed verstopt)
Gewijzigd op 03/04/2020 10:37:24 door gert-willem Sanders
[ / c o d e ]
maar dan zonder spaties.
--
je zult vast op meer plaatsen in je site een dropdown gaan gebruiken.
Dan kun je elke keer opnieuw een functie bouwen, of dat stuk apart nemen:
Een <select> heeft een naam, id en een paar eigenschappen. (style, class etc)
en daarin zit een rijtje <option>s van een value en een tekst.
Die kun je dus prima meegeven als array.
En tenslotte is er 1 geselecteerde waarde (optioneel)
Dat is voor _elke_ <select> zo. dus dat hoef je niet steeds opnieuw te maken. Dat is het verschil
Gert-willem Sanders op 03/04/2020 10:36:12:
hoe en waar vind ik die code tags. ze staan niet in veelgestelde vragen (of zijn goed verstopt)
Ze staan gewoon in het tabelletje van de opmaakcodes.
[code] en [/code]
Gewijzigd op 03/04/2020 11:00:08 door - Ariën -
ik zie dat je IN je functie een connectie maakt met de database.
Ik hoop dat je dat niet steeds bij elke query doet?
Dat is iets wat je liefst vroeg in je code eenmalig doet.
Zelfs al zou het 10x opnieuw met dezelfde gegevens verbinden en hergebruikt PHP waarschijnlijk de bestaande verbinding: het kost wel elke keer wat extra processor- en netwerktijd.
Gert-willem Sanders op 03/04/2020 10:36:12:
@ Thomas,
wat is er anders aan jouw dropdownfunctie ???
de naam is niet mydropdown maar plaatscombo.
jij stopt de data eerst in een array ik zet ze direct in de functie.
wat is er anders aan jouw dropdownfunctie ???
de naam is niet mydropdown maar plaatscombo.
jij stopt de data eerst in een array ik zet ze direct in de functie.
Nee, die array representeert je database uitvoer. Dit script is om snel uit te testen en daarna verder uit te werken, en dan is het overdreven om er meteen nog een hele database aan vast te leggen. Uiteindelijk is dat wel iets waar je naartoe moet werken.
En bovendien hoef je jouw data (als die hetzelfde is) maar één keer op te halen, en dat hoeft niet steeds opnieuw bij een eigen gemaakte functie. Je kan er daarom prima twee aparte functies van maken. Vrij vertaald wordt het dan:
$haalop = haalop()
verwerk($haalop)
verwerk($haalop)
verwerk($haalop)
etc.....
Gewijzigd op 03/04/2020 11:05:58 door - Ariën -
Alles wat jullie omschrijven doe ik in mijn ogen.
Code (php)
1
2
3
2
3
plaatscombo( $row['var1'],$row['var2'],$row['var3'],$row['var4'],$vulditin);
//is toch hetzelfde als
myDropdown('users', 'myform_users', $userData, $_SESSION['my_user_id'] ?? false);
//is toch hetzelfde als
myDropdown('users', 'myform_users', $userData, $_SESSION['my_user_id'] ?? false);
var[1] is de tabel die moet worden gebruikt
var[2] is de kolom uit d tabel die aan de <option> word doorgegeven
var[4] is de id naam (ik gebruik naam omdat ik deze in de $_POST terug wil hebben
var[5] hier moet de gene die ingelogd is worden weergegeven(selected)
die var[5] is het probleem
niet dat ik voor de combobox een query moet doen. (dat is juist mijn flexibele gebruik die combobox kan elke keer een andere tabel zijn waarvan uit 1 kolom de waarde kan worden gekozen)
als in die kolom namen van werknemers staan, moet de inlogger dus geselecteerd worden. Ik weet vooraf niet wie er inlogt dus dat is een variable. $ingelogd.
als ik die in een database zet staat die tussen "" ofwel "$ingelogd"
dat werkt niet met
myDropdown('users', 'myform_users', $userData, "$ingelogd");
dit was mijn vraag alleen maar hoe los ik dit op
Vertel anders eens in normale Jip en Janneke taal wat je nou voor elkaar wilt krijgen, want mogelijk is er zelfs een elegantere oplossing.
deze wil ik als variabele gebruiken.
dus ip "$ikbeneenvariabelenaam" naar $ikbeneenvariabelenaam
als dat niet kan dan gewoon niet
Gewijzigd op 03/04/2020 13:21:31 door gert-willem Sanders