Ik heb nu dit script:

<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (ctype_digit($_GET['id'])) {
$sql = "UPDATE up SET wat = '$wat', hoe = '$hoe' WHERE id = ".addslashes($_POST['id'])." LIMIT 1";

if (! $res = mysql_query($sql)) {
echo 'Er ging iets mis in de sql bij: <br />'.$sql.'<br />De fout is <br />'.mysql_error();
}
elseif (mysql_affected_rows($res) > 1) {
echo 'Query geslaagd. ';
}
}
} else {
?>
<form method="post" action="">
<input type="hidden" name="id" value="" />
<input type="text" name="wat" /> Wat<br />
<input type="text" name="hoe" /> Hoe<br />

<input type="submit" name="submit" value="Edit!" id="submit" onClick="document.getElementById('submit').value = ' Auw! ';" /> <= Klik<br />
</form>

<?php
}

?>

als ik het uitvoer krijg ik echter de volgende fout:

Er ging iets mis in de sql bij:
UPDATE up SET wat = 'ik wil een nieuwe wat', hoe = 'maarja, hoe' WHERE id = LIMIT 1
De fout is
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1

( wat = 'ik wil een nieuwe wat', hoe = 'maarja, hoe' )zijn mijn ingevoerde waarden in het formulier
Welke ID moet er worden geupdate?

<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// dit was niet logisch, je controleerde een $_GET['id'] en je gebruikte de $_POST['id']
// controleer of numeriek is, bied voldoende veiligheid in dit geval
if (is_numeric($_POST['id'])) {
$sql = "UPDATE up SET wat = '$wat', hoe = '$hoe' WHERE id = ".$_POST['id']." LIMIT 1";
?>

[edit]Na lezen andere topic van je:
Wanneer het id in je URL staat:

<?
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
// dit was niet logisch, je controleerde een $_GET['id'] en je gebruikte de $_POST['id']
// controleer of numeriek is, bied voldoende veiligheid in dit geval
if (isset($_GET['id'] && is_numeric($_GET['id'])) {
$sql = "UPDATE up SET wat = '$wat', hoe = '$hoe' WHERE id = ".$_GET['id']." LIMIT 1";
?>
if (ctype_digit($_GET['id'])) {
$sql = "UPDATE up SET wat = '$wat', hoe = '$hoe' WHERE id = ".addslashes($_POST['id'])." LIMIT 1";

Je controleert of $_GET['id'] wel een nummer is, maar vervolgens ga je $_POST['id'] in de query zetten. Wat heeft $_GET['id'] nu met $_POST['id'] te maken? Helemaal niets, dit zijn 2 totaal verschillende variabelen. Je bent nu zeg maar appels en peren met elkaar aan het vergelijken.

De vraag is dus: Waar moet het id nu vandaan komen? Uit de url (GET) of uit een formulier dat je met post verstuurd (POST) ?

Ps. Je vergeet overigens te controleren of $_GET['id'] wel bestaat, je hoort hier een notice op te krijgen wanneer het id niet in de url staat. Controleer dit even en zorg dat error_reporting(E_ALL); op de eerste regel van je script staat.
mag ik vragen wat het verschil tussen $_GET en $POST is?

overigens als ik de querie verander in $_GET krijg ik de volgende fout:

Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in d:\FORTUNE\nieuws_eigensite\php\bewerk.php on line 52

<? print_r($_POST); ?>


<? print_r($_GET); ?>

levert het volgende op :

Array ( [id] => [wat] => input wat [hoe] => input hoe )


Array ( [id] => 4 )

hij pakt 'm dus wel degelijk


Zoals je kunt zien staan er in POST een 3-tal gegevens die uit een formulier komen (je verstuurt het formulier tenslotte met POST!) en in de GET staat 1 gegeven dat uit de url komt, het id.

Jij gebruik in de query alleen $_POST['id'] die helemaal niet bestaat, zie jouw resulaten. Jij MOET $_GET['id'] gebruiken, wat al meerdere malen is gezegd en al in diverse voorbeelden staat.

mysql_affected_rows($res) mag je vervangen door mysql_affected_rows(), dus zonder $res. Zie de PHP-handleiding.

Reageren