Avatar billede LittleNerd Nybegynder
06. januar 2013 - 17:06 Der er 9 kommentarer og
1 løsning

Insert med bruger(en fk nøgle)

Hej jeg har en gæstebog på min side hvor jeg har gjort at man skal være logget ind for at kunne skrive i den men når man er logget ind og skriver i den så kommer bruger ikke med over i databasen, jeg har en simple insert function:
<?php
    function insertintotable($tabel_navn, $postarray)
    {       
        $fjerne = array_pop($postarray);

        $kolonner = array_keys($postarray);
        $kolonneliste = implode(",", $kolonner);

        $vaerdi = array_values($postarray);
        $vaerdiliste =implode("', '", $vaerdi);

        $sql_insert = "INSERT INTO {$tabel_navn} ($kolonneliste) VALUES ('$vaerdiliste')";

        mysql_query($sql_insert);
    }
   
        //isset er hvis du har trykket på knappen
        if(isset($_POST['submit']))
        {
            insertintotable('gustbook', $_POST);
            header("Location: guestbook.php");
            exit;
        }
?>

men den tager ikke bruger med, når der skrives i gæstebogen, kan tænkte mig frem til at jeg skal bruge en anden form for insert men hvilken en, er ikke lige super på det punkt jeg har altid brugt functions.

Mvh.

Camilla
06. januar 2013 - 17:18 #1
Hvor har du brugeren stående?  Er det en af elementerne i $vaerdi?  Eller spurgt på en anden måde, hvilke elementer har du i $værdi?
Avatar billede LittleNerd Nybegynder
06. januar 2013 - 17:36 #2
jeg tager brugeren med over med $_SESSION, ville jeg kunne bruge den i min insert function?
06. januar 2013 - 19:08 #3
Det du sender over i databasen, det er værdierne i $postarray.  Du siger:

$vaerdi = array_values($postarray);
$vaerdiliste =implode("', '", $vaerdi);
$sql_insert = "INSERT INTO {$tabel_navn} ($kolonneliste) VALUES ('$vaerdiliste')";

Så hvis ikke bruger er et element i $postarray kommer bruger ikke med i databasen.  Det er ligetil.  Eller sagt omvendt:  Det at brugeren ikke kommer med i databasen skyldes sandsynligvis, at værdien ikke sidder i $postarray.

Hvis du har brugeren i $_SESSION kan du indsætte brugeren i $postarray, så den kommer med i databasen.  Såsom (i pseudo kode)

$bruger = $_SESSION['bruger'];
$postarray['bruger'] = $bruger;

En anden mulighed ville være at sende brugeren med i $postarray til at begynde med.  Hvor og hvordan dannes $postarray og hvor indsættes S_SESSION værdierne?

En andet forklaring kunne være, at brugeren rent faktisk sidder i $postarray, men at key værdien ikke svarer til den pågældende kolonne i database tabellen.  For eksempel at $postarray indeholder 'brugeren'=>'Anders' men at kolonnen i tabellen hedder 'bruger'.  Du kunne prøve at udskrive $postarray ved at indsætte denne kode:

echo "POSTARRAY = ";var_dump($postarray);die
Avatar billede LittleNerd Nybegynder
07. januar 2013 - 06:20 #4
brugeren kommer ikke med over fandt jeg ud af, men hvor skal jeg indsatte

$bruger = $_SESSION['bruger'];
$postarray['bruger'] = $bruger;

I min functionen?
07. januar 2013 - 08:31 #5
Du skal først være sikker på, hvad den kolonne i tabellen hedder hvor brugeren skal gemmes.  Hedder den 'bruger'?

Derefter skal du være sikker på hvordan brugeren gemmes i $_SESSION.  Du kan skrive $_SESSION ud ved midlertidigt at placere dette i koden:

<?php
    function insertintotable($tabel_navn, $postarray)
    {     
        echo "SESSION= ";var_dump($_SESSION); die;
        .....
    }

