Mysql update verkeerde id

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart niethenk

bart niethenk

19/11/2009 13:18:00
Quote Anchor link
hallo iedereen ik heb het volgende probleem:

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);


en de php :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>


Hij update de verkeerde id/veld.
Hoe kan ik dit fixen?
Gewijzigd op 01/01/1970 01:00:00 door Bart niethenk
 
PHP hulp

PHP hulp

21/11/2024 23:20:30
 
Wesley Overdijk

wesley Overdijk

19/11/2009 13:30:00
Quote Anchor link
Omdat de update buiten de loop staat.

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.
 
Bart niethenk

bart niethenk

19/11/2009 13:35:00
Quote Anchor link
nvm fixed slotje? :D

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 -

- SanThe -

19/11/2009 13:44:00
Quote Anchor link
Zet dit bovenin je script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
 
Bart niethenk

bart niethenk

19/11/2009 13:53:00
Quote Anchor link
SanThe schreef op 19.11.2009 13:44:
Zet dit bovenin je script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>


zie post hierboven het is al fixed,
ik zal de code van nu wel even posten :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>
 
- SanThe -

- SanThe -

19/11/2009 13:56:00
Quote Anchor link
Script is lek => SQL-Injection.
 
Bart niethenk

bart niethenk

19/11/2009 14:01:00
Quote Anchor link
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.
 
Wesley Overdijk

wesley Overdijk

19/11/2009 14:19:00
Quote Anchor link
haha SanThe post altijd en overal dat je error reporting moet aanzetten, ongeacht of het nou een error oproept of niet. :P Graag gedaan.
 
Bart niethenk

bart niethenk

19/11/2009 14:52:00
Quote Anchor link
Ok volgend probleem:

ik heb dus de tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
id name aantal
1  henk 5
3  lol  10



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
 
Koen

koen

19/11/2009 15:01:00
Quote Anchor link
SUM(aantal)
Gewijzigd op 01/01/1970 01:00:00 door koen
 
Bart niethenk

bart niethenk

19/11/2009 15:35:00
Quote Anchor link
koen schreef op 19.11.2009 15:01:
SUM(aantal)


thanks koen dat was hem :D
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.