Id van <select> opslaan in variable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Max Boer

Max Boer

03/12/2018 17:58:35
Quote Anchor link
Hallo allemaal,

Ik ben bezig met een stuk code waarin je een gebruiker kan selecteren en waarin je vervolgens zijn gegeven kan aanpassen.
Hiervoor heb ik een <select>, waarin je de gebruiker kan selecteren.
In deze <select> heb ik meerdere kolommen van mijn tabel staan, waaronder id, gebruikersnaam, achternaam etc.

Nu wil ik dat als de gebruiker iemand selecteert, het ID van de geselecteerde persoon wordt opgeslagen in een PHP variable.
Hieronder staat mijn <select>:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<form method="post">
    Gebruiker:<select name="gebruiker">
    <?php
    $resultaat
= mysqli_query($mysql,"SELECT * FROM gebruikers ORDER BY gebruikersnaam") or die("De query op de database is mislukt!");
    while ($rij = mysqli_fetch_assoc($resultaat)){
        echo "<option value=\"{$rij['id']}\">{$rij['id']} {$rij['gebruikersnaam']} {$rij['voorletters']} {$rij['achternaam']} {$rij['rol']} {$rij['actief']} {$rij['vak']}</option>";
    }

    ?>

    </select><br>
<input type="submit" value="Aanpassen" name="verzend" />
<?php
}
?>


In de tabel 'gebruikers' heb ik de kolommen id, gebruikersnaam, wachtwoord, voorletters, achternaam, rol, actief en vak.
Vervolgens kan de gebruiker de nieuwe gegevens invullen en worden die opgeslagen in variabelen. Dit werkt wel goed.

Maar hierna heb ik een UPDATE-query, waarbij ik de nieuwe gegevens wil invoeren in de database:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
mysqli_query($mysql,"UPDATE gebruikers SET gebruikersnaam = '$gebruikersnaam', wachtwoord ='$wachtwoord',voorletters ='$voorletters', achternaam ='$achternaam', rol='$rol',actief='$actief',vak='$vak' WHERE id = '$id'")
  or die("De updatequery op de database is mislukt!");
  }

?>


Ik heb in deze query bij WHERE id='$id' staan. Maar het lukt mij niet om de id van de geselecteerde gebruiker op te slaan in $id, waardoor hij uiteindelijk niets aanpast.
Ik heb het al geprobeerd met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= mysqli_real_escape_string($mysql,$_POST['id']); //(naam kolom)
?>

en
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= mysqli_real_escape_string($mysql,$_POST['gebruikers']); //(naam tabel)
?>


Weet iemand hoe ik het ID van de <select> kan opslaan in een variable, zonder de waardes van de andere kolommen erbij?

Alvast bedankt,
Max

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 03/12/2018 18:01:47 door - Ariën -
 
PHP hulp

PHP hulp

15/11/2024 10:21:33
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 18:05:58
Quote Anchor link
Dit zou gewoon moeten werken. Zolang de POST nog bestaat, en er geen redirect heeft plaatsgevonden.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= mysqli_real_escape_string($mysql,$_POST['id']);
?>

Kijk anders eens naar de inhoud van je POST, na het verzenden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "<pre>".print_r($_POST,true)."</pre>";
?>
Gewijzigd op 03/12/2018 18:06:34 door - Ariën -
 
Max Boer

Max Boer

03/12/2018 18:16:10
Quote Anchor link
Bedankt voor deze tip Ariën!

Ik krijg nu het volgende:

Array
(
[gebruikersnaam] => Max
[wachtwoord] => asdfghj
[voorletters] => M
[achternaam] => Boer
[rol] => Docent
[vak] => wisB
[actief] => 1
[id] =>

Notice: Undefined variable: id in C:\Users\Max de Boer\Documents\JEL\Informatica\USBWebserver\root\gebruikerswijzigen.php on line 95


[versturen] => Veranderen
)

Hij herkent nog steeds niet het ID. Als het goed zou hij dit id moeten halen uit mijn <select>.
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 18:32:00
Quote Anchor link
Kijk eens in de HTML-code van je select.
Hoe ziet die er in je browser uit?

In $_POST['gebruiker'] zou dan de ID moeten staan.
Gewijzigd op 03/12/2018 18:34:15 door - Ariën -
 
Max Boer

Max Boer

