Avatar billede Morten Professor
10. december 2015 - 21:58 Der er 6 kommentarer og
1 løsning

If else select, insert, update

Hej Eksperter

Har igen igen problemer med at få noget til at virker, som ellers virker fint i en anden funktion, som jeg ig ronols har lavet.

Jeg har et problem med at få dette til at virke som det skal.
require_once('besoeg_function.php');
$besogstaeller_id = besoeg_Select($hellestrik, $privat); // finder i det hvis det er der

if($besogstaeller_id == 0){
besoeg_Create($hellestrik, $privat); // hvis det ikke er der insert
}
else {
besoeg_Update($hellestrik, $privat); // ellers opdater hits
}

Den gør det bare ikke den bliver ved med at komme med flere af den samme ip.
Her er mine funktioner:

function besoeg_Select($hellestrik, $privat){
$stmt = $hellestrik->prepare('SELECT `privat`, hits, `besoge`, `datetime` FROM tbl_besoeg WHERE privat = ?');

    /* Bind parametre */
    $stmt->bind_param('s', $privat);

    /* Sæt værdier på parametrene */
    $privat = $_GET['privat'];

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

    /* Bind resultatet */
    $stmt->bind_result($privat, $hits, $besoge, $datetime);

    /* Hent rækker og udskriv data */
    while ($stmt->fetch()) {
    ;}
}
function besoeg_Create($hellestrik, $privat){
    $id=0;
    if ($stmt = $hellestrik->prepare('INSERT INTO `tbl_besoeg` (`privat`, `hits`, `besoge`, `datetime`) VALUES (?, ?, ?, ?)')) {
        /* Bind parametre */
        $stmt->bind_param('siis', $privat, $hits, $besoge, $datetime);
        /* Sæt værdier på parametrene */
        $privat = $_GET['privat'];
        $hits = 1;
        $besoge = 1;
        $datetime = date('Y-m-d H:i:s');
        /* Eksekver forespørgslen */
        $stmt->execute();
        $id = $stmt->insert_id;
        /* Luk statement */
        $stmt->close();
    }
    else{
        $id=-1;
        echo "server fejl";
    }
    return $id;
}

    function besoeg_Update($hellestrik, $privat){
    $query = "UPDATE `tbl_besoeg` SET `hits`=`hits`+1 WHERE `privat`=?";
    $execute = $hellestrik->prepare($query);
    if ($execute) {
        $execute->bind_param('s', $privat);
       
        $execute->execute();
    } else {
        echo 'We\'re having trouble connecting to the database at the moment, try again later!';
    }}
Avatar billede Morten Professor
10. december 2015 - 22:17 #1
Har prøvet at kopiere det vi har lavet, og bare ændret tabellen
Avatar billede olsensweb.dk Ekspert
10. december 2015 - 22:26 #2
din besoeg_Select skal retunerer en id som du bruger efterfølgende

din besoeg_Update skal opdaterer den id der sendes over, hvilke er hurtigere da den er indexeret, (er så også fremtids sikret :) )

din besoeg_Create har jeg ikke kigget på, da den burde virke

(utested)
besoeg_function.php
   
<?php
function besoeg_Update($hellestrik, $id) {
    $query = "UPDATE `tbl_besoeg` SET `hits`=`hits`+1 WHERE `id`=?";
    $execute = $hellestrik->prepare($query);
    if ($execute) {
        $execute->bind_param('s', $id);

        $execute->execute();
    } else {
        echo 'We\'re having trouble connecting to the database at the moment, try again later!';
    }
}

function besoeg_Select($hellestrik, $privat) {
    $id = 0;
    if ($stmt = $hellestrik->prepare('SELECT id FROM tbl_besoeg WHERE privat = ?')) {

        /* Bind parametre */
        $stmt->bind_param('s', $privat);

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

        /* Bind resultatet */
        $stmt->bind_result($id);

        /* Hent rækker og udskriv data */
        while ($stmt->fetch()) {
            $id;
        }
    } else {
        /* Der er opstået en fejl */
        $id = -1;
        echo 'Der opstod en fejl i erklæringen: ' . $hellestrik->error;
    }
    return $id;
}

function besoeg_Create($hellestrik, $privat){
    $id=0;
    if ($stmt = $hellestrik->prepare('INSERT INTO `tbl_besoeg` (`privat`, `hits`, `besoge`, `datetime`) VALUES (?, ?, ?, ?)')) {
        /* Bind parametre */
        $stmt->bind_param('siis', $privat, $hits, $besoge, $datetime);
        /* Sæt værdier på parametrene */
        $privat = $_GET['privat'];
        $hits = 1;
        $besoge = 1;
        $datetime = date('Y-m-d H:i:s');
        /* Eksekver forespørgslen */
        $stmt->execute();
        $id = $stmt->insert_id;
        /* Luk statement */
        $stmt->close();
    }
    else{
        $id=-1;
        echo "server fejl";
    }
    return $id;
}
?>


   
<?php
require_once('besoeg_function.php');
$privat = $_GET['privat'];
$besogstaeller_id = besoeg_Select($hellestrik, $privat); // finder i det hvis det er der

if ($besogstaeller_id == 0) {
    besoeg_Create($hellestrik, $privat); // hvis det ikke er der insert
} else {
    besoeg_Update($hellestrik, $besogstaeller_id); // ellers opdater hits
}
?>
Avatar billede Morten Professor
10. december 2015 - 22:41 #3
Så nu virker det perfekt :o)
Den fik du hurtig styr på.
Tak for hjælpen endnu en gang, du er da en gutter mand.

Det skal jeg have kigget på noget mere så jeg helt forstår det.
Du er altså rigtig god til det her :o)

Vil du smide et svar?
Du skal have dine point.

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
10. december 2015 - 22:43 #4
jeg vil stadig anbefale du lave en ny record hver dag, som jeg skrev i
http://www.eksperten.dk/spm/1007758#reply_8203892
så vil du også få en historik, og have data grundlaget til de raporter du vil lave

men det er bare at rette i besoeg_Select
fra
SELECT id FROM tbl_besoeg WHERE privat = ?

til
SELECT id FROM tbl_besoeg WHERE DATE(datetime) = CURDATE() AND privat = ?

coden er utested
Avatar billede olsensweb.dk Ekspert
10. december 2015 - 22:44 #5
får du her
Avatar billede olsensweb.dk Ekspert
10. december 2015 - 22:55 #6
jeg vil anbefale dig at bruge den negative retur værdi som besoeg_Select giver ved fejl

<?php
require_once('besoeg_function.php');
$privat = $_GET['privat'];
$besogstaeller_id = besoeg_Select($hellestrik, $privat); // finder i det hvis det er der

if ($besogstaeller_id == 0) {
    besoeg_Create($hellestrik, $privat); // hvis det ikke er der insert
}
else{
    if($besogstaeller_id>0){   
        // opdater hits for den id der sendes over
        besoeg_Update($hellestrik, $besogstaeller_id);
    }
    else{
        // $besogstaeller_id er negativ, der er en server fejl
        exit(); // vi stopper afviklingen af siden lige på stedet
    }
}

?>
Avatar billede Morten Professor
10. december 2015 - 23:09 #7
Det virker rigtig godt.
Det vil jeg i hvert fald bruge.
Tak for din hjælp.
Du giver mig nogle gode værktøjer.

Med venlig hilsen
Morten
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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