Mysql update verkeerde id
Ik heb een form waar ik er 1 bij of af kan tellen bij het aantal.
Maar ik krijg altyd als output van de SQL :
string(49) "UPDATE name_test SET aantal=aantal-1 WHERE id="2""
Hij update dus alleen het laaste id/ van de results terwijl ik bijv. id 1 wil updaten. en in dit geval update het script alleen het laaste id.
Hoe kan ik dit oplossen?
zie code:
de DB:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--
-- Table structure for table `name_test`
--
CREATE TABLE IF NOT EXISTS `name_test` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`aantal` int(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `name_test`
--
INSERT INTO `name_test` (`id`, `name`, `aantal`) VALUES
(1, 'test', 4),
(2, 'test2', 996);
-- Table structure for table `name_test`
--
CREATE TABLE IF NOT EXISTS `name_test` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`aantal` int(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `name_test`
--
INSERT INTO `name_test` (`id`, `name`, `aantal`) VALUES
(1, 'test', 4),
(2, 'test2', 996);
en de php :
Code (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
46
47
48
49
50
51
52
53
54
55
56
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
46
47
48
49
50
51
52
53
54
55
56
<?php
mysql_connect('localhost','root','');
mysql_select_db('test_percentage');
echo '<pre>';// voor de var_dumps goed uit te lezen
$percentage = '100%';//test percentage nog niet werkend ;s
$query = 'SELECT * FROM name_test';
$result = mysql_query($query);
?>
<table border="1">
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<th colspan="4">Test header van table</th>
<tr>
<td>name</td>
<td>percentage</td>
<td>ammount</td>
<td>add/minus</td>
</tr>
<?php
while($row = mysql_fetch_array($result)){
$id = $row[0];
$name = $row[1];
$aantal = $row[2];
echo
'<tr>'.'<input type="hidden" value="'.$id.'">'."\r".
'<td><label>'.$name.' - '.'</td>'."\r".
'<td><input type="text" disabled value="'.$percentage.'"></td>'."\r".
'<td>'.$aantal.'</td>'."\r".
'<td>'.'<input type="submit" value="+" name="add">'."\r".
'<input type="submit" value="-" name="minus">'.'</label></td>'."\r".
'</tr>'."\r";
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['add'])){
$addone = 'UPDATE name_test SET aantal=aantal+1 WHERE id="'.$id.'"';
var_dump($addone);
$addded = mysql_query($addone);
//echo '<meta http-equiv="refresh" content="1" />';
} else {
$minusone = 'UPDATE name_test SET aantal=aantal-1 WHERE id="'.$id.'"';
var_dump($minusone);
$dela = mysql_query($minusone);
//echo '<meta http-equiv="refresh" content="1" />';
}
}
?>
</form>
</table>
<p>voeg nog 1 toe</p>
mysql_connect('localhost','root','');
mysql_select_db('test_percentage');
echo '<pre>';// voor de var_dumps goed uit te lezen
$percentage = '100%';//test percentage nog niet werkend ;s
$query = 'SELECT * FROM name_test';
$result = mysql_query($query);
?>
<table border="1">
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<th colspan="4">Test header van table</th>
<tr>
<td>name</td>
<td>percentage</td>
<td>ammount</td>
<td>add/minus</td>
</tr>
<?php
while($row = mysql_fetch_array($result)){
$id = $row[0];
$name = $row[1];
$aantal = $row[2];
echo
'<tr>'.'<input type="hidden" value="'.$id.'">'."\r".
'<td><label>'.$name.' - '.'</td>'."\r".
'<td><input type="text" disabled value="'.$percentage.'"></td>'."\r".
'<td>'.$aantal.'</td>'."\r".
'<td>'.'<input type="submit" value="+" name="add">'."\r".
'<input type="submit" value="-" name="minus">'.'</label></td>'."\r".
'</tr>'."\r";
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['add'])){
$addone = 'UPDATE name_test SET aantal=aantal+1 WHERE id="'.$id.'"';
var_dump($addone);
$addded = mysql_query($addone);
//echo '<meta http-equiv="refresh" content="1" />';
} else {
$minusone = 'UPDATE name_test SET aantal=aantal-1 WHERE id="'.$id.'"';
var_dump($minusone);
$dela = mysql_query($minusone);
//echo '<meta http-equiv="refresh" content="1" />';
}
}
?>
</form>
</table>
<p>voeg nog 1 toe</p>
Hij update de verkeerde id/veld.
Hoe kan ik dit fixen?
Gewijzigd op 01/01/1970 01:00:00 door Bart niethenk
de de while loop blijft draaien, en draaien, en draaien, tot hij klaar is. en op dat moment, is id al een aantal keren overschreven, waardoor je dus alleen de laatste update. je zal je update in je loop moeten zetten, en anders een array maken met de id's, en daar mee een foreach loop moeten draaien rondom je update query.
thnx wesly maar ik heb de where id van de var $id naar $_POST['id'] en dat fixte het.
en ook heb ik de form tags binnen de echo gedaan.
Gewijzigd op 01/01/1970 01:00:00 door bart niethenk
SanThe schreef op 19.11.2009 13:44:
Zet dit bovenin je script.
zie post hierboven het is al fixed,
ik zal de code van nu wel even posten :
Code (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
mysql_connect('localhost','root','');
mysql_select_db('test_percentage');
echo '<pre>';// voor de var_dumps goed uit te lezen
$percentage = '100%';//test percentage nog niet werkend ;s
$query = 'SELECT * FROM name_test';
$result = mysql_query($query);
?>
<table border="1">
<th colspan="4">Test header van table</th>
<tr>
<td>name</td>
<td>percentage</td>
<td>ammount</td>
<td>add/minus</td>
</tr>
<?php
while($row = mysql_fetch_array($result)){
$i +=1;
$id = $row[0];
$name = $row[1];
$aantal = $row[2];
echo
'<tr>'.'<form action="'.$_SERVER['PHP_SELF'].'" method="POST">'.
'<input type="hidden" name="id" value="'.$id.'">'."\r".
'<td><label>'.$name.' - '.'</td>'."\r".
'<td><input type="text" disabled value="'.$percentage.'"></td>'."\r".
'<td>'.$aantal.'</td>'."\r".
'<td>'.'<input type="submit" value="+" name="add">'."\r".
'<input type="submit" value="-" name="minus">'.$i.'</label></td>'."\r".
'</tr>'.'</form>'."\r";
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['add'])){
$addone = 'UPDATE name_test SET aantal=aantal+1 WHERE id="'.$_POST['id'].'"';
//var_dump($addone);
$addded = mysql_query($addone);
echo '<meta http-equiv="refresh" content="1" />';
} else {
$minusone = 'UPDATE name_test SET aantal=aantal-1 WHERE id="'.$_POST['id'].'"';
//var_dump($minusone);
$dela = mysql_query($minusone);
echo '<meta http-equiv="refresh" content="0" />';
}
}
?>
</table>
<p>voeg nog 1 toe</p>
error_reporting(E_ALL);
ini_set("display_errors", 1);
mysql_connect('localhost','root','');
mysql_select_db('test_percentage');
echo '<pre>';// voor de var_dumps goed uit te lezen
$percentage = '100%';//test percentage nog niet werkend ;s
$query = 'SELECT * FROM name_test';
$result = mysql_query($query);
?>
<table border="1">
<th colspan="4">Test header van table</th>
<tr>
<td>name</td>
<td>percentage</td>
<td>ammount</td>
<td>add/minus</td>
</tr>
<?php
while($row = mysql_fetch_array($result)){
$i +=1;
$id = $row[0];
$name = $row[1];
$aantal = $row[2];
echo
'<tr>'.'<form action="'.$_SERVER['PHP_SELF'].'" method="POST">'.
'<input type="hidden" name="id" value="'.$id.'">'."\r".
'<td><label>'.$name.' - '.'</td>'."\r".
'<td><input type="text" disabled value="'.$percentage.'"></td>'."\r".
'<td>'.$aantal.'</td>'."\r".
'<td>'.'<input type="submit" value="+" name="add">'."\r".
'<input type="submit" value="-" name="minus">'.$i.'</label></td>'."\r".
'</tr>'.'</form>'."\r";
}
?>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['add'])){
$addone = 'UPDATE name_test SET aantal=aantal+1 WHERE id="'.$_POST['id'].'"';
//var_dump($addone);
$addded = mysql_query($addone);
echo '<meta http-equiv="refresh" content="1" />';
} else {
$minusone = 'UPDATE name_test SET aantal=aantal-1 WHERE id="'.$_POST['id'].'"';
//var_dump($minusone);
$dela = mysql_query($minusone);
echo '<meta http-equiv="refresh" content="0" />';
}
}
?>
</table>
<p>voeg nog 1 toe</p>
Script is lek => SQL-Injection.
SanThe schreef op 19.11.2009 13:56:
Script is lek => SQL-Injection.
Word alleen voor mijzelf gebruikt dus is het niet echt nodig om op sql injection te gaan letten sinds het niet openbaar gebruikt gaat worden.
haha SanThe post altijd en overal dat je error reporting moet aanzetten, ongeacht of het nou een error oproept of niet. :P Graag gedaan.
ik heb dus de tabel:
Hoe kan ik het zo met php bereken dat ik het totaal aantal krijg dus dat ie van alle aantallen beschikbaar alles bij elkaar gaat optellen.
enige idee?
Gewijzigd op 01/01/1970 01:00:00 door bart niethenk
Gewijzigd op 01/01/1970 01:00:00 door koen
koen schreef op 19.11.2009 15:01:
SUM(aantal)
thanks koen dat was hem :D