Probleem met update script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

T T

T T

29/08/2012 16:11:04
Quote Anchor link
Ik heb een probleem met het updaten van mijn database via onderstaand script. Momenteel word alles blanco ipv de opgegeven waarde uit het het dropdown menu. Iemand een idee wat hier fout gaat? $_POST["edit"] word van een vorige pagina verstuurd en werkt prima (zo lijkt het) de juist record geupdate naar een blanco status. Ik wil ook prioriteit en medewerker aanpassen via dit script.

- Ik ben me bewust van de lekke beveiliging. De website draait intern dus maak me hier (nog niet) druk om.
- Ik ben beginnend scripter dus fouten zullen er vast in zitten..

Toch bedankt voor het lezen en de eventuele hulp :)


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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<style type="text/css">
td.kleur1 {
    background-color: #000000;
       color: white;
font-weight: bold;
}
td.kleur2 {
    background-color: #ADFF2F;
font-weight: bold;
}
</style>
<?php

$host
="localhost"; // Host name
$username="*****"; // Mysql username
$password="*****"; // Mysql password
$db_name="viewit"; // Database name

// Connect to server and select databse.

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


//Query starten
$query = "SELECT *    
          FROM vervangingen  
          WHERE Identificatie = '"
. mysql_real_escape_string($_POST["edit"]) . "'";

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
 ?>

<?php
if (!isset($_POST['submit'])) { // if page is not submitted to itself echo the form

$update = "UPDATE vervangingen SET Status = '" . mysql_real_escape_string($_POST["status"]) . "' WHERE Identificatie = '" . mysql_real_escape_string($_POST["edit"]) . "'";
mysql_query($update) or die (mysql_error());

}

?>


<form action="http://viewit/update.php" method="post">
<table width="300" border="1" align="left" cellpadding="5" cellspacing="3"RULES="NONE" FRAME="BOX" bordercolor="#000000">

<tr>
  <td class="kleur1"><h3>&nbsp;<?php echo $row['Identificatie'] ;?> </h3></td>
  <td class="kleur1">&nbsp; </td>
</tr>

<tr>
  <td class="kleur2">&nbsp;</td>
  <td>&nbsp; </td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Status:</td>
  <td>  
<select name="status">
    <option value="Openstaand">Openstaand</option>
    <option value="Afgehandeld">Afgehandeld</option>
  
</select>

  </td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Prioriteit:</td>
  <td>
  
  <select name="prioriteit">
    <option value="Laag">Laag</option>
    <option value="Normaal" selected>Normaal</option>
    <option value="Verhoogd">Verhoogd</option>
    <option value="Hoog">Hoog</option>
  
  </td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;IT Medewerker:</td>
  <td>
<?php
$query
= "SELECT naam, stafcode FROM afdelingit WHERE rechten=1";
// Execute it, or return the error message if there's a problem.
$result2 = mysql_query($query) or die(mysql_error());

$dropdown = "<select name='itmedewerker'>";
while($row2 = mysql_fetch_assoc($result2)) {
  $dropdown .= "\r\n<option value='{$row2['naam']} {$row2['stafcode']}'>{$row2['naam']} {$row2['stafcode']}</option>";
}

$dropdown .= "\r\n</select>";
echo $dropdown;
?>
</td>
    
</tr>

