Avatar billede Calle5463 Forsker
07. oktober 2016 - 09:58 Der er 22 kommentarer og
1 løsning

Er ordet "item" reserveret i PHP

Er ordet "item" reserveret i mysql/PHP, så det ikke kan anvendes som feltnavn, uden det "lever sit eget liv"?

Klart, jeg skal have set koden igennem igen, men det har jeg nu gjort 24 gange .....
Jeg har et lidt sjovt fænomen. Når jeg via en formular indsætter (input type=text) "Plads nr 3" i et felt der i min mysql-db hedder "item", varchar(50), så indsættes hele strengen, men formulren viser kun "Plads". Trykker jeg på "Ret" i formularen, så rette et til "Plads" i tabellen. Det jo det der står i formularen.
Der er ingen formatering af feltet i formularen.
Avatar billede michael_stim Ekspert
07. oktober 2016 - 10:21 #2
Lyder mere som du har glemt " et eller andet sted.
Avatar billede Calle5463 Forsker
07. oktober 2016 - 10:21 #3
Hmm, ikke såvidt jeg kan se

Har lige prøvet med varchar(50) i tabellen, og ændret input til textarea - så viser den hele indholdet.
Avatar billede Calle5463 Forsker
07. oktober 2016 - 10:31 #4
Det kan vel ikke skyldes noget rod med, at alle mine tabeller er utf8_unicode_ci (det burde vel ikke have noget med hinanden at gøre?)

Når jeg indsætter "æøå ÆØÅ" via min formular, bliver det til "æøå Ã?Ã?Ã?" i tabellen

Når jeg gør det omvendt bliver det til " ??? ??? " i formularen.
Avatar billede Calle5463 Forsker
07. oktober 2016 - 10:33 #5
#3, Michael, det kunne nemt være - jeg har nemlig ikke helt styr på de der pinger - pinger ikke :-)
Avatar billede Calle5463 Forsker
07. oktober 2016 - 10:42 #6
Fx:

function rediger_record($sql, $ID, $ny_hverv, $ny_beskrivelse, $ny_sortering) {
    $ret = "UPDATE fvf2_cer_tillidshverv
                  SET tillidshverv='$ny_hverv',
                          beskrivelse='$ny_beskrivelse',
                          sortering=$ny_sortering
                  WHERE fvf2_cer_tillidshverv.ID=$ID";
..............
..............
}


- og -


function rediger_record($sql, $ID, $ny_item_nr, $ny_item_name, $ny_item_beskrivelse) {
    $ret = "UPDATE fvf2_cer_item
                  SET item_nr='$ny_item_nr',
                          item_name='$ny_item_name',
                          item_beskrivelse='$ny_item_beskrivelse'
                  WHERE fvf2_cer_item.ID=$ID";

.........
.........
}
Avatar billede olsensweb.dk Ekspert
07. oktober 2016 - 10:46 #7
#5
har du prøvet at slå syntax highlighte til i din editor ??
jeg bruger selv editorene
notepad++
NetBeans
Avatar billede Calle5463 Forsker
07. oktober 2016 - 11:30 #8
#7, olsen

jeg har skrevet koden direkte i et plugin "PHP Code For Posts", og jeg har indimellem det mistænkt for at "leve sit eget liv" en gang imellem. Skal jeg lige prøve at tage det over i NP++ (det er den jeg har)?
Avatar billede Calle5463 Forsker
07. oktober 2016 - 11:35 #9
#7, olsen

min NP++ står til kodning i UTF8 uden BOM, og uden jeg har gjort andet end copy/paste, så bliver det stillet rigtigt pænt g overskueligt op (så langt, så godt)

kan jeg bede NP++ tjekke min kode?
Avatar billede Calle5463 Forsker
07. oktober 2016 - 11:40 #10
der er et par indstillinger for pluginnet: + = on, - = off