Hvis du ser sådan noget som
SESSION = array(1){["__default"]=>.... plus en hel masse blandt andet ["bruger"]=>string(9)"minbruger"
så er den god nok.  Hvis der i stedet for eksempel står ["user"]=string(9)"minbruger" så er det $_SESSION['user'] du skal bruge.

Men hvis session elementet hedder 'bruger' og kolonnen i tabellen hedder 'bruger', så vil jeg foreslå, at du prøver med det følgende (ikke testet):

<?php
    function insertintotable($tabel_navn, $postarray)
    {     
        $bruger = $_SESSION['bruger'];
        $postarray['bruger'] = $bruger;

og så fortsætte med:

        $fjerne = array_pop($postarray);

        $kolonner = array_keys($postarray);
        $kolonneliste = implode(",", $kolonner);

        $vaerdi = array_values($postarray);
        $vaerdiliste =implode("', '", $vaerdi);

o.s.v.
Avatar billede LittleNerd Nybegynder
07. januar 2013 - 17:21 #6
jeg prøvet   
function insertintotable($tabel_navn, $postarray)
    {     
        echo "SESSION= ";var_dump($_SESSION); die;
    }

og fik det her

SESSION= array(2) { ["navn"]=> string(7) "camilla" ["id"]=> string(1) "2" }

jeg prøvet det du skrev men ikke havde testet og det virker ikke, jeg skriver:

function insertintotable($tabel_navn, $postarray)
    {     
        $bruger = $_SESSION['navn'];
        $postarray['navn'] = $bruger;

        $fjerne = array_pop($postarray);

        $kolonner = array_keys($postarray);
        $kolonneliste = implode(",", $kolonner);

        $vaerdi = array_values($postarray);
        $vaerdiliste =implode("', '", $vaerdi);


        $sql_insert = "INSERT INTO {$tabel_navn} ($kolonneliste) VALUES ('$vaerdiliste')";

        mysql_query($sql_insert);
    }
   
    //isset er hvis du har trykket på knappen
    if(isset($_POST['submit']))
    {
        insertintotable('gustbook', $_POST);
        header("Location: guestbook.php");
        exit;
    }

og min kolonne hedder ikke bruger men navn, men det virker stadig væk ikke
07. januar 2013 - 20:37 #7
Det var da skammeligt.  Måske er jeg ikke så smart som jeg håbede.  Havde det nu været mit eget program der drillede, så ville jeg have fortsat min søgning efter løsningen ved at udskrive $kolonneliste og $vaerdiliste for at se, om de indeholder det jeg forventer.  Hvis du vil gøre det samme, så:

function insertintotable($tabel_navn, $postarray)
    {   
        $bruger = $_SESSION['navn'];
        $postarray['navn'] = $bruger;

        $fjerne = array_pop($postarray);

        $kolonner = array_keys($postarray);
        $kolonneliste = implode(",", $kolonner);
echo "KOLONNELISTE = ";var_dump($kolonneliste);

        $vaerdi = array_values($postarray);
        $vaerdiliste =implode("', '", $vaerdi);
echo "<br>VAERDILISTE = ";var_dump($vaerdiliste);die;
    }

Se $kolonneliste indeholder værdien 'navn' og om $vaerdiliste indeholder vaerdien 'camilla' og om væerdierne 'navn' og 'camilla' forekommer på samme måde, med de samme kommaer, som de andre værdier.  Måske poste udskriften her.
Avatar billede LittleNerd Nybegynder
09. januar 2013 - 05:53 #8
Når jeg skriver function insertintotable($tabel_navn, $postarray)
    {   
        $bruger = $_SESSION['navn'];
        $postarray['navn'] = $bruger;

        $fjerne = array_pop($postarray);

        $kolonner = array_keys($postarray);
        $kolonneliste = implode(",", $kolonner);
echo "KOLONNELISTE = ";var_dump($kolonneliste);

        $vaerdi = array_values($postarray);
        $vaerdiliste =implode("', '", $vaerdi);
echo "<br>VAERDILISTE = ";var_dump($vaerdiliste);die;
    }

så kommer dette frem


KOLONNELISTE = string(27) "dato,title,kommentar,submit"
VAERDILISTE = string(44) "2013-01-09', 'en lille bitte', 'test', 'Send"
09. januar 2013 - 09:42 #9
Den fatter jeg ikke.  Nu har jeg gennemført følgende test på mit eget system.
Først har jeg oprettet en $postarray med samme indhold som din.  Jeg udskrev kolonneliste og værdiliste og fik samme resultat som du viser.  Derefter oprettede jeg en $_SESSION array med samme indhold som din, trak $_SESSION['navn'] ud som $bruger og indsatte det i $postarray med $postarray['navn'] = $bruger;  Derefter udskrev jeg kolonneliste og værdiliste igen, og dennegang var navn og camila der som jeg forventede.  Jeg viser nedenfor min kode og derefter de udskrevne resultater.  De udskrevne resultater kan du også se i http://christianjorgensen.be/test.php

Men det synes at gå anderledes hos dig.  Jeg kan desværre ikke se hvorfor, så jeg må nok opgive at hjælpe dig.

Her er min testkode plus resultater:

<?php
$postarray = array("dato" => "2013-01-09", "title" => "en lille bitte", "kommentar" => "test", "submit" => "Send");
$kolonner = array_keys($postarray);
$kolonneliste = implode(",", $kolonner);
echo "KOLONNELISTE = ";var_dump($kolonneliste);
$vaerdi = array_values($postarray);
$vaerdiliste = implode("','", $vaerdi);
echo "<br>VAERDILISTE = ";var_dump($vaerdiliste);

$_SESSION = array("navn" => "camilla", "id" => "2");
$bruger = $_SESSION['navn'];
$postarray['navn'] = $bruger;
$kolonner = array_keys($postarray);
$kolonneliste = implode(",", $kolonner);
echo "<br>NY KOLONNELISTE = ";var_dump($kolonneliste);
$vaerdi = array_values($postarray);
$vaerdiliste = implode("','", $vaerdi);
echo "<br>NY VAERDILISTE = ";var_dump($vaerdiliste);
?>

KOLONNELISTE = string(27) "dato,title,kommentar,submit"
VAERDILISTE = string(41) "2013-01-09','en lille bitte','test','Send"
NY KOLONNELISTE = string(32) "dato,title,kommentar,submit,navn"
NY VAERDILISTE = string(51) "2013-01-09','en lille bitte','test','Send','camilla"
Avatar billede LittleNerd Nybegynder
11. januar 2013 - 12:06 #10
lukket
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