Beste luitjes,

Ik zit met het probleem dat ik mijn opgevraagde gegevens uit de database niet gewijzigd terug krijg in de database.
Het maakt het allemaal wat lastiger omdat ik met een WYSIWYG editor werk zodat ik qua vormgeving meer controle heb.
Ik moet dus mijn php op diverse plaatsen invoeren om tot een werkend geheel te komen.

Nu heb ik het al voor elkaar om de record id op te vragen in een gemaakt formulier. Nu zie ik dus de NAW gegevens en kan ze aanpassen.
Nu wil ik al de formuliervelden weer terug sturen naar de database als gewijzigd. Dit lukt dus niet.

Hier de codes die ik gebruik om de gegevens op te halen uit de database:


<?php 
$dbhost = "localhost";  
$dbuser = "user";    
$dbpass = "password"; 
$dbname = "database"; 

mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($dbname); 

$id = $_GET['id'];
$Wijzig = mysql_query("SELECT * FROM NAW WHERE id = $id ");
$record = mysql_fetch_array($Wijzig);
?>
<form name="Gewijzigd" method="post" action="Gewijzigd.php" id="Form2" onsubmit="return ValidateGewijzigd(this)">
<div id="wb_Text2" style="position:absolute;left:57px;top:29px;width:150px;height:400px;z-index:25" align="right">
<font style="font-size:13px" color="#000000" face="Arial">id:<br>
<br>
Voornaam: <br>
<br>
Tussenvoegsel:<br>
<br>
Achternaam:<br>
<br>
Adres:<br>
<br>
Postcode:<br>
<br>
Woonplaats:<br>
<br>
Telefoon:<br>
<br>
Gsm:<br>
<br>
E-mail:<br>
<br>
Geboorte datum:<br>
<br>
Functie:<br>
<br>
Lid sinds:</font></div>
<input type="text" id="Editbox2" style="position:absolute;left:212px;top:58px;width:144px;font-family:Courier New;font-size:13px;z-index:26" size="18" name="Voornaam" value="<?php echo $record[Voornaam]; ?>" tabindex="1">
<input type="text" id="Editbox1" style="position:absolute;left:212px;top:151px;width:248px;font-family:Courier New;font-size:13px;z-index:27" size="31" name="Adres" value="<?php echo $record[Adres]; ?>" tabindex="4">
<input type="text" id="Editbox4" style="position:absolute;left:213px;top:183px;width:80px;font-family:Courier New;font-size:13px;z-index:28" size="10" name="Postcode" value="<?php echo $record[Postcode]; ?>" tabindex="5">
<input type="submit" id="Button2" name="Button2" value="Wijzig gegevens" style="position:absolute;left:212px;top:452px;width:153px;height:25px;z-index:29" tabindex="13">
<input type="text" id="Editbox3" style="position:absolute;left:212px;top:119px;width:200px;font-family:Courier New;font-size:13px;z-index:30" size="25" name="Achternaam" value="<?php echo $record['Achternaam']; ?>" tabindex="3">
<input type="text" id="Editbox6" style="position:absolute;left:213px;top:214px;width:200px;font-family:Courier New;font-size:13px;z-index:31" size="25" name="Woonplaats" value="<?php echo $record[Woonplaats]; ?>" tabindex="6">
<input type="text" id="Editbox5" style="position:absolute;left:213px;top:246px;width:112px;font-family:Courier New;font-size:13px;z-index:32" size="14" name="Telefoon" value="<?php echo $record[Telefoon]; ?>" maxlength="11" tabindex="7">
<input type="text" id="Editbox8" style="position:absolute;left:213px;top:277px;width:112px;font-family:Courier New;font-size:13px;z-index:33" size="14" name="GSM" value="<?php echo $record[GSM]; ?>" maxlength="11" tabindex="8">
<input type="text" id="Editbox7" style="position:absolute;left:213px;top:310px;width:248px;font-family:Courier New;font-size:13px;z-index:34" size="31" name="Email" value="<?php echo $record[Email]; ?>" tabindex="9">
<input type="text" id="Editbox10" style="position:absolute;left:213px;top:377px;width:248px;font-family:Courier New;font-size:13px;z-index:35" size="31" name="Functie" value="<?php echo $record[Functie]; ?>" tabindex="11">
<input type="text" id="Editbox9" style="position:absolute;left:213px;top:409px;width:56px;font-family:Courier New;font-size:13px;z-index:36" size="7" name="Lid" value="<?php echo $record[Lid]; ?>" maxlength="4" tabindex="12">
<input type="text" id="Editbox12" style="position:absolute;left:212px;top:88px;width:80px;font-family:Courier New;font-size:13px;z-index:37" size="10" name="Voegsel" value="<?php echo $record['Voegsel']; ?>" tabindex="2">
<input type="text" id="Editbox11" style="position:absolute;left:213px;top:344px;width:104px;font-family:Courier New;font-size:13px;z-index:38" size="13" name="GebDatum" value="<?php echo $record[GebDatum]; ?>" maxlength="10" tabindex="10">
<input type="text" id="Editbox13" style="position:absolute;left:212px;top:26px;width:32px;font-family:Courier New;font-size:13px;z-index:39" size="4" name="id" value="<?php echo $record[id]; ?>" input readonly>
</form>