- Remove all options and tables on uninstall
+ Parse inline plugin shortcode tags inside post content (HTML Editor Only)
+ Parse inline plugin shortcode tags inside sidebar text widgets
+ Enable Codemirror's rich editor for code snippets
- Extract shortcode params to their own variables *
+ Use Ajax to save snippets


Det der Ajax??
Avatar billede olsensweb.dk Ekspert
07. oktober 2016 - 11:46 #11
#9
>min NP++ står til kodning i UTF8 uden BOM
skal det også være

>kan jeg bede NP++ tjekke min kode?
den syntax highlighter automatisk baseret på fil endelse



du kan jo prøve at udskrive din $ret (sql), og se om det ser ud som du forvendter

<?php
function rediger_record_0($sql, $ID, $ny_hverv, $ny_beskrivelse, $ny_sortering) {
    $ret = "UPDATE fvf2_cer_tillidshverv SET tillidshverv='".$ny_hverv."', beskrivelse='".$ny_beskrivelse."', sortering=".$ny_sortering." WHERE fvf2_cer_tillidshverv.ID=".$ID;
    echo $ret;    
   
}

function rediger_record_1($sql, $ID, $ny_item_nr, $ny_item_name, $ny_item_beskrivelse) {
    $ret = "UPDATE fvf2_cer_item SET item_nr='$ny_item_nr', item_name='$ny_item_name', item_beskrivelse='$ny_item_beskrivelse'  WHERE fvf2_cer_item.ID=$ID";
    echo $ret;
}


// med Prepare Statement, så slipper du for alt det plinger "lort", og får størrer sikkerhed :)
function rediger_record_2($sql, $ID, $ny_item_nr, $ny_item_name, $ny_item_beskrivelse) {
    $ret = "UPDATE fvf2_cer_item SET item_nr=?, item_name=?, item_beskrivelse=? WHERE fvf2_cer_item.ID=?";
    echo "her skal du så binde parameterne\n";   
    echo $ret;
}


$mysqli =""; // dummy connection
rediger_record_0($mysqli, 42, "mit erhverv", "gider ikke beskrive denne item æøå, lidt dannske bogstaver", 1);
echo "\n\n";
rediger_record_1($mysqli, 42, 3, "test item", "gider ikke beskrive denne item æøå, lidt dannske bogstaver");
echo "\n\n";
rediger_record_2($mysqli, 42, 3, "test item", "gider ikke beskrive denne item æøå, lidt dannske bogstaver");
?>

der er iøvrigt et spøjst navn du har valgt til din connection ($sql) inde i dine functioner, samt navnet til din sql string




citat fra OleBoles Guide "Prepared Statements under MySQLI - kom igang"
Eksempel på UPDATE fra form med method="post":

/* Opret et prepared statement */
if ($stmt = $mysqli->prepare('UPDATE `tabel` SET `fornavn`=? WHERE `id`=?')) {
/* Bind parametre */
$stmt->bind_param('si', $fornavn, $id);
/* Sæt værdier på parametrene */
$fornavn = $_POST['fornavn'];
$id = $_POST['id'];
/* Eksekver forespørgslen */
$stmt->execute();
/* Luk statement */
$stmt->close();
} else {
/* Der er opstået en fejl */
echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
}



da du har lagt det ind i en function, ville du ikke bruge POST direkte inde i functionen med bare variablerne
Avatar billede Calle5463 Forsker
07. oktober 2016 - 12:18 #12
echo $ny:

INSERT INTO fvf2_cer_tillidshverv (tillidshverv, beskrivelse, sortering)
VALUES ('Hverv nr 99 æøå ÆØÅ', 'Dette er beskrivelse af nr 99 æøå ÆØÅ', '99')

echo $ret:
UPDATE fvf2_cer_tillidshverv
SET tillidshverv='Rettet: Hverv nr 98 æøå ÆØÅ',
beskrivelse='Rettet: Dette er beskrivelse af nr 98 æøå ÆØÅ',
sortering='98'

