Avatar billede andpek2323 Nybegynder
23. januar 2014 - 15:06 Der er 5 kommentarer og
1 løsning

vis en tekst, når "starrating" ikke vises

Hej. jeg håber at spørgsmålet er forståligt: jeg har en database med et table som hedder artikler, og derunder er bla. en række som hedder dato, som jeg bruger til mit star rating system, mit star-rating system skal først vises på siden når den når den dato som er angivet i rækken dato er nået, og det virker også fint med nederstående kode, men det jeg godt kunne tænke mig var hvis der kunne stå en tekst f.eks ( det er ikke muligt og vuderer artiklen før d 03.03.2014 ) inden at den viser mit star-rating system, og som jo så selvfølge også forsvinder når den når den givende dato og den så viser star-rating systemet.
håber der er nogle der kan hjælpe :)

<?php
for($i=0;$i<count($ids);$i++)
{
    $rating_tableName    = 'artikler';
    $id=$ids[$i];
    $q="SELECT Antal_stemmer, Stemmer_sammenlagt FROM $rating_tableName WHERE id=$id AND UNIX_TIMESTAMP(`dato`) < UNIX_TIMESTAMP()";
    $r=mysql_query($q);
    if(!$r) echo mysql_error();
    while($row=mysql_fetch_array($r))
    {
        $v=$row['Antal_stemmer'];
        $tv=$row['Stemmer_sammenlagt'];
        $rat=$tv/$v;
        $id=$ids[$i];
        echo'<div class="product">'
            .$j
            .'<div id="rating_'
            .$id
            .'" class="ratings">'
        ;
        for($k=1;$k<16;$k++)
        {
            if($rat+0.15>$k) $class="star_".$k."  ratings_stars ratings_vote";
            else $class="star_".$k." ratings_stars ratings_blank";
            echo '<div class="'.$class.'"></div>';
        }
        echo' <div class="total_votes"><p class="voted"> Vurdering: <strong>'.@number_format($rat).'</strong>/15 ('.$v. '  Stemme(r) modtaget)</div></div></div>';
    }
}
?>
Avatar billede andpek2323 Nybegynder
23. januar 2014 - 21:48 #1
jeg har selv fundet en løsning på det, men det er helt sikkert ikke den mest smarte, jeg haved tænkt at man måske ved hjælp af if og else statments kunne lave det????, men det kan jeg ikke selv hitte ud af og få til og virke :-/

jeg lader spørgsmålet stå åben lidt endnu, hvis der skulle være en der har en bedre løsning end min?? :)

min løsning:

