Avatar billede KurtG Forsker
26. november 2019 - 11:19 Der er 11 kommentarer og
1 løsning

UPDATE virker ikke.

Jeg har en mysql databasetabel medlemmer2, med et felt, der hedder M_kort_sendt og har datatypen TINYINT.
Den kan jeg ikke få til at ændre værdi med UPDATE.

Koden er:
$sql = "UPDATE ".$tabel." SET M_kort_sendt = 1 WHERE $tabel.id = ".$box." LIMIT 1 ";
echo "sql: ".$sql."<br>";
if (mysqli_query($forbindelsen, $sql))
{
    echo "Posten updateret<br>";
}
else
{
    echo "Fejl ved upload af data: " . mysqli_error($forbindelsen)."<br>";
}       

Det resulterer i følgende på skærmen:
sql: UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159 LIMIT 1
Posten updateret

Men der er ikke ændret i feltet.

Jeg har prøvet med andre felter, stadig uden resultat. Ligeledes har jeg prøvet med andre datatyper uden positivt resultat.
For at tjekke har jeg prøvet med forkerte feltnavne og det giver fejlmeldinger.

Har nogen en anelse om, hvad jeg gør galt?
Avatar billede ejvindh Ekspert
26. november 2019 - 12:23 #1
Jeg er ikke sikker på, at det er fejlen, men jeg undrer mig lidt over din "LIMIT 1". Har du flere medlemmer med samme id? Og hvis ja, hvordan sikrer du dig så, at det er det rigtige medlem, der får ændret status?
Avatar billede KurtG Forsker
26. november 2019 - 13:19 #2
Nej, der er ikke flere medlemmer med samme id!
LIMIT 1 er noget, som blev anbefalet i det hæfte, hvor jeg første gang lærte om databaser. Og det skulle ikke skade bortset fra de mikrosekunder det tager ekstra.
Men jeg er kommet til at tænke på, at der engang var noget med, at man skulle opdatere alle felter for at det lykkedes. Har det været en betingelse engang?
Avatar billede ejvindh Ekspert
26. november 2019 - 13:29 #3
Jeg tror ikke helt jeg forstår dit tillægsspørgsmål her: "at man skulle opdatere alle felter for at det lykkedes"
Avatar billede tvilling53 Seniormester
26. november 2019 - 14:16 #4
Prøv at udskifte  ".$tabel."  med tabelnavnet og ".$box". med en fast værdi for at se om der mangler nogle tegn rundt om variablerne.
Ellers prøv med et kopi af dette:
Function opdater_via_id($mysqli,$tabel_navn,$kol1,$var1,$id,$var2) {
  if($stmt=$mysqli->prepare('UPDATE `'.$tabel_navn.'`SET `'.$kol1.'`=?
  WHERE`'.$id.'`=? '))
        {$stmt->bind_param('si',$var1,$var2);
        if($stmt->execute())
            {//echo '<br>STMT close i OPDATER_VIA_ID i '.$tabel_navn .'<br>';
            $stmt->close();}
            else
            { //echo '<br>STMT dør i OPDATER_VIA_ID i '.$tabel_navn .'<br>';
              die($stmt->error);}
        }
        else
        {
        echo '<br>MYSQL dør i OPDATER_VIA_ID i '.$tabel_navn .'<br>';die($mysqli-
            >error);
        }//$stmt->close();
   
    } //Funktion slut
Avatar billede arne_v Ekspert
26. november 2019 - 15:11 #5
Altsaa:

UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159

aendrer ikke noget.

Hvad giver:

SELECT * FROM medlemmer2 WHERE medlemmer2.id = 159

?
Avatar billede KurtG Forsker
27. november 2019 - 00:10 #6
ejvindh:
At man skal opdatere alle felter, der er defineret i tabellen.
Hvis der var defineret tre felter ( felt1, felt2 og felt3 ), så skulle man skrive
$sql = "UPDATE ".$tabel." SET felt1 = 1, felt2 = 2, felt3 = 3 WHERE $tabel.id = ".$box." LIMIT 1 ";

tvilling53:
Jeg har prøvet med faste værdier, det ændrer ikke noget. Dit forslag venter jeg lige lidt med, da jeg ikke kan gennemskue det!

arne_v:
UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159 gør ingen forskel.
Hvordan skal jeg helt nøjagtigt bruge
SELECT * FROM medlemmer2 WHERE medlemmer2.id = 159
Avatar billede arne_v Ekspert
27. november 2019 - 00:24 #7
Udfoere den for at se om den finder nogle raekker.
Avatar billede tvilling53 Seniormester
27. november 2019 - 02:47 #8
Så har jeg et forslag, gå ind på nemprogrammering.dk, klik på kurser og så klik på MySQLi, det er der jeg har lært basic.
Avatar billede ejvindh Ekspert
27. november 2019 - 10:46 #9
@KurtG: Ok, så forstår jeg bedre. Men nej, det tror jeg altså ikke har været krævet. Men grundlæggende tror jeg nok jeg går mere ind for ikke at skulle have brug for LIMIT-vedhæftningen, da jeg forestiller mig, at det netop kan give uforudsigelige resultater. Hvis der f.eks. skulle være mere end én række, der har ID 159, så kan det jo være, at din UPDATE faktisk gør som den skal, og du bare tjekker på den forkerte. Derfor er jeg også lidt spændt på, hvilket resultat arne_v's SELECT giver.
Avatar billede KurtG Forsker
27. november 2019 - 16:46 #10
Jeg har dummet mig rigtig meget.
Jeg skulle ikke bruge 'id' men i stedet medelemsnummeret, som ligger i 'Nr'.
Jeg vil gerne give en stor undskyldning til jer, der har forsøgt at hjælpe mig.
Mvh Kurt
Avatar billede ejvindh Ekspert
27. november 2019 - 17:15 #11
Som regel når en tilsyneladende perfekt kode ikke virker, skyldes det, at man har dummet sig. ;)

Så det er en klassiker - ingen problemer herfra i hvert fald.
Avatar billede arne_v Ekspert
28. november 2019 - 17:27 #12
Der er ikke noget usædvaneligt i at der er lavet en fejl.

Der er en gammel vittighed som oversat til dansk må lyde: Hvis fejlfinding af kode er at fjerne fejlene fra koden, så må det at skrive koden jo være at putte fejlene i koden.

:-)

Det man kan lære er processen.

Hvis:

$sql = "UPDATE ".$tabel." SET M_kort_sendt = 1 WHERE $tabel.id = ".$box." LIMIT 1 ";

ikke opdaterer noget, så prøver man uden variable og uden LIMIT:

UPDATE medlemmer2 SET M_kort_sendt = 1 WHERE medlemmer2.id = 159

hvis den heller ikke opdaterer så prøver man om en SELECT finder noget:

SELECT * FROM medlemmer2 WHERE medlemmer2.id = 159

hvis den ikke finder noget så checker man uden WHERE:

SELECT * FROM medlemmer2
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester