hallo,

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:

<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:

<?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>
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?
Er moet inderdaad een form-tag omheen met als method een POST en als action je URL van je script die het allemaal verwerkt.

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?
bedankt voor de info, ik heb een form-tag omheen gezet en een submit knop.
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?
Waarom laat je een ID in je formulier zien? Zulke data zijn 'primaire sleutels' die je nooit aanpast. Ik raad aan om GET alleen te gebruiken voor je ID. En dus de ID in de URL benoemen. (index.php?id=3 bijv.)

Als die ingevuld is, en gevalideerd moet je de juiste gegevens ervan tonen in je formulier.
ik heb <form action='wijzig.php' method='POST'> <input type="submit" name="update" value="update" /> </form>
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.
ok, ik heb nu:
<?php echo "<form action='wijzig.php?id=$_GET['user_id']' method='POST'> "?>

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?
Ik zal even een opzetje geven over hoe je het moet indelen:

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:

<?php 
echo "<form action='wijzig.php?id=".$_GET['user_id']." method='POST'> ";
?>

Verder is het ook de vraag of het daadwerkelijk in een echo hoeft. Het kan ook prima buiten een PHP-code.
- 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:
<?php 
echo "<form action='wijzig.php?id=".$_GET['user_id']." method='POST'> ";
?>


Dit is een stuk minder goed leesbaar dan simpelweg:
<form action="wijzig.php?id=<?php echo $_GET['user_id'] ?>" method="POST">


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.

Reageren