Avatar billede Morten Professor
08. december 2015 - 10:40 Der er 18 kommentarer og
1 løsning

Hvis ikke $privat og $datetime ikke er der Insert

Hej Eksperter

Har på problemer med at få det til at virke.


else if($privat && $datetime == 0){
    function besoeg_Create($hellestrik){
    $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;
}
$test = besoeg_Create($hellestrik);
}
else {
Avatar billede michael_stim Ekspert
08. december 2015 - 11:13 #1
else if(!$privat && $datetime == 0){ //måske
Avatar billede Morten Professor
08. december 2015 - 11:23 #2
øv virkede ikke
Avatar billede olsensweb.dk Ekspert
08. december 2015 - 11:40 #3
>else if($privat && $datetime == 0){
hvor sætter du de 2 variable henne ?? (uden for functionen)

hvis du sætter $privat med denne linje $privat = $_GET['privat']; uden for functionen, så test med isset
har du sat $datetime nogle steder uden for functionen ??

jeg vil tage $privat over som parameter til functionen (evt default parameter)

jeg vil anbefale at ligge functionen i en extern fil, så bliver din coden nemmere at overskue, og du kan hurtigere se du kan genbruge den
Avatar billede Morten Professor
08. december 2015 - 11:47 #4
Sådan ser det hele ud med isset også men så kommer der hele tiden et nyt id, der skal bare komme et nyt med en ny data for idag


if ($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()) {
    echo $privat
    ;}}

if(isset($privat)){
    function besoeg_Create($hellestrik){
    $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;
}
$test = besoeg_Create($hellestrik);
}
else {

    $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!';
    }}
$privat = $_GET['privat'];
// $privat_ip = "8.8.8.8"; // forvendter 0
// $privat_ip = "62.44.135.217"; // forvendter tal størrer end 0
// $privat_ip = "62"; // forvendter tal størrer end 0

?>
Avatar billede michael_stim Ekspert
08. december 2015 - 12:14 #5
Så skal du måske bruge UPDATE i stedet for INSERT.
Avatar billede michael_stim Ekspert
08. december 2015 - 12:15 #6
Med andra ord, $privat må väre sat, ellers går den ikke ind i din if.
Avatar billede michael_stim Ekspert
08. december 2015 - 12:18 #7
Du skal vel INSERTE når der IKKE findes nogen $privat og UPDATE når den findes, eller?

if(!isset($privat)){
Avatar billede olsensweb.dk Ekspert
08. december 2015 - 16:06 #8
@morticms
burde
$privat = $_GET['privat'];
ikke komme før alle dine if sætninger ??

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

hvad vil du opnå med denne if  ??
hvilke data skal du bruge ??

du bliver nød til at lave kommentare i din code, specielt vigtig når andre skal hjælpe dig med din code, nogle gange kan kommentarene godt fylde mere end selve coden

jeg tror det bliver nemmere for dig selv, hvis du sætter dig ind i functioner, og opbygger din code som dette. så bliver din code nemmere at overskue, afteste, og du kan nemmere genbruge stumper
det du gør nu med besoeg_Create er spild at en god function, så kunne du lige så lade være med at pakke det ind som en function

genkender du denne structur ??, jeg tror det er noget ala dette du vil

// i toppen af filen ligger en include der includerer den externe fil der indeholder functionerne
$ip = $_GET['privat'];
$status = besoeg_IsIpCreated($hellestrik, $ip); // du/jeg har tidligere lavet besogstaeller_IsIpCreated($hellestrik, $ip)
if($status){
    // så er den oprettet
    // måske man skulle opdaterer besøgs tælleren her
    // besoeg_Update($hellestrik, $ip); // du/jeg har tidligere lavet besogstaeller_Update($hellestrik, $ip)
}
else{
    // så skal den oprettes
    besoeg_Create($hellestrik); // har du/jeg lavet
    // besoeg_Create($hellestrik, $ip); // ville jeg gøre
}
Avatar billede Morten Professor
08. december 2015 - 20:10 #9
Jeps kender den struktur, den lavede vi.

Men det jeg vil er noget helt andet, ville gerne lave "Hvis privat & datetime "Altså en ny dato" ikke er der skal den lave en med ny dato, for ipen er der i forvejen.
Da ruteren ikke har lavet en ny ip.
Det er så datoer bliver til en ny med den ip. Så jeg til sidst kan lave en oversigt over 7 dag med besøgende.
Og kan lave så man kan se hvor mange der er inde på en dag.
Avatar billede Morten Professor
08. december 2015 - 20:43 #10
Nu har jeg lavet det sådan

if($privat == 0){
$test = besoeg_Create($hellestrik, $privat);
}
else {
   
$test = besoeg_Update($hellestrik, $privat);
}

Men jeg ved bare ikke hvordan jeg gør sådan som ovennævnte
Avatar billede Morten Professor
08. december 2015 - 21:01 #11
Den lavede vi men kan godt se du har ændret indstillingen, jeg prøver det lige af
Avatar billede Morten Professor
08. december 2015 - 21:05 #12
Men den indstillingen kommer den med flere iper istedet for den bare opdatere antallet af hits med den nye dato og samme ip
Avatar billede Morten Professor
08. december 2015 - 21:12 #13
men = med
Avatar billede olsensweb.dk Ekspert
09. december 2015 - 13:20 #14
   
$ip = $_GET['privat'];

// retunerer 0 hvis ikke oprettet, eller oprettet for mere end 7 dage siden, og ellers dens ID, ved fejl retuneres -1
$besoeg_id = besoeg_IsIpActiveInLast7Days($hellestrik, $ip);
if($besoeg_id==0){
    // så skal den oprettes   
    besoeg_Create($hellestrik, $ip);
}
else{
    if($besoeg_id>0){   
        // opdater dato til dagsdato, for den id der sendes over
        besoeg_Update($hellestrik, $besoeg_id);
    }
    else{
        // der er en server fejl
        exit(); // vi stopper afviklingen af siden lige på stedet
    }
}

>Det er så datoer bliver til en ny med den ip. Så jeg til sidst kan lave en oversigt over 7 dag
ovenstående vil give et problem dag 8, da man ikke ved hvor mange hits der har været dag1, og dermed trække dem fra

-------------------------

personligt ville jeg lave en log pr dag,
så ville man kunne se dag1 har brugeren været active 2 gange, og dag2 været aktive 5 gange, og så slette dem der er merer end 7 dage gamle

   
$ip = $_GET['privat'];

// retunerer 0 hvis ikke oprettet idag, og ellers dens ID, ved fejl retuneres -1
$besoeg_id = besoeg_IsIpCreatedToday($hellestrik, $ip);
if($besoeg_id==0){
    // så skal den oprettes   
    besoeg_Create($hellestrik, $ip);
}
else{
    if($besoeg_id>0){   
        // opdater hits for den id der sendes over
        besoeg_Update($hellestrik, $besoeg_id);
    }
    else{
        // $besoeg_id er negativ, der er en server fejl
        exit(); // vi stopper afviklingen af siden lige på stedet
    }
}

http://php.net/manual/en/function.date.php
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_curdate
(utested)
   
SELECT id FROM tbl_besoeg WHERE DATE(datetime) = CURDATE() AND ip = ?



kig på følgende link
http://dev.mysql.com/doc/refman/5.7/en/distinct-optimization.html
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_count-distinct
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_sum
Avatar billede Morten Professor
09. december 2015 - 17:08 #15
Kommer det så ikke til at fylde for meget hvis der nu kommer rigtig mange ind, hvis som nu med den function der er der nu, kommer der af den samme ip ind flere gange, med et hits hver.
Avatar billede Morten Professor
09. december 2015 - 17:12 #16
Og så er den gode function med update af hits ikke aktiv syntes det er synd når den er så god. og virker perfekt.
Avatar billede olsensweb.dk Ekspert
09. december 2015 - 17:43 #17
>Kommer det så ikke til at fylde for meget hvis der nu kommer rigtig mange ind,
hvor mange bruger regner du med ??, nej det fylder ikke specielt meget. (alt er jo relativt)
men du skal selvføgelig rydde op i filen, og slette de forældet records (feks mere end 14 dage gamle), med et php script

hvis du skal kunne bruge antal hits til noget, er du tvunget til at tælle pr dag, pr ip.

en IP vil max komme 1 gang om dagen, de efterfølgende gange på dagen tælles hits bare op
Avatar billede Morten Professor
09. december 2015 - 18:55 #18
Jeg lukker spørgsmålet, man kan åbenbaret ikke det jeg prøver ;o)

Du må meget gerne smide et svar ronols, for din hjælp til at gøre mine koder mere overskuelig ;o)

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
09. december 2015 - 19:32 #19
får du her
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