<tr>
  <td class="kleur2"> &nbsp;Pc nummer:</td>  
  <td> &nbsp;<?php echo $row['Identificatie'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Eigenaar:</td>
  <td> &nbsp;<?php echo $row['Eigenaar'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Gebr. specifiek:</td>
  <td> &nbsp;<?php echo $row['Gebr_specificatie'] ;?></td>
</tr>

<tr>
<td class="kleur2"> &nbsp;Objectsoort:</td>  
  <td> &nbsp;<?php echo $row['Objectsoort'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Merk:</td>
  <td> &nbsp;<?php echo $row['Merk'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Type:</td>
  <td> &nbsp;<?php echo $row['Type'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Serienummer:</td>
  <td> &nbsp;<?php echo $row['Serienummer'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Asset Tag:</td>
  <td> &nbsp;<?php echo $row['Asset_Tag']; ?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Operating System:</td>
  <td> &nbsp;<?php echo $row['Operating_system'] ;?></td>
</tr>

<tr>
  <td class="kleur2">&nbsp;</td>
  <td> &nbsp; </td>
</tr>

<tr>
  <td class="kleur1">&nbsp; </td>
  <td class="kleur1"><pre align="right"><input type="submit" value=" Sla de wijzingen op! " name="submit" /></pre></td>
</tr>
</form>
</table>
 
PHP hulp

PHP hulp

24/11/2024 08:13:26
 
Kumkwat Trender

Kumkwat Trender

29/08/2012 16:15:49
Quote Anchor link
Geef eens meer info.
Voeg dit bovenaan toe:

error_reporting(E_ALL);
 
- Mark -

- Mark -

29/08/2012 16:16:07
Quote Anchor link
Dat is ook niet zo vreemd. Zoals je het nu hebt update je de boel als het formulier NIET is verzonden. Er zitten dus geen waardes in de $_POST vars. Als je gewoon goede fout afhandeling had toegepast dan was je daar al snel genoeg achter gekomen. Dat het intern draait maakt niets uit.
 
T T

T T

29/08/2012 16:23:10
Quote Anchor link
@ Kumkwat Ik zie dat ik die vergeten was inderdaad. Loop al de hele dag de "prutsen" met het update gebeuren.

@Mark Thxs, ik zie het inderdaad. Ik krijg alleen niet duidelijk wat ik anders moet doen of een goede tutorial vinden waar ik hetzelfde doel haal.
 
Kris Peeters

Kris Peeters

29/08/2012 16:24:02
Quote Anchor link
De fout die je krijgt, zal waarschijnlijk vooral hier van komen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (!isset($_POST['submit'])) { // if page is not submitted to itself echo the form
$update = "UPDATE vervangingen ... ";
}

?>


Als je je eigen commentaar leest, staat daar dat binnen de accolades het formulier moet worden getoond.

Aangezien je exact het tegenovergestelde doet ... haal die ! weg voor de isset.

Wat echter nog een beter idee is: vervang lijn 33 door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST') {
?>
Gewijzigd op 29/08/2012 16:25:04 door Kris Peeters
 
T T

T T

29/08/2012 16:30:35
Quote Anchor link
Thxs Kris, Ik ben lijn 33 vervangen maar hij doet tot nu toe hetzelfde. Hij update wel maar naar blanco.

Toevoeging op 29/08/2012 16:31:27:

Zo ff een code update gedaan

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<style type="text/css">
td.kleur1 {
    background-color: #000000;
       color: white;
font-weight: bold;
}
td.kleur2 {
    background-color: #ADFF2F;
font-weight: bold;
}
</style>
<?php

$host
="localhost"; // Host name
$username="**"; // Mysql username
$password="**"; // Mysql password
$db_name="viewit"; // Database name

// Connect to server and select databse.

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


//Query starten
$query = "SELECT *    
          FROM vervangingen  
          WHERE Identificatie = '"
. mysql_real_escape_string($_POST["edit"]) . "'";

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
 ?>

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST') {

$update = "UPDATE vervangingen SET Status = '" . mysql_real_escape_string($_POST["status"]) . "' WHERE Identificatie = '" . mysql_real_escape_string($_POST["edit"]) . "'";
mysql_query($update) or die (mysql_error());

}

?>


<form action="http://viewit/update.php" method="post">
<table width="300" border="1" align="left" cellpadding="5" cellspacing="3"RULES="NONE" FRAME="BOX" bordercolor="#000000">

<tr>
  <td class="kleur1"><h3>&nbsp;<?php echo $row['Identificatie'] ;?> </h3></td>
  <td class="kleur1">&nbsp; </td>
</tr>

<tr>
  <td class="kleur2">&nbsp;</td>
  <td>&nbsp; </td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Status:</td>
  <td>  
<select name="status">
    <option value="Openstaand">Openstaand</option>
    <option value="Afgehandeld">Afgehandeld</option>
  
</select>

  </td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Prioriteit:</td>
  <td>
  
  <select name="prioriteit">
    <option value="Laag">Laag</option>
    <option value="Normaal" selected>Normaal</option>
    <option value="Verhoogd">Verhoogd</option>
    <option value="Hoog">Hoog</option>
  
  </td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;IT Medewerker:</td>
  <td>
<?php
$query
= "SELECT naam, stafcode FROM afdelingit WHERE rechten=1";
// Execute it, or return the error message if there's a problem.
$result2 = mysql_query($query) or die(mysql_error());

$dropdown = "<select name='itmedewerker'>";
while($row2 = mysql_fetch_assoc($result2)) {
  $dropdown .= "\r\n<option value='{$row2['naam']} {$row2['stafcode']}'>{$row2['naam']} {$row2['stafcode']}</option>";
}

$dropdown .= "\r\n</select>";
echo $dropdown;
?>
</td>
    
</tr>

<tr>
  <td class="kleur2"> &nbsp;Pc nummer:</td>  
  <td> &nbsp;<?php echo $row['Identificatie'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Eigenaar:</td>
  <td> &nbsp;<?php echo $row['Eigenaar'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Gebr. specifiek:</td>
  <td> &nbsp;<?php echo $row['Gebr_specificatie'] ;?></td>
</tr>

<tr>
<td class="kleur2"> &nbsp;Objectsoort:</td>  
  <td> &nbsp;<?php echo $row['Objectsoort'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Merk:</td>
  <td> &nbsp;<?php echo $row['Merk'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Type:</td>
  <td> &nbsp;<?php echo $row['Type'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Serienummer:</td>
  <td> &nbsp;<?php echo $row['Serienummer'] ;?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Asset Tag:</td>
  <td> &nbsp;<?php echo $row['Asset_Tag']; ?></td>
</tr>

<tr>
  <td class="kleur2"> &nbsp;Operating System:</td>
  <td> &nbsp;<?php echo $row['Operating_system'] ;?></td>
</tr>

<tr>
  <td class="kleur2">&nbsp;</td>
  <td> &nbsp; </td>
</tr>

<tr>
  <td class="kleur1">&nbsp; </td>
  <td class="kleur1"><pre align="right"><input type="submit" value=" Sla de wijzingen op! " name="submit" /></pre></td>
</tr>
</form>
</table>
Gewijzigd op 29/08/2012 16:32:10 door T T
 
Kris Peeters

Kris Peeters

29/08/2012 16:37:44
Quote Anchor link
Maar meer structureel:

- Ten eerste: escapen helpt niet enkel tegen hackers. Het helpt ook tegen mensen die speciale tekens gebruiken, zoals ' en ". Neem nu iemand die ergens het woord foto's gebruikt.
Intern of niet ... dit is geen geldig argument.

- Je structuur moet anders. Een post verwerking doe je niet tussen je HTML.
Je zorgt voor zo'n geraamte:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
// eerst connectie met database en zo ...
if($_SERVER['REQUEST_METHOD'] === 'POST') {
  // hier verwerk je de post request
  header('location: ...');  // redirecten naar de pagina waar je naartoe wil, in plaats van die "..."  
  exit;
}

// pas vanaf hier begin je met HTML te genereren
?>

<!doctype html>
...


Ook het lezen van records zou ik bovenaan doen. Sla die op in een variabele en gebruik ze waar nodig.

Nadat je <doctype> naar de client stuurt, zou je eigenlijk geen enkele logica meer mogen hebben. Geen if's , geen while's, ...
(Eventueel wel de ternary operator)

Als je dit doet, zal alles ook veel duidelijker worden voor jezelf en vind je fouten ook gemakkelijker
Gewijzigd op 29/08/2012 16:40:30 door Kris Peeters
 
T T

T T

29/08/2012 16:41:14
Quote Anchor link
oke, ik ga me hier eens in verdiepen. Bedankt man :)
 
N K

N K

29/08/2012 16:46:45
Quote Anchor link
Volgens mij geef je geen waarde op voor ($_POST['edit'])
Gewijzigd op 29/08/2012 16:47:21 door N K
 
Obelix Idefix

Obelix Idefix

29/08/2012 16:48:43
Quote Anchor link
Waar komt edit vandaan in $_POST['edit']?
edit: N.K. was net wat sneller.

Had je zelf ook kunnen zien/testen door te debuggen: echo een query naar het scherm en kijk of er dat staat wat je verwacht.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form action="http://viewit/update.php" method="post">

Is dit een goede verwijzing naar update.php? Zonder www en zonder extensie?
Gewijzigd op 29/08/2012 16:52:13 door Obelix Idefix
 



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.