SQL UPDATE tabel probleem
ik krijg geen foutmeldingen en tog update hij men rows niet?
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
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
<?php
$naam = $_POST['naam'];
$leeftijd = $_POST['leeftijd'];
$woonplaats = $_POST['woonplaats'];
$adres = $_POST['adres'];
$gsm = $_POST['gsm'];
$email = $_POST['email'];
$functie = $_POST['functie'];
$ervaring = $_POST['ervaring'];
$status = $_POST['status'];
$opmerkingen = $_POST['opmerkingen'];
$pagina = $_GET['id'];
$doen = "UPDATE kan$tabelnaam SET naam='$naam', leeftijd='$leeftijd', woonplaats='$woonplaats', functie='$functie', ervaring='$ervaring', status='$status', email='$email', adres='$adres', gsm='$gsm', opmerkingen='$opmerkingen' WHERE id='$pagina'" ;
$resultdoen = mysql_query($doen); //order executes
if($resultdoen){
echo'Kandidaat is met succes gewijzigd <a href="kandidaten.php">klik hier</a> om naar het overzicht te gaan <br />';
} else{
echo("<br>Input data is fail");
echo mysql_error();
}
?>
$naam = $_POST['naam'];
$leeftijd = $_POST['leeftijd'];
$woonplaats = $_POST['woonplaats'];
$adres = $_POST['adres'];
$gsm = $_POST['gsm'];
$email = $_POST['email'];
$functie = $_POST['functie'];
$ervaring = $_POST['ervaring'];
$status = $_POST['status'];
$opmerkingen = $_POST['opmerkingen'];
$pagina = $_GET['id'];
$doen = "UPDATE kan$tabelnaam SET naam='$naam', leeftijd='$leeftijd', woonplaats='$woonplaats', functie='$functie', ervaring='$ervaring', status='$status', email='$email', adres='$adres', gsm='$gsm', opmerkingen='$opmerkingen' WHERE id='$pagina'" ;
$resultdoen = mysql_query($doen); //order executes
if($resultdoen){
echo'Kandidaat is met succes gewijzigd <a href="kandidaten.php">klik hier</a> om naar het overzicht te gaan <br />';
} else{
echo("<br>Input data is fail");
echo mysql_error();
}
?>
iemand die kan zien wat er mis is?
Gewijzigd op 30/04/2013 20:43:47 door Anthony de meulemeester
Anthony de meulemeester op 30/04/2013 20:43:06:
iemand die kan zien wat er mis is?
Wat is er niet mis ;-)
Debuggen: Heb je zelf al gecontroleerd wat er in je query staat door deze naar het scherm te echoën?
In bovenstaande code zie ik nergens een controle op fouten (geen error-reporting, geen controle of een formulier verzonden is, etc.). Dat je meldt dat er geen foutmeldingen zijn, zegt mij dus niet zo veel.
Waarom regel 2 t/m 11? Je kopieert daar, zinloos, variabelen. Variabelen waarvan je overigens niet eens controleert of ze wel bestaan en of de waarde voldoet aan criteria (een gsm nummer kan bv nooit letters bevatten).
In je query heb je het woordje kan staan als (onderdeel?) van de tabelnaam en daarna nog $tabelnaam.
Je query is 'lek'/onbeveiligd. Kijk eens naar mysql_real_escape_string.
Waarom plaats je op regel 22 de echo tussen ( ) en " en op regel 19 doe je het zonder ( ) en met '
Voor je eigen gemak/het overzicht: wees consequent.
Je hebt overigens voor alle variabelen $_POST staan, behalve voor id.
Gewijzigd op 30/04/2013 21:21:56 door Obelix Idefix
Waar haal je $tabelnaam vandaan?
Maar maak ook gebruik van fouten afhandelingen en misschien is ook geheugensteuntjes ook handig in het script, zo verlies je niet het overzicht.
Het kan ook handig zijn om een goede php programma op je computer te hebben die alvast nakijkt terwijl je zit te typen aan het script. Er is een groot aantal programma,s die gratis zijn en toch goed werken, zoek maar is op google.
Hier onder heb ik een voorbeeld gemaakt hoe het beter kan en waar je op moet letten.
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
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
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
<?php
//Dit script komt van php.net , en is verbeterd door stp firespeed
//Dit script verwerkt database gegevens via het mysql_query()functie.
// hieronder staat een fouten afvanger is handig
echo ini_get('display_errors');
if (!ini_get('display_errors')) {
ini_set('display_errors', '1');
}
echo ini_get('display_errors');
}
// This could be supplied by a user, for example
$naam = $_POST['naam'];
$leeftijd = $_POST['leeftijd'];
$woonplaats = $_POST['woonplaats'];
$adres = $_POST['adres'];
$gsm = $_POST['gsm'];
$email = $_POST['email'];
$functie = $_POST['functie'];
$ervaring = $_POST['ervaring'];
$status = $_POST['status'];
$opmerkingen = $_POST['opmerkingen'];
$pagina = $_post['id'];
}
// Formulate Query
// This is the best way to perform an SQL query
// For more examples, see mysql_real_escape_string()
$pagina = $_get['id'];
$query = sprintf ("SELECT leeftijd, woonplaats, adres, gsm, email, functie, ervaring, status, opmerkingen, pagina, FROM friends
WHERE ID firstname='%s' AND lastname='%s' AND lastname='%s' AND lastname='%s' AND lastname='%s'AND lastname='%s 'AND lastname='%s'",
//hier boven moet je nog even meerdere functie,s even aanpassen.
//hier moet je zelf nog even je onderdelen er in zetten,Dit wordt aangeraden .
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
// dit stukje moet je alleen tussen ($ )haakjes veranderen de rest staat al goed laat de ; staan anders sluit hij deze functie niet af en gaat het haperen.
mysql_real_escape_string($ ));
//De laatste )) geeft aan dat het einde van de functie is en dat het verder moet gaan naar een andere functie.
// Perform Query
// hier gaat de database werken.
$result = mysql_query($query);
// Check result
//hier komt eventueel foutmeldingen zo niet dan gaat het script verder.
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
// Use result
// Attempting to print $result won't allow access to information in the resource
// One of the mysql result functions must be used
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.
//hier moet je nog tussen haakjes je eigen funtie,s zetten. Laat ['] staan.
while ($row = mysql_fetch_assoc($result)) {
echo $row['firstname'];
echo $row['lastname'];
echo $row['address'];
echo $row['age'];
echo $row['firstname'];
echo $row['lastname'];
echo $row['address'];
echo $row['age'];
}
// Free the resources associated with the result set
// This is done automatically at the end of the script
// hier komt het bericht dat het gelukt is.
echo'Kandidaat is met succes gewijzigd <a href="kandidaten.php">klik hier</a> om naar het overzicht te gaan <br />';
//laat dits stukje staan het is ervoor het afsluiten
mysql_free_result($result);
?>
//Dit script komt van php.net , en is verbeterd door stp firespeed
//Dit script verwerkt database gegevens via het mysql_query()functie.
// hieronder staat een fouten afvanger is handig
echo ini_get('display_errors');
if (!ini_get('display_errors')) {
ini_set('display_errors', '1');
}
echo ini_get('display_errors');
}
// This could be supplied by a user, for example
$naam = $_POST['naam'];
$leeftijd = $_POST['leeftijd'];
$woonplaats = $_POST['woonplaats'];
$adres = $_POST['adres'];
$gsm = $_POST['gsm'];
$email = $_POST['email'];
$functie = $_POST['functie'];
$ervaring = $_POST['ervaring'];
$status = $_POST['status'];
$opmerkingen = $_POST['opmerkingen'];
$pagina = $_post['id'];
}
// Formulate Query
// This is the best way to perform an SQL query
// For more examples, see mysql_real_escape_string()
$pagina = $_get['id'];
$query = sprintf ("SELECT leeftijd, woonplaats, adres, gsm, email, functie, ervaring, status, opmerkingen, pagina, FROM friends
WHERE ID firstname='%s' AND lastname='%s' AND lastname='%s' AND lastname='%s' AND lastname='%s'AND lastname='%s 'AND lastname='%s'",
//hier boven moet je nog even meerdere functie,s even aanpassen.
//hier moet je zelf nog even je onderdelen er in zetten,Dit wordt aangeraden .
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
mysql_real_escape_string($ ),
// dit stukje moet je alleen tussen ($ )haakjes veranderen de rest staat al goed laat de ; staan anders sluit hij deze functie niet af en gaat het haperen.
mysql_real_escape_string($ ));
//De laatste )) geeft aan dat het einde van de functie is en dat het verder moet gaan naar een andere functie.
// Perform Query
// hier gaat de database werken.
$result = mysql_query($query);
// Check result
//hier komt eventueel foutmeldingen zo niet dan gaat het script verder.
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
// Use result
// Attempting to print $result won't allow access to information in the resource
// One of the mysql result functions must be used
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.
//hier moet je nog tussen haakjes je eigen funtie,s zetten. Laat ['] staan.
while ($row = mysql_fetch_assoc($result)) {
echo $row['firstname'];
echo $row['lastname'];
echo $row['address'];
echo $row['age'];
echo $row['firstname'];
echo $row['lastname'];
echo $row['address'];
echo $row['age'];
}
// Free the resources associated with the result set
// This is done automatically at the end of the script
// hier komt het bericht dat het gelukt is.
echo'Kandidaat is met succes gewijzigd <a href="kandidaten.php">klik hier</a> om naar het overzicht te gaan <br />';
//laat dits stukje staan het is ervoor het afsluiten
mysql_free_result($result);
?>
Gewijzigd op 01/05/2013 01:05:34 door st p
Stp Firespeed op 30/04/2013 22:32:01:
Hier onder heb ik een voorbeeld gemaakt hoe het beter kan en waar je op moet letten.
Hoe het beter kan? Laat me niet lachen.
Overbodig if statement om eerst ini_get te doen en dan pas ini_set, kan je net zo goed direct doen.
Afsluitende haakjes op regels 13 en 27 die niets afsluiten.
Regels 16 t/m 26, ja, lekker onnodig variabelen kopieren. Heel goed voorbeeld.
SQL select statement terwijl de TS een update wilt uitvoeren.
Regel 85, ah, de kandidaat is wel aangepast, waar dan?
Regel 88, mysql_free_result is niet echt nuttig, behalve wanneer je nog php4 gebruikt, wat me sterk lijkt.
@TS Waar je mee moet beginnen is zoals Obelix al aangeeft, je query string eens naar het scherm te sturen. Als je id bijvoorbeeld leeg is dan krijg je alsnog je query wel uitgevoerd, maar worden er geen rijen aangepast.
Na je query zal je dus behalve checken of de query wel is uitgevoerd, ook moeten checken op hoeveel rijen zijn aangepast. Dat kan met mysql-affected-rows. Die functie geeft een integer terug. Is het 0 dan is de query uitgevoerd, maar niets geupdate.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$str = 'UPDATE ....
SET ... = "..."
WHERE ... = ..';
//ter controle
echo $str.'<br>';
$success = mysql_query( $str );
if ( $success ){
$num = mysql_affected_rows();
if ( $num > 0 ){
echo 'Er zijn '.$num.' rijen geupdate.';
} else {
echo 'query uitgevoerd, maar geen rijen geupdate';
}
} else {
echo 'query niet uitgevoerd';
}
?>
$str = 'UPDATE ....
SET ... = "..."
WHERE ... = ..';
//ter controle
echo $str.'<br>';
$success = mysql_query( $str );
if ( $success ){
$num = mysql_affected_rows();
if ( $num > 0 ){
echo 'Er zijn '.$num.' rijen geupdate.';
} else {
echo 'query uitgevoerd, maar geen rijen geupdate';
}
} else {
echo 'query niet uitgevoerd';
}
?>
Gewijzigd op 01/05/2013 09:21:38 door Erwin H
ik heb het door nu :P. nogmaals bedankt voor jullie hulp