SQL syntax fout
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
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 {
?>
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>
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
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
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";
?>
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:
Wanneer het id in je URL staat:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
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 ($_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";
?>
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
$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.
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
levert het volgende op :
Array ( [id] => [wat] => input wat [hoe] => input hoe )
Array ( [id] => 4 )
hij pakt 'm dus wel degelijk
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.