mysql entry aanpassen

Overzicht Reageren

Rik Oudega

Rik Oudega

05/03/2013 13:09:08
Quote Anchor link
Hallo, ik heb een script waarbij ik een invoer in kan laden in tekstvelden. Deze wil ik vervolgens aanpassen en de wijzigingen doorvoeren in de database. Zodra ik op bijwerken klik verwijst hij naar updateac.php, hier gaat het fout. Ik krijg hier een error. Ziet iemand wat ik fout doe?

edit.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
                    <?php
$host
="localhost";
$username="iets";
$password="iets";
$db_name="iets";
$tbl_name="register";


mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$id=$_GET['id'];


$sql="SELECT * FROM $tbl_name WHERE volgnummer='$id'";
$result=mysql_query($sql);

$rows=mysql_fetch_array($result);
?>

<center>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="update_ac.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td align="center">&nbsp;</td>
<td align="center"><span style="color:black"><strong>Bedrijf</strong></span></td>
<td align="center"><span style="color:black"><strong>Contactpersoon</strong></span></td>
<td align="center"><span style="color:black"><strong>Adres</strong></span></td>
<td align="center"><span style="color:black"><strong>Postcode/plaats</strong></span></td>
<td align="center"><span style="color:black"><strong>Tel. NR.</strong></span></td>
<td align="center"><span style="color:black"><strong>Email</strong></span></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center"><input name="bedrijf" type="text" id="bedrijf" value="<?php echo $rows['bedrijf']; ?>" size="15"></td>
<td align="center"><input name="contactpersoon" type="text" id="contactpersoon" value="<?php echo $rows['contactpersoon']; ?>" size="15"></td>
<td align="center"><input name="adres" type="text" id="adres" value="<?php echo $rows['adres']; ?>" size="15"></td>
<td align="center"><input name="postcodeplaats" type="text" id="postcodeplaats" value="<?php echo $rows['postcodeplaats']; ?>" size="15"></td>
<td align="center"><input name="telefoonnummer" type="text" id="telefoonnummer" value="<?php echo $rows['telefoonnummer']; ?>" size="15"></td>
<td align="center"><input name="email" type="text" id="email" value="<?php echo $rows['email']; ?>" size="15"></td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><span style="color:black"><strong>Branche</strong></span></td>
<td align="center"><span style="color:black"><strong>KVK-NR.</strong></span></td>
<td align="center"><span style="color:black"><strong>BTW-NR.</strong></span></td>
<td align="center"><span style="color:black"><strong>Artikelen</strong></span></td>
<td align="center"><span style="color:black"><strong>Kramen</strong></span></td>
<td align="center"><span style="color:black"><strong>Zeilen</strong></span></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center"><input name="branche" type="text" id="branche" value="<?php echo $rows['branche']; ?>" size="15"></td>
<td align="center"><input name="kvknummer" type="text" id="kvknummer" value="<?php echo $rows['kvknummer']; ?>" size="15"></td>
<td align="center"><input name="btwnummer" type="btwnummer" id="btwnummer" value="<?php echo $rows['btwnummer']; ?>" size="15"></td>
<td align="center"><input name="teverkopen" type="text" id="teverkopen" value="<?php echo $rows['teverkopen']; ?>" size="15"></td>
<td align="center"><input name="aantalkramen" type="text" id="aantalkramen" value="<?php echo $rows['aantalkramen']; ?>" size="15"></td>
<td align="center"><input name="dekzeilen" type="text" id="dekzeilen" value="<?php echo $rows['dekzeilen']; ?>" size="15"></td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><span style="color:black"><strong>Balken</strong></span></td>
<td align="center"><span style="color:black"><strong>Planken</strong></span></td>
<td align="center"><span style="color:black"><strong>Schragen</strong></span></td>
<td align="center"><span style="color:black"><strong>Grondplaatsen</strong></span></td>
<td align="center"><span style="color:black"><strong>Elektriciteit</strong></span></td>
<td align="center"><span style="color:black"><strong>Krachtstroom</strong></span></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center"><input name="balken" type="text" id="balken" value="<?php echo $rows['balken']; ?>" size="15"></td>
<td align="center"><input name="planken" type="text" id="planken" value="<?php echo $rows['planken']; ?>" size="15"></td>
<td align="center"><input name="schragen" type="text" id="schragen" value="<?php echo $rows['schragen']; ?>" size="15"></td>
<td align="center"><input name="grondplaats" type="grondplaats" id="grondplaats" value="<?php echo $rows['grondplaats']; ?>" size="15"></td>
<td align="center"><input name="elektriciteit" type="elektriciteit" id="elektriciteit" value="<?php echo $rows['elektriciteit']; ?>" size="15"></td>
<td align="center"><input name="krachtelek" type="text" id="krachtelek" value="<?php echo $rows['krachtelek']; ?>" size="15"></td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><span style="color:black"><strong>Hoeveelheid</strong></span></td>
<td align="center"><span style="color:black"><strong>Reden</strong></span></td>
<td align="center"><span style="color:black"><strong>Overig</strong></span></td>
<td align="center"><span style="color:black"><strong>Pleknummers</strong></span></td>
<td align="center"><span style="color:black"><strong>Totaal kosten</strong></span></td>
<td align="center"><span style="color:black"><strong>Betaald</strong></span></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center"><input name="hoeveelelek" type="text" id="hoeveelelek" value="<?php echo $rows['hoeveelelek']; ?>" size="15"></td>
<td align="center"><input name="waarvoorelek" type="text" id="waarvoorelek" value="<?php echo $rows['waarvoorelek']; ?>" size="15"></td>
<td align="center"><input name="overig" type="text" id="overig" value="<?php echo $rows['overig']; ?>" size="15"></td>
<td align="center"><input name="pleknummer" type="text" id="pleknummer" value="<?php echo $rows['pleknummer']; ?>" size="15"></td>
<td align="center"><input name="totaalkosten" type="text" id="totaalkosten" value="<?php echo $rows['totaalkosten']; ?>" size="15"></td>
<?php
    if ($rows['betaald'] == 1) {
    $checked = 'checked="checked"';
    $payed = '1';
    }

    else { $payed = '0'; }