03/12/2018 18:39:58
Quote Anchor link
Ik heb F12 gedrukt in mijn browser, maar de code van de HTML kan ik daaruit niet kopiëren.
Hij zegt: <select name="gebruiker">
'Daaronder alle gegevens van de gebruikers met <option>'
</select>

Moet ik anders al mijn code sturen?

Toevoeging op 03/12/2018 18:41:08:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
session_start();
include "connect.php";

if(isset($_SESSION['user'])){
    if($_SESSION['user']['rol']!="Examensecretariaat"){
      exit();
    }
  }
else{
    exit();
  }

?>

<html>
<title>Gebruikers wijzigen</title>
<h1>Kies een gebruiker</h1>
</html>

<?php
if(isset($_POST["versturen"])){
  $id = mysqli_real_escape_string($mysql,$_POST['id']);
  $gebruikersnaam = mysqli_real_escape_string($mysql,$_POST['gebruikersnaam']);
  $wachtwoord = mysqli_real_escape_string($mysql,$_POST['wachtwoord']);
  $voorletters = mysqli_real_escape_string($mysql,$_POST['voorletters']);
  $achternaam = mysqli_real_escape_string($mysql,$_POST['achternaam']);
  $rol = mysqli_real_escape_string($mysql,$_POST['rol']);
  $vak = mysqli_real_escape_string($mysql,$_POST['vak']);
  $actief = mysqli_real_escape_string($mysql,$_POST['actief']);
  mysqli_query($mysql,"UPDATE gebruikers SET gebruikersnaam = '$gebruikersnaam', wachtwoord ='$wachtwoord',voorletters ='$voorletters', achternaam ='$achternaam', rol='$rol',actief='$actief',vak='$vak' WHERE id = '$id'")
  or die("De updatequery op de database is mislukt!");
  }


echo "<pre>".print_r($_POST,true)."</pre>";


?>

<html>
<?php
if(!isset($_POST["verzend"])){
  echo"Vul hieronder de nieuwe gegevens in";
?>


  <form method="post">
    Gebruiker:<select name="gebruiker">
    <?php
    $resultaat
= mysqli_query($mysql,"SELECT * FROM gebruikers ORDER BY gebruikersnaam") or die("De query op de database is mislukt!");
    while ($rij = mysqli_fetch_assoc($resultaat)){
        echo "<option value=\"{$rij['id']}\">{$rij['id']} {$rij['gebruikersnaam']} {$rij['voorletters']} {$rij['achternaam']} {$rij['rol']} {$rij['actief']} {$rij['vak']}</option>";
    }

    ?>

    </select><br>
<input type="submit" value="Aanpassen" name="verzend" />
<?php
}
?>

<?php

if(isset($_POST["verzend"])){
  
  $result = mysqli_query($mysql,"SELECT * FROM gebruikers WHERE id=$id");
  $gebruiker = mysqli_fetch_assoc($result);
?>


    <form method="post">
    Gebruikersnaam:<br>
<input type="text" name="gebruikersnaam" value="<?php echo $gebruiker['gebruikersnaam'];?>"><br>
 
    Wachtwoord:<br>
<input type="text" name="wachtwoord" value="<?php echo $gebruiker['wachtwoord'];?>"><br>
    Voorletters:<br>
<input type="text" name="voorletters" value="<?php echo $gebruiker['voorletters'];?>"><br>
    Achternaam:<br>
<input type="text" name="achternaam" value="<?php echo $gebruiker['achternaam'];?>"><br><br>
    Rol:<select name="rol">
    <?php
    $resultaat
= mysqli_query($mysql,"SELECT * FROM rol") or die("De query op de database is mislukt!");
    while ($rij = mysqli_fetch_assoc($resultaat)){
        echo "<option value=\"{$rij['Rol']}\">{$rij['Rol']}</option>";
    }

    ?>

    </select><br>

    Vak:<select name="vak">
    <?php
    $resultaat1
= mysqli_query($mysql,"SELECT * FROM vakken") or die("De query op de database is mislukt!");
    while ($rij = mysqli_fetch_assoc($resultaat1)){
        echo "<option value=\"{$rij['afkorting']}\">{$rij['naam']}</option>";
    }

    ?>

    </select><br>

    Actief:<select name="actief">
    <option value="1">Ja</option>
    <option value="0">Nee</option>
    </select>
    <input type="hidden" name="id" value="<?php echo $id;?>">
    <input type="submit" value="Veranderen" name="versturen" />
  </form>


<?php
}
?>


