niet de waarde van variable opslaan maar de variable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Gert-willem Sanders

gert-willem Sanders

02/04/2020 21:14:13
Quote Anchor link
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
 
PHP hulp

PHP hulp

16/04/2024 16:28:33
 
- Ariën  -
Beheerder

- Ariën -

02/04/2020 21:41:43
Quote Anchor link
Ik zou zeggen:

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.
 
Gert-willem Sanders

gert-willem Sanders

02/04/2020 21:55:51
Quote Anchor link
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.
Gewijzigd op 02/04/2020 21:57:23 door gert-willem Sanders
 
- Ariën  -
Beheerder

- Ariën -

02/04/2020 22:02:06
Quote Anchor link
Heb je wat relevante code die je kan laten zien? Want ik kan niet zien wat je 11e regel nu is.
 
Gert-willem Sanders

gert-willem Sanders

02/04/2020 22:08:40
Quote Anchor link
- 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']);}
}
}
}
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

02/04/2020 22:10:02
Quote Anchor link
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 $$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
 
- Ariën  -
Beheerder

- Ariën -

02/04/2020 22:13:05
Quote Anchor link
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

gert-willem Sanders

02/04/2020 22:19:24
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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" />        
?>
}
?>


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()
Gewijzigd op 02/04/2020 22:27:17 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

02/04/2020 22:44:04
Quote Anchor link
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
 
Gert-willem Sanders

gert-willem Sanders

02/04/2020 23:25:10
Quote Anchor link
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).

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

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).
 
Thomas van den Heuvel

Thomas van den Heuvel

03/04/2020 00:39:44
Quote Anchor link
Misschien heb je gewoon wat inspiratie nodig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// 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
 
Rob Doemaarwat

Rob Doemaarwat

03/04/2020 08:15:06
Quote Anchor link
Of in deze moderne tijden gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// aanname: $_SESSION['my_user_id'] bestaat
myDropdown('users', 'myform_users', $userData, $_SESSION['my_user_id'] ?? false);
?>
 
Ivo P

Ivo P

03/04/2020 10:30:01
Quote Anchor link
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.
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 10:36:12
Quote Anchor link
@ 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.

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
 
Ivo P

Ivo P

03/04/2020 10:57:01
Quote Anchor link
[ c o d e ]
[ / 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
 
- Ariën  -
Beheerder

- Ariën -

03/04/2020 10:59:42
Quote Anchor link
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 -
 
Ivo P

Ivo P

03/04/2020 10:59:47
Quote Anchor link
enne:
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.
 
- Ariën  -
Beheerder

- Ariën -

03/04/2020 11:02:51
Quote Anchor link
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.

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 -
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 13:10:59
Quote Anchor link
Ik dank jullie voor het je best doen om mij te helpen.
Alles wat jullie omschrijven doe ik in mijn ogen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);

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
 
- Ariën  -
Beheerder

- Ariën -

03/04/2020 13:13:24
Quote Anchor link
Gebruik je nu letterlijk in je script zulke nietszeggende genummerde variabelen?

Vertel anders eens in normale Jip en Janneke taal wat je nou voor elkaar wilt krijgen, want mogelijk is er zelfs een elegantere oplossing.
 
Gert-willem Sanders

gert-willem Sanders

03/04/2020 13:21:06
Quote Anchor link
ik heb in een string een variabele naam.
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
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.