Nu heb ik dus de juiste php code nodig voor de pagina Verzend gewijzigde gegevens om de records uit het formulier op te pakken en gewijzigd terug te sturen naar de database.

Wie kan me helpen met de juiste code?

Groet,

Nanno

[edit]
Code tags toegevoegd, [ignore]
 
[/ignore] zodat het wat makkerlijker leest.

moderator: Danny Roelofs
[/edit]
Je krijgt dus een pagina 'Gewijzigd.php' (dat is waar je formulier naartoe verwijst) waarin je het formulier uitleest en de database update...

Ik zou zeggen, kijk eens in de script lib naar een willekeurig nieuwsscript oid. Zeker weten dat je er een tegen komt waarin ook een mogelijkheid zit om een bericht te wijzigen.
Als je een update query uit wilt voeren, heb je in ieder geval het id nodig van de record die je wilt wijzigen, zodat je zoiets kunt doen:

<?php
    $sql = "
        UPDATE tabelnaam
        SET
            veld1 = 'waarde1',
            veld2 = 'waarde2'
        WHERE id = " . $id . "
        ";
?>

De meest gebruikte methode is deze: bij het ophalen van de gegevens haal je ook het id op. Deze stop je in een hidden input in je formulier. Geef hem name="id" mee, dan kun je na verzenden via $_POST['id'] kijken om welke record het gaat.
Jan,

Ik ga het eens proberen..
Het duizeld nu al bij me. Wat een taal toch dat php.
Mooi, maar soms wat complex als het niet werkt.

Ik neem dus van je aan dat de mysql_query niet nodig is voor het sturen van de gewijzigde formulier velden.

Groet,

Nanno
@Nanno

Jawel, het is wel nodig om mysql_query($sql) te doen. Anders heb je gewoon een stukje tekst in een variabele. Met mysql_affected_rows() kan je vervolgens controleren of het aantal veranderde velden wel klopt. In zo'n query zal dat altijd 1 zijn.
Nanno schreef op 04.07.2007 00:01
Jan,

Ik ga het eens proberen..
Het duizeld nu al bij me. Wat een taal toch dat php.
Mooi, maar soms wat complex als het niet werkt.

Ach ja, wat zal ik zeggen: welkom in de wereld van PHP ;-)

Die complexiteit is een feit. Hoe langer je programmeert, hoe meer je dat leuk gaat vinden.
Dit is nu de code die ik dus heb.
De id werd al opgevraagd vanuit de link in de url.
Die staat dus nog en kan ik dus weer gebruiken neem ik aan.
Het id wordt ook al weergeven in het form veld id.
Zou dit zo moeten werken?


<?php 
$dbhost = "localhost";  
$dbuser = "User";    
$dbpass = "Password"; 
$dbname = "Dbase"; 
     
mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($dbname); 

$id = $_GET['id'];

	$sql = "
        UPDATE NAW
        SET
            id = 'id',
			Voornaam = 'Voornaam',
			Voegsel = 'Voegsel',
			Achternaam = 'Achternaam',
			Adres = 'Adres',
			Postcode = 'Postcode',
			Woonplaats = 'Woonplaats',
			Telefoon = 'Telefoon',
			GSM = 'GSM',
			Email = 'Email',
			Functie = 'Functie',
			Lid = 'Lid',
            GebDatum = 'GebDatum'
        WHERE id = " . $id . "
        ";

mysql_query($sql)
?>
Pfff...

Ik krijg geen error met deze code bij het versturen, maar wijzigen doet hij ook niet.
Snap er niets van....
@Nanno:
Ja, in principe zou het wel werken, maar besef wel dat de waardes die je nu ingevuld hebt geen variabelen zijn uit een tekstveld oid.

EDIT:
als hij niets wijzigt, doe dan eens
echo $id;
dus even kijken of die wel een waarde bevat.

EDIT2: je hebt geen ; achter mysql_query($sql) staan.
daarnaast is het verstandig om er het volgende van te maken
mysql_query($sql) or die (mysql_error());

Zo geeft hij een mooie foutmelding, als je een fout in je query hebt.
Ik krijg geen echo terug...
En ik moet mijn veldnamen dus wijzigen met een $ teken ervoor?
Dan heb ik dus ook gelijk mijn id te pakken lijkt mij...

Ga ik s proberen.
<?php
$sql = "UPDATE NAW SET voornaam = 'voornaam' WHERE id = ".$id;
?>


Dit zet letterlijk het woord voornaam in het veld voornaam, dat wil je niet, je wilt de waarde uit het tekstveld voornaam in je veld hebben, dus dat doe je dan als volgt:

<?php
$voornaam = $_POST['voornaam'];
$sql = "UPDATE NAW SET voornaam = '".$voornaam."' WHERE id = ".$id;
?>

En dit dan voor alle velden herhalen uiteraard, want met $_POST[''] haal je de waarde uit je form op (tussen de quotes de waarde die bij name="" staat)

of je doet het direct, dat kan ook, en maakt je code iets korter
<?php
$sql = "UPDATE NAW SET voornaam = '".$_POST['voornaam']."' WHERE id = ".$id;
?>


Als laatste wil ik je aanraden het veld id (wat waarschijnlijk op auto_increment staat) niet mee te updaten, je hoeft namelijk niet perse alle velden te updaten, de velden die je niet aangeeft, blijven gewoon hetzelfde, en het id wil je immers niet veranderen.

Reageren