Bovenin zit een exit, die moet er wel dan uit.

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 03/12/2018 18:48:56 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 18:51:51
Quote Anchor link
Om even wat structuur in je code aan te brengen: Wat is volgens jou het verschil tussen versturen en verzend?

PS: Graag code-tags gebruiken om scripts heen. Zie ook de mod-break.
Gewijzigd op 03/12/2018 18:52:25 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

03/12/2018 19:00:19
Quote Anchor link
Dat ding heet in het formulier gebruiker, dus als je een formulier POST, kun je deze opvissen met behulp van $_POST['gebruiker'], niet met $_POST['gebruikers'] of $_POST['id'] of wat dan ook.

Als je een user id over meerdere pagina's moet onthouden en je dat formulier met die dropdown enkel gebruikt om een gebruiker te selecteren: overweeg dan het gebruik van GET in plaats van POST, dan kun je het user id doorgeven via de url en vraag je die in de volgende stap op met $_GET[gebruiker'] of iets dergelijks.
Gewijzigd op 03/12/2018 19:05:58 door Thomas van den Heuvel
 
Max Boer

Max Boer

03/12/2018 20:43:00
Quote Anchor link
Ik heb in mijn script twee knoppen Ariën, de eerste heet "versturen" en is om aan te geven welke gebruiker je wilt veranderen. Daarna komen de invulvelden met de tweede knop, die "verzend" heet. Na het indrukken van deze knop wordt de update-query uitgevoerd.

Ik heb dat nu geprobeerd Thomas, maar hij geeft nog steeds deze error:

Notice: Undefined index: gebruiker in C:\Users\Max de Boer\Documents\JEL\Informatica\USBWebserver\root\gebruikerswijzigen.php on line 20
Array
(
[gebruikersnaam] => Max
[wachtwoord] => asdfghj
[voorletters] => M
[achternaam] => Boer
[rol] => Docent
[vak] => wisB
[actief] => 1
[id] =>

Notice: Undefined variable: id in C:\Users\Max de Boer\Documents\JEL\Informatica\USBWebserver\root\gebruikerswijzigen.php on line 95


[versturen] => Veranderen
)

Om de een of andere reden pakt hij nog steeds niets bij $id.

Wat zijn code-tags en mod-breaks Ariën?
Er staat dat je ze erin hebt gezet, maar ik zie ze niet.
Gewijzigd op 03/12/2018 20:46:59 door Max Boer
 
- Ariën  -
Beheerder

- Ariën -

03/12/2018 21:07:25
Quote Anchor link
In de modbreak edit onderaan je vorige bericht heb ik een link neergezet naar het UBB-code overzicht.
Gewijzigd op 03/12/2018 21:07:45 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

03/12/2018 22:34:09
Quote Anchor link
Err, ik denk dat je er verstandiger aan doet om de verschillende acties wat beter te splitsen. En even op elk moment te controleren welke informatie je in $_GET/$_POST hebt.
 
Max Boer

Max Boer

04/12/2018 19:06:42
Quote Anchor link
Ik heb het probleem opgelost!

$id = mysqli_real_escape_string($mysql,$_POST['id']);
$id = mysqli_real_escape_string($mysql,$_POST['gebruiker']);
$result = mysqli_query($mysql,"SELECT * FROM gebruikers WHERE id=$id");
$gebruiker = mysqli_fetch_assoc($result);

Bedankt voor alle moeite!
 
- Ariën  -
Beheerder

- Ariën -

04/12/2018 19:10:04
Quote Anchor link
Ik zou wel even $id tussen quotes plaatsen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $result
= mysqli_query($mysql,"SELECT * FROM gebruikers WHERE id='".$id."'");
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

04/12/2018 19:22:56
Quote Anchor link
o_O

Maar daar wordt enkel $id overschreven van een niet-bestaande POST variabele ($_POST['id']) naar een wel bestaande POST variabele ($_POST['gebruiker']), waar je al een aantal keren op gewezen was?

- Ariën - op 04/12/2018 19:10:04:
Ik zou wel even $id tussen quotes plaatsen.
Mja, en misschien eerst ook nog even valideren (en wellicht ook kijken of de POST variabele bestaat) of het ook echt een auto-increment id betreft, anders heeft het in eerste instantie geen enkele zin om die query uberhaupt uit te voeren.
 



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.