WHERE fvf2_cer_tillidshverv.ID=29
Avatar billede olsensweb.dk Ekspert
07. oktober 2016 - 12:59 #13
#12
umildbart ser de rigtige ud:
din insert burde virke, ellers må du se hvilke fejl du får når du afvikler den

din update, burde virke, dog kan jeg ikke huske med : i Rettet:, om det skal escapes
du kan prøve at pakke feltet ind i mysqli_real_escape_string (bør du nok gører under alle omstændigtheder, når det er data udefra)
http://php.net/manual/en/mysqli.real-escape-string.php


eller bedre brug Prepare Statement


nb:
måske du skulle smide et spm i
http://www.computerworld.dk/eksperten/spm/internet-og-onlineloesninger/cms-systemer
omkring "PHP Code For Posts" i WP

eller i
https://wordpress.org/support/plugin/php-code-for-posts
Avatar billede Calle5463 Forsker
07. oktober 2016 - 15:13 #14
jeg skal lige prøve at echo'e felterne jeg bruger når jeg viser formularen - det er jo egentligt der det går galt ......
Avatar billede Calle5463 Forsker
07. oktober 2016 - 15:33 #15
echo "<br>" . $row[ID], $row[sortering], $row[tillidshverv], $row[beskrivelse];

viser data som de står i tabellen med *"rigtige" æøåÆØÅ

2998Rettet: Hverv nr 98 æøå ÆØÅRettet: Dette er beskrivelse af nr 98 æøå ÆØÅ

så det må være fra $row --> formularens inputfelter det går galt, når inputfeltet er et type=text

"<input type=text name=tillidshverv value=$row[tillidshverv]>"

Måske jeg lige skulle bruge lidt tid på, at få formateret det uden at bruge tabel, og så prøve igen?
Avatar billede olsensweb.dk Ekspert
07. oktober 2016 - 15:42 #16
her mangler da nogle plinger
"<input type=text name=tillidshverv value=$row[tillidshverv]>"
skal se ca sådan ud
"<input type='text' name='tillidshverv' value='".$row['tillidshverv']."'>"
Avatar billede Calle5463 Forsker
07. oktober 2016 - 15:59 #17
PIIING!!
Avatar billede Calle5463 Forsker
07. oktober 2016 - 16:00 #18
- det bliver sikkert godt, når jeg finder ud af (forstår) at lave det som olebole beskriver.
Avatar billede Calle5463 Forsker
07. oktober 2016 - 16:02 #19
Blev lige opgraderet til "Mester"!!!! Mon ikke nogen burde revurdere......... :-)
Avatar billede Calle5463 Forsker
07. oktober 2016 - 19:41 #20
Er det nu mig (sikkert) eller pluginnet?

FEJL
Fatal error: Call to a member function prepare() on null in /customers/7/0/2/21131197.dk/httpd.www/fvf2/wp-content/plugins/php-code-for-posts/Classes/Shortcode.php(81) : eval()'d code on line 82

KODE
// Første forsøg på Prepare Statement ..............   
(linie 81) function rediger_record () {
(linie 82) if ($stmt = $mysqli->prepare('UPDATE fvf2_cer_tillidshverv SET tillidshverv=?, beskrivelse=?, sortering=? WHERE fvf2_cer_tillidshverv.ID=?')) {
   
    /* Binding af parametre */
    $stmt->bind_param('ssii', $ny_hverv, $ny_beskrivelse, $ny_sortering, $ID);
   
    /* Sætter værdier på parametrene */
    $ID = $_POST['ID'];
    $ny_hverv = $_POST['tillidshverv'];
    $ny_beskrivelse = $_POST['beskrivelse'];
    $ny_sortering = $_POST['sortering'];

    /* Eksekverer forespørgslen */
    $stmt->execute();

    /* Lukker statement */
    $stmt->close();

    } else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
}
Avatar billede olsensweb.dk Ekspert
07. oktober 2016 - 20:11 #21
>Er det nu mig (sikkert)
ja

