rubaek Mester
31. marts 2020 - 12:05 Der er 10 kommentarer og
1 løsning

Update hvad gør jeg galt?

Jeg vil gerne updatere min tabel, men det driller helt vild. Hvordan skal dette gøres ??

Jeg har forsøgt med dette script, men får dette fejl

Error updating record: Unknown column '$a' in 'field list'

Script:
<?php
include('../includes/connection.php');

// You should call this first
    session_start();
// Initialize the session value
    $_SESSION['ELEV_ID'] = $_POST["ELEV_ID"];
    $_SESSION['F_NAME'] = $_POST["F_NAME"];
    $_SESSION['L_NAME'] = $_POST["L_NAME"];
$a=$_POST["F_NAME"];
$b=$_POST["L_NAME"];


$sql = 'UPDATE elevnavn SET F_NAME=$a, L_NAME=$b WHERE ELEV_ID=1';


if (mysqli_query($db, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($db);
}

mysqli_close($db);
?>
Jens U. Novice
31. marts 2020 - 12:23 #1
Din $sql-streng bliver ikke interpoleret når den starter og slutter med enkelte anførselstegn - her skal du bruge dobbelte anførselstegn, så du sender $a direkte til databasen. Prøv at omskrive til:

$sql = "UPDATE elevnavn SET F_NAME='$a', L_NAME='$b' WHERE ELEV_ID=1";

Skal koden i produktion, mangler der noget sikring mod SQL-injection..
arne_v Ekspert
31. marts 2020 - 14:26 #2
Det var nok endnu bedre at bruge prepared statement.
rubaek Mester
31. marts 2020 - 14:26 #3
Nu skriver den i databasen, fedt. Du kunne vel ikke hjælpe med et script så alle data bliver overskrevet og ikke kun sidste line.

Mit script som det ser ud nu (med en del forsøgs ting, der selvfølgelig skal væk)
<?php
include('../includes/connection.php');

// You should call this first
    session_start();
// Initialize the session value
    $_SESSION['ELEV_ID'] = $_POST["ELEV_ID"];
    $_SESSION['F_NAME'] = $_POST["F_NAME"];
    $_SESSION['L_NAME'] = $_POST["L_NAME"];
$a=$_SESSION['F_NAME'];
$b=$_SESSION['L_NAME'];
$id=$_SESSION['ELEV_ID'];
echo $a;
echo $b;
echo $id;

$sql = "UPDATE elevnavn SET F_NAME='$a', L_NAME='$b' WHERE ELEV_ID='$id'";


if (mysqli_query($db, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($db);
}

mysqli_close($db);
?>
olsensweb.dk Ekspert
31. marts 2020 - 14:47 #4
#2
>Det var nok endnu bedre at bruge prepared statement.
meget bedre, men hvorfor ikke komme med et link
https://www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf
http://www.vajhoej.dk/arne/articles/prepparam.html


#3
>og ikke kun sidste line.
det må du lige forklare, der bliver opdateret den/de linjer der har ELEV_ID der står i $id

hvad bruger du  $_SESSION til ??
du kunne jo være det var admin der opdaterede db
rubaek Mester
31. marts 2020 - 16:12 #5
Jeg er helt på dybt vand her.
Tanken er at det er en lærer der indskriver nogle prøveresultater, som så sendes til databasen og her retter de data der er nye.
Giver det mening?

-  og ikke kun sidste line.
Når jeg kører det script jeg har her, er det som om den kører alle rækker i gennem og kun retter den sidste linie i min tabel, det er som om, den ikke gør følgende:
Elev 1  - ret det der er forandret
Elev 2 - ret det der er forandret osv.

Det virker til at der mangler en løkke ?
rubaek Mester
31. marts 2020 - 16:31 #6
Har prøvet dette ud fra beskrivelsen, men den fejler:

Fatal error: Uncaught Error: Call to a member function prepare() on null in /var/www/gmonskole.dk/public_html/tk/pages/update_prover1.php:5 Stack trace: #0 {main} thrown in /var/www/gmonskole.dk/public_html/tk/pages/update_prover1.php on line 5
<?php
include('../includes/connection.php');

/* Opret et prepared statement */
if ($stmt = $mysqli->prepare('UPDATE `elevnavn` SET `F_NAVN`=$f_navn WHERE `id`=$id')) {
/* Bind parametre */
$stmt->bind_param('si', $f_navn, $id);
/* St vrdier p parametrene */
$f_navn = $_POST['F_NAME'];
$id = $_POST['ELEV_ID'];
/* Eksekver foresprgslen */
$stmt->execute();
/* Luk statement */
$stmt->close();
} else {
/* Der er opstet en fejl */
echo 'Der opstod en fejl i erklringen: ' . $mysqli->error;
}

mysqli_close($db);
?>
rubaek Mester
31. marts 2020 - 17:00 #7
Nu har jeg rette lidt og nu kører den igennem, men uden at rette noget.

<?php
include('../includes/connection.php');

/* Opret et prepared statement */
if ($stmt = $db->prepare('UPDATE `elevnavn` SET `F_NAVN`=? WHERE `id`=?')) {
/* Bind parametre */
$stmt->bind_param('si', $f_navn, $id);
/* St vrdier p parametrene */
$f_navn = $_POST['F_NAME'];
$id = $_POST['ELEV_ID'];
/* Eksekver foresprgslen */
$stmt->execute();
/* Luk statement */
$stmt->close();
} else {
/* Der er opstet en fejl */
echo 'Der opstod en fejl i erklringen: ' . $mysqli->error;
}

mysqli_close($db);
?>
olsensweb.dk Ekspert
31. marts 2020 - 18:28 #8
hedder din connection ikke $db ??
echo 'Der opstod en fejl i erklringen: ' . $mysqli->error;
skal vel være
echo 'Der opstod en fejl i erklringen: ' . $db->error;


har du ændret dine felt navne iforhold til tidligere vist i #3
rubaek Mester
31. marts 2020 - 19:54 #9
Den havde jeg overset. Nu fejler scriptet ikke længere, med den opdatere kun den sidste række i min tabel selv om jeg retter aller steder?
rubaek Mester
31. marts 2020 - 20:32 #10
Som forstår det kører den en løkke af sig selv, med det ser ikke ud til at det sker?
rubaek Mester
31. marts 2020 - 21:07 #11
Jeg lukker denne tråd, og oprette et spørgsmål om løkken i et andet spørgsmål.
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

Opret Preview

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





Premium
Test: Apples nye iPhone er bygget til fart og stil: Så gode er iPhone 12 og iPhone 12 Pro
Computerworld tester: IPhone 12 og iPhone 12 Pro er bygget til fart og til at se godt ud. Varen leveres stilsikkert, men noget er overset i farten.
Computerworld
Salling Group lukker stor online-satsning efter kun et år
Millionsatsningen Fillop lukker ved årets udgang. I stedet er supermarkeds-giganten Salling Group nu på vej med en række helt nye online-satsninger, der er affødt af coronakrisen.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
Job & Karriere
Regner din ferie væk? Brug tiden på at søge en af disse otte stillinger, der er ledige netop nu
Det sjasker ned over hele Danmark. Du kan bruge de våde sommerdage på at søge et af disse otte job, der er ledige lige nu.
White paper
Sådan outsourcer du effektivt – og undgår fælderne
Nogle outsourcer for at minimere omkostningsniveauet, andre for at skaffe ressourcer og spidskompetencer, der er svære at skaffe lokalt – eller af en helt tredje årsag. Der er dog talrige forhold, der er gode at afdække, før man overhovedet begynder at lede en outsourcingudbyder. Man skal klarlægge egne projektbehov samt de spørgsmål og krav, man vil stille samt indsamle viden og erfaringer om, hvordan samarbejdet indledes, drives og styres optimalt. Dertil skal man kende til de hyppigste faldgruber, der kan få et ellers lovende outsourcingsamarbejde til at køre i grøften.