?>

<td><center><input name="betaald" type="checkbox" id="betaald" <?php if (isset($checked)) { echo $checked; } ?> value="<?php echo $payed; ?>"></center></td>
                    
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="volgnummer" type="hidden" id="volgnummer" value="<?php echo $rows['volgnummer']; ?>"></td>
<td align="center"><input type="submit" name="Submit" value="Bijwerken" size="15"></td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</form>
</tr>
</table>
</center>
<?

mysql_close();

?>


update_ac.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
                        <?php
                            $host
="localhost"; // Host name
$username="iets"; // Mysql username
$password="iets"; // Mysql password
$db_name="iets"; // Database name
$tbl_name="register"; // Table name

                            // Connect to server and select database.

                            mysql_connect("$host", "$username", "$password")or die("cannot connect");
                            mysql_select_db("$db_name")or die("cannot select DB");

                            // update data in mysql database
                            $sql="UPDATE $tbl_name SET (bedrijf, contactpersoon, adres, postcodeplaats, telefoonnummer, email, branche, kvknummer, btwnummer, teverkopen, aantalkramen, dekzeilen, balken, planken, schragen, grondplaats, elektriciteit, krachtelek, hoeveelelek, waarvoorelek, overig, pleknummer, totaalkosten, betaald) VALUES ('$_POST[bedrijf]','$_POST[contactpersoon]','$_POST[adres]','$_POST[postcodeplaats]','$_POST[telefoonnummer]','$_POST[email]','$_POST[branche]','$_POST[kvknummer]','$_POST[btwnummer]','$_POST[teverkopen]','$_POST[aantalkramen]','$_POST[dekzeilen]','$_POST[balken]','$_POST[planken]','$_POST[schragen]','$_POST[grondplaats]','$_POST[elektriciteit]','$_POST[krachtelek]','$_POST[hoeveelelek]','$_POST[waarvoorelek]','$_POST[overig]','$_POST[pleknummer]','$_POST[totaalkosten]','$_POST[payed]')";
                            $result=mysql_query($sql);

                            // if successfully updated.
                            if($result){
                            echo "Successful";
                            echo "<BR>";
                            echo "<a href='list_records.php'>View result</a>";
                            }


                            else {
                            echo "ERROR";
                            }


                            ?>
 
PHP hulp

PHP hulp

23/09/2014 12:19:54
 
Willem vp

Willem vp

05/03/2013 13:29:14
Quote Anchor link
Errors zijn er niet voor de sier. Het kan helpen als je ook nog zegt wát voor error je krijgt...
 
Rik Oudega

Rik Oudega

05/03/2013 13:30:23
Quote Anchor link
ik krijg geen specefieke error, er is een echo die error vermeld
 
Eddy E

Eddy E

05/03/2013 13:32:27
Quote Anchor link
let op dat je UPDATE-query, zodra hij werk, dus alle rijen vervangt door de nieuwe waarde.
Je mist een WHERE.
Meestal doe je dat via een ID.
Dat ID gebruik je wel op je spullen op te halen, maar moet je ook doorgeven aan update_ac.php zodat hij weet welke rij hij moet bijwerken.

Daarnaast zou ik update_ac_.php zo maken:
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
<?php
    // include de verbinding
    // maakt $mysql_link beschikbaar als link-identificator

    include ("inc/connectie.php");

    // maak dynamisch het SET-gedeelte
    // kolom1 = 'waarde1'

    foreach($_POST as $key => $val)
    {

        $set[] = mysql_real_escape_string($key) . " = '" . mysql_real_escape_string($val) . "'";
    }

    // gooi alle set-velden aan elkar met een komma
    // kolom1 = 'waarde1', kolom2 = 'waarde2' ...

    $set = implode(", ", $set);
    
    // kijk of er een ID is opgegeven
    if(!isset($_GET['id']) OR !is_numeric($_GET['id']) OR $_GET['id'] == 0)
    {

        echo '<p>Fout<br>
        Er is geen ID bekend.</p>'
;
    }

    
    // update data in mysql database
    $query = "    UPDATE register
                SET "
. $set . "
                WHERE id = "
. intval($_GET['id']) . "
                LIMIT 1"
;

    // toon de query even (via broncode te zien)
    echo '<!-- QUERY --' . PHP_EOL . $query . PHP_EOL . '-->';

    // voer de query uit
    $result = mysql_query($query, $mysql_link);

    // als dit opslaan lukte en er 1 rij gewijzigd is...
    if($result !== false AND mysql_affected_rows($mysql_link) == 1)
    {

        echo '<p>Successful<br>
        <a href="list_records.php">View result</a></p>'
;
    }

    else
    {
        echo '<p>Fout<br>
        De query <b>'
. $query . '</b> is niet gelukt: <b>' . mysql_error($mysql_link) . '</b>.</p>';
    }

?>


Dus:
1) Dynamische opbouw van de set. Kortere code, overzichtelijker. Wat niet ingevuld is, wordt overgeslagen. Verwijderen gaat dus hier NIET mee (maar wellicht is dat ook wel gewenst???)
2) Je input wordt beveiligd...
3) Je kan niets missen
4) Je ID dat je meegeeft (let op: via $_GET !!!) wordt gebruikt
5) Je krijgt correcte HTML te zien bij succes of fouten
6) Bij fouten krijg je ook de query + foutmelding te zien (voor debuggen handig, als het eenmaal af is zou je dat moeten verbergen voor gewone gebruikers
7) Er wordt niet alleen gekeken of de query lukte, maar ook of er maar 1 rij is bijgewerkt (als dat 0 is, werk het dus niet)
8) Ik gebruik " voor de query en ' voor HTML, zodat je in de HTML ook gewoon " kan gebruiken. Dat is een algemene en bekende werkwijze.
9) Ik include de database-verbinding. Dan hoef je maar op 1 locatie je gegevens te tonen
10) Ik controleer op het ID of het er is, geldig is en meer is dan 0 (want dat is een ID altijd)

inc/connectie.php

Toevoeging op 05/03/2013 13:38:22:

Rik Oudega op 05/03/2013 13:30:23:
ik krijg geen specefieke error, er is een echo die error vermeld


En dus geeft je mysql_query() false terug. Gelukkig wel.
Gewijzigd op 05/03/2013 13:36:18 door Eddy E
 
Pieter Rekvelt

Pieter Rekvelt

05/03/2013 17:33:05
Quote Anchor link
@ Eddy E
Dank voor deze uitleg.
Leerzaam!
 
Rik Oudega

Rik Oudega

05/03/2013 17:35:06
Quote Anchor link
Helemaal eens met Pieter! Bedank Eddy!
 



Overzicht Reageren