>Call to a member function prepare()
den kan ikke finde din connection

ret
function rediger_record ()
til
function rediger_record ($mysqli)

og der hvor du kalder functionen
$mysqli = forbind_til_database();
rediger_record ($mysqli);
$mysqli->close();

eks (utested)

<?php
function rediger_record ($mysqli) {
if ($stmt = $mysqli->prepare('UPDATE fvf2_cer_tillidshverv SET tillidshverv=?, beskrivelse=?, sortering=? WHERE fvf2_cer_tillidshverv.ID=?')) {
   
    /* Binding af parametre */
    $stmt->bind_param('ssii', $ny_hverv, $ny_beskrivelse, $ny_sortering, $ID);
   
    /* Sætter værdier på parametrene */
    $ID = $_POST['ID'];
    $ny_hverv = $_POST['tillidshverv'];
    $ny_beskrivelse = $_POST['beskrivelse'];
    $ny_sortering = $_POST['sortering'];

    /* Eksekverer forespørgslen */
    $stmt->execute();

    /* Lukker statement */
    $stmt->close();

    } else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
}

$mysqli = forbind_til_database();
rediger_record ($mysqli);
$mysqli->close();

?>



alternativ kan du vælge at kalde din connection inde i functionen
eks (utested)

<?php
function rediger_record () {
$mysqli = forbind_til_database();

if ($stmt = $mysqli->prepare('UPDATE fvf2_cer_tillidshverv SET tillidshverv=?, beskrivelse=?, sortering=? WHERE fvf2_cer_tillidshverv.ID=?')) {
   
    /* Binding af parametre */
    $stmt->bind_param('ssii', $ny_hverv, $ny_beskrivelse, $ny_sortering, $ID);
   
    /* Sætter værdier på parametrene */
    $ID = $_POST['ID'];
    $ny_hverv = $_POST['tillidshverv'];
    $ny_beskrivelse = $_POST['beskrivelse'];
    $ny_sortering = $_POST['sortering'];

    /* Eksekverer forespørgslen */
    $stmt->execute();

    /* Lukker statement */
    $stmt->close();

    } else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }
}
rediger_record();
?>


ssii', $ny_hverv, $ny_beskrivelse, $ny_sortering, $ID
betyder
text, text, heltal, heltal

ser meget rigtigt ud
Avatar billede Calle5463 Forsker
07. oktober 2016 - 20:37 #22
Tak #21, det var det

Overvejer lige at kalde connection inde i funktionen - men skal nok lige læse det nye igennem et par gange først for at forstå lidt mere hvad der sker

Og så skal jeg bare igang med de andre  :-)
Avatar billede olsensweb.dk Ekspert
07. oktober 2016 - 22:32 #23
en mulig fordel ved at åbne din connection inde i functionen, er at du sparer en parameter, og du ikke behøver tænke på at lukke din connection, da den lukkes automatisk når functionen forlades.
dvs du har din connection åben i kortere tid af gangen, og derved kan flere brugere bruge din database.

en ulempe ved at åbne connection inde i  functionen, er hvis du i dit kald til forbind_til_database() skal bruge parameter, feks database, brugernavn, password, host, så ville det skulle skrives i samtlige functioner.


jeg er mere til at åbne connection uden for functionen og lukke efter functionen.
altså
$mysqli = forbind_til_database();
rediger_record ($mysqli);
$mysqli->close();

men det er en vane/smags sag

>men skal nok lige læse det nye igennem et par gange først for at forstå lidt mere hvad der sker
ja, det kan godt virke lidt overvældende i første omgang, men det meste er rent copy paste.


>Og så skal jeg bare igang med de andre  :-)
god fornøjelse :), har du først lavet CRUD en gang i Prepare Statement, så er resten gentagelser, rent copy paste

nb:
jeg ville ikke bruge $_POST inde i functionen, men tage værdien over som parameter, så er functionen lettere at genanvende.
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

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