Avatar billede tobrukDk Novice
09. oktober 2014 - 23:01 Der er 6 kommentarer og
1 løsning

sæt brugerne ned i rank via cron job

Hej Eksperten.dk

Det er snart lang tid side at jeg har lavet et indlæg her på sin omkring spørgsmål.

Lige nu har jeg bygge den her kode:


0    0    *    *    *    curl http://www.blabla.dk/bruger-rank-2.php


min kode ser sådan her ud:


if ($stmt = $this->mysqli->prepare('SELECT id, betal_dato FROM bruger')) {
            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result($id, $betal_dato);
            while ($stmt->fetch()) {
                $betal_dato_time = strtotime($betal_dato);
                $now = strtotime("now");
                if($now > $betal_dato_time)
                {
                    if ($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=?')) {
                        $stmt->bind_param('s', $rank);
                        $rank = 2;
                        $stmt1->execute();
                        $stmt1->close();
                    } else {
                        echo '<br/>Error!: ' . $this->mysqli->error;
                    }
                }
            }
            $stmt->close();
        } else {
            echo '<br/>Error 2!: ' . $this->mysqli->error;
        }


Jeg modtager ingen fejl men hvad er problemet?,

Håber du kan hjælpe mig?
Avatar billede Broxigar Praktikant
10. oktober 2014 - 00:42 #1
if ($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=?')) {
                        $stmt->bind_param('s', $rank);

Du binder en ny parameter på den statement som du pt looper over.
Prøv evt at omdøbe dem til:

$stmt --> $select_stmt
$stmt1 --> $insert_stmt
Avatar billede olsensweb.dk Ekspert
10. oktober 2014 - 06:34 #2
prøv i første omgang at rette
  $stmt->bind_param('s', $rank);
til
  $stmt1->bind_param('i', $rank);

dvs du binder til parameteren i det rigtige statement, og sætter værdien ind som int som din database forvendter

if ($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=?')) {
mangler der ikke en where betingelse her ? :), ellers er det jo alle brugere der får rang 2, jeg tror det er det du vil bruge bruger.id til.
Avatar billede tobrukDk Novice
10. oktober 2014 - 14:48 #3
Broxigar, jeg forstår ikke lige helt hvad du mener?

ronols,

tænker du sådan her:


if ($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=? WHERE id=?')) {
                        $stmt->bind_param('ii', $rank, $id);
                        $rank = 2;
                        $id = $id;
                        $stmt1->execute();
                        $stmt1->close();
                    } else {
                        echo '<br/>Error!: ' . $this->mysqli->error;
                    }
Avatar billede olsensweb.dk Ekspert
10. oktober 2014 - 15:53 #4
ja noget i den stil, dog mangler du stadig et 1 tal i din bind
$id = $id; giver ingen mening og kan bare slettes

copy paste er en god ting, men husk at rette, så coden passer til der den bruges


rettet udgave (utested)

if ($stmt1 = $this->mysqli->prepare('UPDATE bruger SET rank=? WHERE id=?')) {
    $stmt1->bind_param('ii', $rank, $id); // her manglede et 1 tal
    $rank = 2;
    $stmt1->execute();
    $stmt1->close();
} else {
    echo '<br/>Error!: ' . $this->mysqli->error;
}



det som Broxigar mener er at du skal anvende signe / betydnings bærende variable navne
så $stmt1 kunne være kaldt $stmt_update_bruger_rank, gør dog coden lidt "sværer" at rå kopiere, da du så skal tilpasse variabel navnet til omgivelserne du anvender den i næste gang.
rådet er udemærket!!, jeg ville dog ikke selv gøre det, da jeg generalt råkopierer code fra et project til et andet, og kun laver om, hvor det er nødvendigt, derfor sætter jeg som regl bare tal på.
Avatar billede tobrukDk Novice
10. oktober 2014 - 18:09 #5
Ronols,

Tak for hjælpen det virker fint nu! og virker helt som det skal og jeg ønsker vil du ha point for det?
Avatar billede olsensweb.dk Ekspert
10. oktober 2014 - 20:28 #6
jeg springer point over, har ikke noget at bruge dem til.
Avatar billede tobrukDk Novice
10. oktober 2014 - 20:37 #7
Iorden men tak for hjælpe igen!
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