UPDATE query met variabelen werkt niet
Ik worstel met het volgende...
Ik heb een formulier, verstuur via post naar dezelfde pagina
- een hidden field $veldnaam met de waarde "ADD" zorgt ervoor dat er een include wordt geladen waarin de INSERT query staat en dus wordt uitgevoerd
- de pagina wordt weer vertoond, het hidden field $veldnaam wordt veranderd in "UPDATE" zodat bij een nieuwe post een andere query kan worden aangeroepen
- in het formulier vermeld ik nu de zojuist ingevoerde (en aan database toegevoegde) waarden als value
So far so good, e.e.a. staat nu in de database
Het formulier, of liever gezegd de input velden, bevatten de juiste waarde
Nu het probleem:
Ik wil de waarden kunnen muteren en bijwerken in de database met een UPDATE query, deze roep ik op dezelfde wijze aan als de INSERT query.
Hier heb ik waarschijnlijk een voutje gemaakt, want er wordt niets bijgewerkt, maar ik krijg de foutmelding; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1 Landentabel - Kon niet worden bijgewerkt in de database
Verder wordt het formulier weer weergegven, echter ontbreekt nu de waarde $LANDEN[ID]
De vraag is dus... wat gaat hier mis, het lijkt erop dat het fout gaat in de UPDATE query!? Maar de waarden in de velden van het formulier kunnen hierdoor toch niet verloren gaan?
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
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
<?php
/* ---------------------------------------- LANDEN WIJZIGEN ---------------------------------------- */
if ($LANDENTABEL == "LANDUPDATE") {
// hier bepalen we naar welke tabel we gaan schrijven
$TabelNaam = "LANDEN";
mysql_select_db("$DBNaam") or die ("Er kan geen verbinding gemaakt worden met de database.");
// hier de formuleren we de $Opdracht en geven we de variabelen die we willen bijwerken
$Opdracht = "UPDATE $TabelNaam SET LAND='$LANDEN[LAND]', KORT='$LANDEN[KORT]', ISO='$LANDEN[ISO]' WHERE ID='( $LANDEN[ID] )'";
$query = mysql_query( $Opdracht ) or die( mysql_error() );
// hier doen we de controle of de opdracht is geslaagd en vullen we $MESSAGE met het resultaat
if (mysql_db_query ($DBNaam, $query, $Verbinding) ) {
$Message = "Landentabel - land is bijgewerkt";
$ReturnStatus = "LANDUPDATE";
} else {
// de variabelen voor het formulier waarin we terugkeren als opdracht NIET succesvol is
$ReturnStatus = "LANDUPDATE";
$Message = "Landentabel - Kon niet worden bijgewerkt in de database";
echo mysql_error();
}
}
?>
/* ---------------------------------------- LANDEN WIJZIGEN ---------------------------------------- */
if ($LANDENTABEL == "LANDUPDATE") {
// hier bepalen we naar welke tabel we gaan schrijven
$TabelNaam = "LANDEN";
mysql_select_db("$DBNaam") or die ("Er kan geen verbinding gemaakt worden met de database.");
// hier de formuleren we de $Opdracht en geven we de variabelen die we willen bijwerken
$Opdracht = "UPDATE $TabelNaam SET LAND='$LANDEN[LAND]', KORT='$LANDEN[KORT]', ISO='$LANDEN[ISO]' WHERE ID='( $LANDEN[ID] )'";
$query = mysql_query( $Opdracht ) or die( mysql_error() );
// hier doen we de controle of de opdracht is geslaagd en vullen we $MESSAGE met het resultaat
if (mysql_db_query ($DBNaam, $query, $Verbinding) ) {
$Message = "Landentabel - land is bijgewerkt";
$ReturnStatus = "LANDUPDATE";
} else {
// de variabelen voor het formulier waarin we terugkeren als opdracht NIET succesvol is
$ReturnStatus = "LANDUPDATE";
$Message = "Landentabel - Kon niet worden bijgewerkt in de database";
echo mysql_error();
}
}
?>
Gewijzigd op 11/07/2010 01:34:26 door Marco V
echo $Opdracht eens en kijk of alles dan is zoals je zou verwachten of dat daar iets mist/verkeerd staat.
-> je moet geen variabelen gebruiken bij:
+ voor tabellen
-> or die() is kerkhoftaktie, je wilt niet dat je script stopt als een query mislukt. Als een query mislukt dan dien je een alternatief te hebben zodat de code die volgt op gewenste manier wordt uitgevoerd.
-> mysql_db_query is DEPRECATED
-> geef variabelen een correcte naam, mysql_query geeft geen query terug maar een resource / result
-> php variabelen buiten quites!!
-> SQL injectie
-> maak ook geen overbodige variabelen aan
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
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
/*
hier maak je je database connectie
en selecteer je de database
*/
if ($link = mysql_connect()) {
if (!(mysql_select_db()) {
// geen database geselecteerd
}
}
else {
// geen database connectie
}
if ($link) {
$sql = "UPDATE landen
SET land = '".mysql_real_escape_string($LANDEN['LAND'])."'
, kort = '".mysql_real_escape_string($LANDEN['KORT'])."'
, iso = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE id = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
}
}
?>
/*
hier maak je je database connectie
en selecteer je de database
*/
if ($link = mysql_connect()) {
if (!(mysql_select_db()) {
// geen database geselecteerd
}
}
else {
// geen database connectie
}
if ($link) {
$sql = "UPDATE landen
SET land = '".mysql_real_escape_string($LANDEN['LAND'])."'
, kort = '".mysql_real_escape_string($LANDEN['KORT'])."'
, iso = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE id = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
}
}
?>
Gewijzigd op 11/07/2010 13:08:54 door Noppes Homeland
Code (php)
1
2
3
2
3
<?php
$Opdracht = "UPDATE $TabelNaam SET LAND='$LANDEN[LAND]', KORT='$LANDEN[KORT]', ISO='$LANDEN[ISO]' WHERE ID='$LANDEN[ID]'";
?>
$Opdracht = "UPDATE $TabelNaam SET LAND='$LANDEN[LAND]', KORT='$LANDEN[KORT]', ISO='$LANDEN[ISO]' WHERE ID='$LANDEN[ID]'";
?>
echo mysql_error() geeft de volgende melding;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
echo $Opdracht geeft het volgende resultaat;
UPDATE LANDEN SET LAND='Nederland-disabled uit', KORT='NLD', ISO='ISO' WHERE ID='56'
als ik het via phpmyadmin corrigeer in de database dan maakt hij zelf deze query;
-> backtics horen niet thuis in sql
-> limit 1 hoort niet thuis bij update
Gooi je code nu eens in de prullenbak en begin opnieuw. Want er gebeuren zaken waar je geen weet van hebt.
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'login'@'server' (using password: NO) in Landentabel-verwerk.php on line 59
Mijn huidige code:
- heb de tabelnamen uppercase gemaakt (dat zijn ze ook in de DB)
- mysql_close ($Verbinding); geeft een error?? (dus afgeremd)
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
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
<?php
if ($LANDENTABEL == "LANDUPDATE") {
// Maak verbinding met de database
require ("dbconnect.php");
/* Deze include bevat:
$Host = "localhost";
$Gebruiker = "loginnaam";
$Wachtwoord = "mijnwachtwoord";
$DBNaam = "databasenaam";
$Verbinding = mysql_connect ($Host, $Gebruiker, $Wachtwoord);
*/
// hier bepalen we naar welke tabel we gaan schrijven
$TabelNaam = "LANDEN";
// hier maak je je database connectie en selecteer je de database
mysql_select_db("$DBNaam");
if ($Verbinding = mysql_connect()) {
if (!(mysql_select_db())) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
else {
// geen database connectie
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
if ($Verbinding) {
$sql = "UPDATE LANDEN
SET LAND = '".mysql_real_escape_string($LANDEN['LAND'])."'
, KORT = '".mysql_real_escape_string($LANDEN['KORT'])."'
, ISO = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE ID = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
echo "er gaat iets mis met de query";
}
}
}
//mysql_close ($Verbinding);
}
?>
if ($LANDENTABEL == "LANDUPDATE") {
// Maak verbinding met de database
require ("dbconnect.php");
/* Deze include bevat:
$Host = "localhost";
$Gebruiker = "loginnaam";
$Wachtwoord = "mijnwachtwoord";
$DBNaam = "databasenaam";
$Verbinding = mysql_connect ($Host, $Gebruiker, $Wachtwoord);
*/
// hier bepalen we naar welke tabel we gaan schrijven
$TabelNaam = "LANDEN";
// hier maak je je database connectie en selecteer je de database
mysql_select_db("$DBNaam");
if ($Verbinding = mysql_connect()) {
if (!(mysql_select_db())) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
else {
// geen database connectie
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
if ($Verbinding) {
$sql = "UPDATE LANDEN
SET LAND = '".mysql_real_escape_string($LANDEN['LAND'])."'
, KORT = '".mysql_real_escape_string($LANDEN['KORT'])."'
, ISO = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE ID = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
echo "er gaat iets mis met de query";
}
}
}
//mysql_close ($Verbinding);
}
?>
Gewijzigd op 11/07/2010 12:08:40 door Marco V
Je moet bij mysql_connect en mysql_select_db de juiste parameters meegeven
Nu nog het volgende... ik heb vast nog iets over het hoofd gezien?
De melding die ik krijg is: "er is geen database geselecteerd"
Het lijkt me dat er iets mis gaat bij: mysql_select_db("$DBNaam");
Of moet de database worden vermeld bij $sql = UPDATE query?
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
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
<?php
// hier maak je je database connectie en selecteer je de database
mysql_select_db("$DBNaam");
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db("$DBNaam"))) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
else {
// geen database connectie
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
if ($Verbinding) {
$sql = "UPDATE LANDEN
SET LAND = '".mysql_real_escape_string($LANDEN['LAND'])."'
, KORT = '".mysql_real_escape_string($LANDEN['KORT'])."'
, ISO = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE ID = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
echo "er gaat iets mis met de query";
}
}
}
mysql_close ($Verbinding);
?>
// hier maak je je database connectie en selecteer je de database
mysql_select_db("$DBNaam");
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db("$DBNaam"))) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
else {
// geen database connectie
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
if ($Verbinding) {
$sql = "UPDATE LANDEN
SET LAND = '".mysql_real_escape_string($LANDEN['LAND'])."'
, KORT = '".mysql_real_escape_string($LANDEN['KORT'])."'
, ISO = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE ID = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
echo "er gaat iets mis met de query";
}
}
}
mysql_close ($Verbinding);
?>
en op regel 6 moet je de PHP variabele niet quouten
maar ja dat zijn allemaal zaken die je zelf ook kunt aflezen uit de foutmelding die je krijgt.
Gewijzigd op 11/07/2010 12:41:14 door Noppes Homeland
"er is geen database geselecteerd"
Heb hierbij de quotes in regel 6 verwijderd en regel 3 afgeremd;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// hier maak je je database connectie en selecteer je de database
//mysql_select_db("$DBNaam");
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db($DBNaam))) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
?>
// hier maak je je database connectie en selecteer je de database
//mysql_select_db("$DBNaam");
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db($DBNaam))) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
}
?>
completely lost :-)
Houden zo...
Wat denk je dat je nu moet gaan doen?
Het resultaat dat ik nu krijg bevat geen mysql_error(), maar vermeld het volgende;
er is geen verbinding met de database (de foutmelding indien geen verbinding)
Resource id #4 (dus de waarde van $Verbinding)
Het vreemde is wel dat dit bij een INSERT query niet tot problemen lijdt, kortom ik heb het idee dat de waarde van $Verbinding zou moeten werken, maar waarom niet in de UPDATE query?
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
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
<?php
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db($DBNaam))) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
echo $DBNaam;
}
else {
// geen database connectie
echo mysql_error();
echo "<br> er is geen verbinding met de database <br>";
echo $Verbinding;
}
if ($Verbinding) {
$sql = "UPDATE LANDEN
SET LAND = '".mysql_real_escape_string($LANDEN['LAND'])."'
, KORT = '".mysql_real_escape_string($LANDEN['KORT'])."'
, ISO = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE ID = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
echo "er gaat iets mis met de query";
}
}
}
mysql_close ($Verbinding);
?>
if ($Verbinding = mysql_connect($Host, $Gebruiker, $Wachtwoord)) {
if (!(mysql_select_db($DBNaam))) {
// geen database geselecteerd
echo mysql_error();
echo "<br> er is geen database geselecteerd <br>";
echo $DBNaam;
}
else {
// geen database connectie
echo mysql_error();
echo "<br> er is geen verbinding met de database <br>";
echo $Verbinding;
}
if ($Verbinding) {
$sql = "UPDATE LANDEN
SET LAND = '".mysql_real_escape_string($LANDEN['LAND'])."'
, KORT = '".mysql_real_escape_string($LANDEN['KORT'])."'
, ISO = '".mysql_real_escape_string($LANDEN['ISO'])."'
WHERE ID = '".mysql_real_escape_string($LANDEN['ID'])."'";
if (($result = mysql_query($sql)) === false) {
echo mysql_error();
echo "er gaat iets mis met de query";
}
}
}
mysql_close ($Verbinding);
?>
Gewijzigd op 11/07/2010 13:02:20 door Marco V
Ja, en kijk nu nogeens van wat je ervan gemaakt hebt. Je hebt een } op de verkeerde plek staan.
stom stom... je bent een held, het werkt! Dank voor je hulp!
De tekst op regel 12 is onjuist. Moet zijn: Geen connectie.