<?php
for($i=0;$i<count($ids);$i++)
{
    $rating_tableName    = 'artikler';
    $id=$ids[$i];
    $q="SELECT Antal_stemmer, Stemmer_sammenlagt FROM $rating_tableName WHERE id=$id AND UNIX_TIMESTAMP(`dato`) < UNIX_TIMESTAMP()";
    $r=mysql_query($q);
    if(!$r) echo mysql_error();
    while($row=mysql_fetch_array($r))
    {
        $v=$row['Antal_stemmer'];
        $tv=$row['Stemmer_sammenlagt'];
        $rat=$tv/$v;
        $id=$ids[$i];
        echo'<div class="product">'
            .$j
            .'<div id="rating_'
            .$id
            .'" class="ratings">'
        ;
        for($k=1;$k<16;$k++)
        {
            if($rat+0.15>$k) $class="star_".$k."  ratings_stars ratings_vote";
            else $class="star_".$k." ratings_stars ratings_blank";
            echo '<div class="'.$class.'"></div>';
        }
        echo' <div class="total_votes"><p class="voted"> Vurdering: <strong>'.@number_format($rat).'</strong>/15 ('.$v. '  Stemme(r) modtaget)</div></div></div>';
    }
}
?>
<?php


    $q="SELECT * FROM artikler WHERE id=$id AND UNIX_TIMESTAMP(`dato`) > UNIX_TIMESTAMP()";
    $r=mysql_query($q);
    if(!$r) echo mysql_error();
    while($row=mysql_fetch_array($r))
    {
        echo'det er ikke muligt og vuderer artiklen før d 03.03.2014 ';
}
}
?>
23. januar 2014 - 22:37 #2
Der var åbenbart ingen der fandt, at spørgsmålet var forståeligt.  Jeg heller ikke (heller ikke med min baggrund i http://www.eksperten.dk/spm/990687).  Men i dit indlæg #1 løfter du lidt af sløret for hvad du vil.  Du vil have noget udskrevet for alle artiklerne uanset om de er ældre end en bestemt dato eller ej, men for de der er ældre vil du have star ratingen udskrevet, og for de der ikke er vil du have udskrevet at det endnu ikke er muligt at vurdere.

Det er statig svært at forstå det, der er meget du ikke fortæller.  Men jeg vil gætte på, at du kan gøre det med en enkelt forespørgsel i retning af den følgende kode, som jeg ikke har testet: 

$q="SELECT Antal_stemmer, Stemmer_sammenlagt, UNIX_TIMESTAMP(`dato`)<UNIX_TIMESTAMP()";
$r=mysql_query($q);
if(!$r) echo mysql_error();
while($row=mysql_fetch_array($r))
{
    $x=$row['UNIX_TIMESTAMP(`dato`)<UNIX_TIMESTAMP()'];
    $v=$row['Antal_stemmer'];
    $tv=$row['Stemmer_sammenlagt'];
    $rat=$tv/$v;
    IF(!$x) echo 'Det er ikke muligt at vurdere artikelen f'r d. 03.03.2014';
    ELSE
    {
        $id=$ids[$i];
        o.s.v. koden der udskriver star ratingen
    }
}
Avatar billede andpek2323 Nybegynder
23. januar 2014 - 23:25 #3
den overstående kode giver bare hvid side.
Det jeg gerne vil have er at jeg angiiver en dato i min database, og indtil den dato nåes skal der stå en tekst som jo f.eks kunne være: 'Det er ikke muligt at vurdere artikelen før d. 03.03.2014, og når det så bliver den gældende dato, så skal teksten skiftes ud med mit star-rating system, så teksten forsvinder, den dato som star-rating systemet "dukker op".

overstående select satment skal den ikke også indeholde "WHERE id=1" så den ved at den er den artikel/starratingsystem med id nummer 1 der skal vises.

håber det er til og forstå, jeg er newbie med det her, så det kan godt være lidt svært nogle gange og forklare sig ordentligt, og vide hvilke informationer man skal give for det er til og forstå...?
24. januar 2014 - 09:22 #4
Jo, select statementet skulle også have indeholdt "WHERE id=1".

Du laver to selects, først for 'gamle' artikler som du så skriver ud med star rating, og derefter for 'nye' artikler hvor du skriver at de ikke kan vurderes endnu.  Det eneste jeg foreslår anderledes er i den første select at teste om unixtimestamp(dato) er mindre end unixtimestamp(), altså om artikelen er 'old'. I din while statement, IF artikelen ikke er 'old' skriver du at den ikke kan vurderes endnu, ELSE kører du videre med din starrating.  Og så behøver du ikke endnu en select.

Jeg har prøvet at skrive koden fuld ud.  Jeg har ikke mulighed for at teste det (der er for meget du ikke fortæller), så hvis der sidder en syntaks fejl et sted må du selv debugge det eller iøvrigt arbejde videre med det.  Du efterlyste noget med IF, og det har jeg vist et forslag til.  Jeg håber det kan hjælpe.

<?php
for($i=0;$i<count($ids);$i++)
{
    $rating_tableName    = 'artikler';
    $id=$ids[$i];
    $q="SELECT Antal_stemmer, Stemmer_sammenlagt, UNIX_TIMESTAMP(`dato`) < UNIX_TIMESTAMP() AS old FROM $rating_tableName WHERE id=$id;"
    $r=mysql_query($q);
    if(!$r) echo mysql_error();
    while($row=mysql_fetch_array($r))
    {
        $v=$row['Antal_stemmer'];
        $tv=$row['Stemmer_sammenlagt'];
        $rat=$tv/$v;
        $x=$row('old');
        IF(!$x) echo'Det er ikke muligt at vuderere artiklen før d 03.03.2014 ';
        ELSE
        {
            $id=$ids[$i];
            echo'<div class="product">'
                .$j
                .'<div id="rating_'
                .$id
                .'" class="ratings">'
            ;
            for($k=1;$k<16;$k++)
            {
                if($rat+0.15>$k) $class="star_".$k."  ratings_stars ratings_vote";
                else $class="star_".$k." ratings_stars ratings_blank";
                echo '<div class="'.$class.'"></div>';
            }
            echo' <div class="total_votes"><p class="voted"> Vurdering: <strong>'
                .@number_format($rat)
                .'</strong>/15 ('.$v. '  Stemme(r) modtaget)</div></div></div>'
            ;
        }
    }
}
Avatar billede andpek2323 Nybegynder
24. januar 2014 - 23:59 #5
Hej christian, endnu engang tak for din hjælp ;), smider du et svar så kan du få point..
25. januar 2014 - 06:41 #6
Svar fra mig.
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