De data wordt niet geupdate
Ik heb een tabel waarbij ik data uit een database laat zien. De bedoeling is dat je de data kan wijzigen.
Als je dan op de link/button wijzig klik dan zal de wijzigingen opgeslagen moeten worden in de database.
Maar de wijzigingen worden niet in de database opgeslagen. En als de query is uigevoerd dan zie je de melding data met succes gewijzigd; dit zie ik ook niet op het scherm.
Ik krijg geen foutmeldingen.
mijn vraag is: hoe kunnen de wijzigingen opgeslagen worden in de database?
de index.php is:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
<body>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 1. Verbinding maken met database:
require_once ("connect.php");
// 2. Query opstellen
$query = "SELECT * FROM users ";
// 3. Query uitvoeren
$result = mysqli_query($conn, $query) or die(mysqli_error());
?>
<?php
// 4. Resultaat verwerken
echo "<table border='1'>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>voornaam</th>";
echo "<th>achternaam</th>";
echo "<th>woonplaats</th>";
echo "<th>username</th>";
echo "<th>E-mail</th>";
echo "<th>Pass</th>";
echo "</tr>";
while ($record = mysqli_fetch_assoc($result)) {
$id = $record['user_id'];
$voornaam = $record['first_name'];
$achternaam = $record['last_name'];
$woonplaats = $record['user_city'];
$username = $record['username'];
$email = $record['email'];
$pass = $record['passreset'];
echo "<tr>";
?>
<td><input type="text" name="id" value="<?php echo $id; ?>" /></td>
<td><input type="text" name="voornaam" value="<?php echo $voornaam; ?>" /></td>
<td><input type="text" name="achternaam" value="<?php echo $achternaam; ?>" /></td>
<td><input type="text" name="woonplaats" value="<?php echo $woonplaats; ?>" /></td>
<td><input type="text" name="username" value="<?php echo $username; ?>" /></td>
<td><input type="text" name="email" value="<?php echo $email; ?>" /></td>
<td><textarea name="beschrijving" ><?php echo $pass; ?></textarea></td>
<?php echo "<a href='wijzig.php?id=$id' name='update'>Wijzig</a>"; ?>
<?php
echo "</tr>";
}
echo "</table>";
mysqli_close($conn);
?>
</body>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 1. Verbinding maken met database:
require_once ("connect.php");
// 2. Query opstellen
$query = "SELECT * FROM users ";
// 3. Query uitvoeren
$result = mysqli_query($conn, $query) or die(mysqli_error());
?>
<?php
// 4. Resultaat verwerken
echo "<table border='1'>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>voornaam</th>";
echo "<th>achternaam</th>";
echo "<th>woonplaats</th>";
echo "<th>username</th>";
echo "<th>E-mail</th>";
echo "<th>Pass</th>";
echo "</tr>";
while ($record = mysqli_fetch_assoc($result)) {
$id = $record['user_id'];
$voornaam = $record['first_name'];
$achternaam = $record['last_name'];
$woonplaats = $record['user_city'];
$username = $record['username'];
$email = $record['email'];
$pass = $record['passreset'];
echo "<tr>";
?>
<td><input type="text" name="id" value="<?php echo $id; ?>" /></td>
<td><input type="text" name="voornaam" value="<?php echo $voornaam; ?>" /></td>
<td><input type="text" name="achternaam" value="<?php echo $achternaam; ?>" /></td>
<td><input type="text" name="woonplaats" value="<?php echo $woonplaats; ?>" /></td>
<td><input type="text" name="username" value="<?php echo $username; ?>" /></td>
<td><input type="text" name="email" value="<?php echo $email; ?>" /></td>
<td><textarea name="beschrijving" ><?php echo $pass; ?></textarea></td>
<?php echo "<a href='wijzig.php?id=$id' name='update'>Wijzig</a>"; ?>
<?php
echo "</tr>";
}
echo "</table>";
mysqli_close($conn);
?>
</body>
wijzig.php is:
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
31
32
33
34
35
36
37
38
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
//connectie maken
if(isset( $_GET['update'])){
include 'connect.php';
//sql voor wijzigen
$sql = "UPDATE users SET first_name = ?, last_name = ?, user_city = ?, username = ?, email = ? , passreset = ? WHERE user_id = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssssssi", $voor_naam, $achter_naam, $woonplaats, $username, $email, $pass, $id);
//variable aanmaken voor invoegen
//if (isset($_GET['id']) && isset($_GET['voornaam']) && isset($_GET['achternaam']) && isset($_GET['woonplaats']) && isset($_GET['username']) && isset($_GET['email']) && isset($//_GET['pass'])){
$id = $_GET['id'];
$voor_naam = $_GET['voornaam'];
$achter_naam = $_GET['achternaam'];
$woonplaats = $_GET['woonplaats'];
$username = $_GET['username'];
$email = $_GET['email'];
$pass = $_GET['pass'];
echo $voor_naam;
//}
$stmt->execute();
if (! $sql) {
echo "Data niet gewijzigd";
} else{
echo "<h3>Data met succes gewijzigd</h3>";
}
//sluiten
$stmt->close();
mysqli_close($conn);
}
?>
<a href="index.php">ga terug</a>
error_reporting(E_ALL);
ini_set('display_errors', 1);
//connectie maken
if(isset( $_GET['update'])){
include 'connect.php';
//sql voor wijzigen
$sql = "UPDATE users SET first_name = ?, last_name = ?, user_city = ?, username = ?, email = ? , passreset = ? WHERE user_id = ? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssssssi", $voor_naam, $achter_naam, $woonplaats, $username, $email, $pass, $id);
//variable aanmaken voor invoegen
//if (isset($_GET['id']) && isset($_GET['voornaam']) && isset($_GET['achternaam']) && isset($_GET['woonplaats']) && isset($_GET['username']) && isset($_GET['email']) && isset($//_GET['pass'])){
$id = $_GET['id'];
$voor_naam = $_GET['voornaam'];
$achter_naam = $_GET['achternaam'];
$woonplaats = $_GET['woonplaats'];
$username = $_GET['username'];
$email = $_GET['email'];
$pass = $_GET['pass'];
echo $voor_naam;
//}
$stmt->execute();
if (! $sql) {
echo "Data niet gewijzigd";
} else{
echo "<h3>Data met succes gewijzigd</h3>";
}
//sluiten
$stmt->close();
mysqli_close($conn);
}
?>
<a href="index.php">ga terug</a>
Wilde gok: je wil data uit een formulier hebben, maar je verwijst naar de pagina via een link. Dat werkt niet.
dus ik zou er een formulier in index.php moeten zetten?
Verder is een submit-knop ook nodig. Want je wilt iets uitvoeren, en niet verwijzen.
Gebruik verder ook $_POST ipv $_GET. Waarom zou je de data via de URL willen verzenden?
Gewijzigd op 11/04/2017 19:37:19 door - Ariën -
op dit moment heb ik drie records in de database. En alleen de derde record wordt geupdate als ik op de knop druk, en record 1 en 2 niet als ik daar iets in wijzig, hoe kan dit?
Als die ingevuld is, en gevalideerd moet je de juiste gegevens ervan tonen in je formulier.
toegevoegd aan de code;
Zoals -Ariën- zegt: "Ik raad aan om GET alleen te gebruiken voor je ID"
hoe kan ik GET gebruiken in POST? Dat gaat toch niet?
En waar zet ik die ID in welke URL?
Je gebruikt dan GET naast POST, en dat kan prima naast elkaar. Zorg wel dat je de ?id=$_GET['id'] in de url van je 'action' meegeeft.
maar ik krijg de foutmelding: Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
zou je een voorbeeld code willen laten zien hoe ik get hierin kan gebruiken?
Aller eerst is er een pagina waarin alle leden staan vermeld, laten we maar even zeggen dat dit index.php is.
Hier staat niets meer spannends dan enkel een while() loop. Elk lid die je wilt aanpassen linkt naar: bewerk_lid.php?id=*en dan hier het ID-nummer van het lid*
Dit is dus de data die je via GET meestuurt.
Op bewerk_lid.php kijk je eerst met isset() of $_GET['id'] bestaat en dus in de URL staat. Die is namelijk nodig als je het lid wilt aanpassen. Als die bestaat, dan vang je met mysqli_num_rows() af of deze ook daadwerkelijk bestaat. Want waarom zou je een lid willen aanpassen met een ID wat niet bestaat?
Als er aan deze twee validaties is voldaan, dan toon je het formulier. Hier moet je de gegevens van het lid in je formulier tonen (ID mag je achterwege laten, want die moet men NIET aan kunnen passen). Deze inhoud verstuur je via POST.
Ik hoop dat dit een heldere opzet is, en dat je hiermee wat verder kan.
En over je probleem: Variabelen horen buiten quotes:
Verder is het ook de vraag of het daadwerkelijk in een echo hoeft. Het kan ook prima buiten een PHP-code.
Gewijzigd op 11/04/2017 21:09:09 door - Ariën -
- Ariën - op 11/04/2017 21:05:17:
Verder is het ook de vraag of het daadwerkelijk in een echo hoeft. Het kan ook prima buiten een PHP-code.
Waarom niet meteen de daad bij het woord voegen?
Wat is het punt om dit te printen:
Dit is een stuk minder goed leesbaar dan simpelweg:
In het bovenstaande fragment zie je direct welk deel dynamisch is (het user id) en wat statisch is (de rest van de code).
Daarnaast is het waarschijnlijk geen verstandig idee om rechtstreeks querystring-variabelen terug te plakken in code. In ieder geval niet voordat je hebt vastgesteld dat $_GET['user_id'] van het goede formaat is. En meestal maak je dan een nieuwe "schone"/gevalideerde variabele aan die dit weerspiegelt.
" method="POST">
Moet worden:
<form action="wijzig.php?id=" method="POST">
<form action="wijzig.php?id=Moet worden:
<form action="wijzig.php?id=" method="POST">
Jesper Schroder op 14/04/2017 12:03:49:
Zoek de verschillen?
Jesper Schroder op 14/04/2017 12:03:49:
Heb je dat getest? Je laatste regel in een php blok hoeft niet perse gevolgd te worden door ;.
Ben van Velzen op 14/04/2017 12:34:48:
Heb je dat getest? Je laatste regel in een php blok hoeft niet perse gevolgd te worden door ;.
Jesper Schroder op 14/04/2017 12:03:49:
Heb je dat getest? Je laatste regel in een php blok hoeft niet perse gevolgd te worden door ;.
Oh, sorry. Ik dacht dat je bij elke regel die je afsluit een ; moest plaatsen. Mijn excuses.
Verder hebben we ook mooie [code] en [/code]-tags voor om de scripts heen.