UPDATE query met variabelen werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco V

Marco V

11/07/2010 00:37:02
Quote Anchor link
Hallo,

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)
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
<?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();    
}
}

?>
Gewijzigd op 11/07/2010 01:34:26 door Marco V
 
PHP hulp

PHP hulp

20/01/2021 18:37:19
 
Obelix Idefix

Obelix Idefix

11/07/2010 10:27:42
Quote Anchor link
echo $Opdracht eens en kijk of alles dan is zoals je zou verwachten of dat daar iets mist/verkeerd staat.
 
Noppes Homeland

Noppes Homeland

11/07/2010 10:56:12
Quote Anchor link
Er gaat hier al een hoop fout:
-> 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)
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
/*
    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
 
Marco V

Marco V

11/07/2010 11:24:01
Quote Anchor link
Ik de query geprobeerd mét (is niet juist!) en zonder haakjes in de query. Heb ondertussen wel al wat gevonden in het formulier... het veld stond op disabled... dus ben iets verder, maar de query werkt nog niet;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$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;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
UPDATE `LANDEN` SET `LAND` = 'nederland disabled uit' WHERE `LANDEN`.`ID` = 52 AND CONVERT(`LANDEN`.`LAND` USING utf8) = 'nederland' LIMIT 1;
?>
 
Noppes Homeland

Noppes Homeland

11/07/2010 11:36:35
Quote Anchor link
Ja en dat is een query die de volgende fouten bevat:
-> 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.
 
Marco V

Marco V

11/07/2010 12:08:01
Quote Anchor link
owkee check... jullie zijn behulpzaam, ik kom nu dit tegen als resultaat (ERROR):
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)
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
<?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);
}
?>
Gewijzigd op 11/07/2010 12:08:40 door Marco V
 
Noppes Homeland

Noppes Homeland

11/07/2010 12:10:42
Quote Anchor link
Ja, dat krijg je ervan als je pseudo code blindelings copieert en plakt.

Je moet bij mysql_connect en mysql_select_db de juiste parameters meegeven
 
Marco V

Marco V

11/07/2010 12:34:56
Quote Anchor link
Daar had ik even overheen gekeken... ben al een dag aan het prudsen geweest, dus bomen en bos zeg maar :-)

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)
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
<?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);
?>
 
Noppes Homeland

Noppes Homeland

11/07/2010 12:40:40
Quote Anchor link
regel 3 heeft daar niets te zoeken!!
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
 
Marco V

Marco V

11/07/2010 12:47:00
Quote Anchor link
dat is het bizarre... ik krijg geen mysql_error() meer, alleen de tekst:
"er is geen database geselecteerd"

Heb hierbij de quotes in regel 6 verwijderd en regel 3 afgeremd;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
   }

?>


completely lost :-)
 
Noppes Homeland

Noppes Homeland

11/07/2010 12:52:29
Quote Anchor link
`completely lost`
Houden zo...

Wat denk je dat je nu moet gaan doen?
 
Marco V

Marco V

11/07/2010 12:56:38
Quote Anchor link
ik heb al wel iets gevonden... de waarde van $Verbinding lijkt onjuist, de code heb ik aldus aangepast, maar een kleine hint is welkom:

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)
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
<?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);
?>
Gewijzigd op 11/07/2010 13:02:20 door Marco V
 
Noppes Homeland

Noppes Homeland

11/07/2010 13:12:35
Quote Anchor link
"Ja, dat krijg je ervan als je pseudo code blindelings copieert en plakt."

Ja, en kijk nu nogeens van wat je ervan gemaakt hebt. Je hebt een } op de verkeerde plek staan.
 
Marco V

Marco V

11/07/2010 13:34:37
Quote Anchor link
stom stom... je bent een held, het werkt! Dank voor je hulp!
 
- SanThe -

- SanThe -

11/07/2010 14:07:06
Quote Anchor link
De tekst op regel 12 is onjuist. Moet zijn: Geen connectie.
 



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.