[PHP] updaten in mysql

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 181927

Topicstarter
Ik ben tamelijk nieuw met php en ik zit ongeveer 2 dagen vast met een dom scriptje om een rij in mysql te updaten (ik schaam mezelf...).

Ik start vanop een andere pagina en ik open de updatepagina (modify.php) met een link zoals:
http://www.mijndomein.com/admin/modify.php?index=2


Mijn code van modify.php is:

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
<?php
// Connecting the db
include("inc_connect_mysql.php");

// See if the page called itself
// with a hidden field
if (isset($_POST["bevestiging"])){
    $query="DELETE FROM content WHERE index=" .$_POST['index'];
    $result = mysql_query($query) or die ("FOUT: " . mysql_error());
    echo("De volgende opdracht is uitgevoerd: <b>$query</b><br>\n");
    if ($result){
        echo ("Record nummer " .$_POST["index"] . " is verwijderd<br>\n");
        echo ("<a href=\"modifycontent.php\">Terug naar het overzicht</a>");
    }
}else{
    // page didn't call itself, 
    // ask for confirmation forst
    $query="SELECT * FROM content WHERE index=".$_GET['index'];
    $result = mysql_query($query) or die ("FOUT: " . mysql_error());
?>
<html>
<head>
    <title>Deleting: Are you sure?</title>
</head>
<body>
<h2>Warning: do you want to delete these data?</h2>
<?php
while ($rij = mysql_fetch_array($result)){
    echo("index = " . $rij['index'] . "<br>\n");
    echo("Naam = ". $rij['naam'] . "<br>\n");
    echo("url = ". $rij['url'] . "<br>\n");
    echo("Picture = ". $rij['picture']  . "<br><hr>\n");
}?>
<form action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
    <input type="hidden" name="bevestiging" value="1">
    <input type="hidden" name="index" value="<?php echo($_GET["index"]);?>">
    <input type="Submit" value="Yes, delete">
    <input type="Button" value="No, back" onClick="javascript:history.back();">
</form>
<?php
// close else
}
?>
</body>
</html>


Ik krijg de volgende error:
FOUT: 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 'index=2' at line 1

(Het eerste deel van de error is gegenereerd in de code zelf, het 2e deel door mysql)

Mijn tabel ziet er als volgt uit:
index int(5) UNSIGNED auto_increment
naam varchar(50)
url varchar(65)
picture varchar(55)

Zou het aan m'n query liggen of eerder aan de notatie van php?
Alvast zéér hard bedankt!!!!!!!

basso1234

[ Voor 18% gewijzigd door NMe op 13-07-2006 02:16 ]


Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Doe dit maar:

PHP:
1
$query = mysql_query("DELETE FROM content WHERE index = '".$_POST['index']."'") or die (mysql_error());


Vergeet trouwens niet dat je SELECT statement vatbaar is voor SQL injection.

Zie ook http://www.php.net/mysql_real_escape_string.

[ Voor 68% gewijzigd door mcdronkz op 13-07-2006 01:50 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Hoi basso1234, en welkom op GoT. :)

Syntaxfouten in je MySQL-query hebben om te beginnen niets met je PHP-code te maken. De reden dat het fout gaat is dat de tekst 'index' een reserved word is. Dat betekent dat je dit niet zomaar als veldnaam kunt gebruiken; je moet er dan backticks ( ` ) omheen zetten.

Overigens hebben we hier op GoT ook code-tags om je code leesbaarder te maken. Lees dit maar even door: Hoe post je code? / Hoe gebruik je de code tag?

Verder ben je niet, zoals je in je topictitel en topicstart suggereert, bezig met updaten van MySQL, zelfs niet met updaten in MySQL. Je bent rijen aan het deleten. Als je aan het programmeren bent, dan moet je op zijn minst weten wat je aan het doen bent, of het gaat goed mis. :)

Lees ook Programming FAQ - Debuggen: hoe doe ik dat? even door.
mcdronkz schreef op donderdag 13 juli 2006 @ 01:48:
Doe dit maar:

PHP:
1
$query = mysql_query("DELETE FROM content WHERE index = '".$_POST['index']."'") or die (mysql_error());
Dat werkt alleen als zijn index-veld als string is gedefinieerd, en dan nog is zijn probleem er niet mee opgelost. ;) Met de rest van je post ben ik het wel eens verder. :)

[ Voor 5% gewijzigd door NMe op 13-07-2006 12:50 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Volgens mij is het geen POST wat hij hier doet ;) Dus het is een ordinaire select, maar nog wel met de sleutelwoord "index" als veldnaam. Mijn inbreng: wijzig liever de veldnaam in plaats van om risicovolle omzeilingen te nemen. "id" is ook een prima keuze.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Bedenk je wel, dat als je ongecontroleerd je geposte / gegette variabelen in de query zet, dat je dan kwetsbaar bent voor SQL injection.

Ik zou dus (als je alleen een getal wilt hebben, bijv. voor id) als volgt te werk gaan dan
PHP:
1
2
3
4
5
6
7
8
if(is_int($_POST['index']) || is_int($_GET['index']))
{
    $query = je query hier
}
else
{
    echo 'Tenminste een variabele is geen getal';
}

Acties:
  • 0 Henk 'm!

Anoniem: 181927

Topicstarter
Alvast bedankt voor de comments! Ik wist niet dat index een gereserveerd woord was. Ik zal eens met id proberen en daarna eens iets zoeken voor die injecties :)

[ Voor 3% gewijzigd door Anoniem: 181927 op 13-07-2006 12:56 ]


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Nee, je kunt, als ik -NMe- goed heb begrepen index wel gebruiken, maar dan moet je hem tussen backticks ( ` ) zetten. dus `index` = 2

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • __xeno__
  • Registratie: Augustus 2005
  • Laatst online: 11-06 18:53
Modbreak:Reageer ontopic of reageer niet. :)

[ Voor 90% gewijzigd door NMe op 13-07-2006 14:00 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Room42 schreef op donderdag 13 juli 2006 @ 13:13:
Nee, je kunt, als ik -NMe- goed heb begrepen index wel gebruiken, maar dan moet je hem tussen backticks ( ` ) zetten. dus `index` = 2
Klopt, maar id is gangbaarder en logischer. Je kan meerdere indexen hebben op een tabel, maar een ID heb je maar één keer en is daarom veel logischer als veldnaam. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1