Avatar billede PHPnoob Juniormester
07. september 2016 - 15:55 Der er 15 kommentarer og
1 løsning

Fejl i PHP SELECT clause??

Hej gutter!

Sidder med en tabel, som nogle gange virker og andre gange ikke. Meningen med tabellen er at den skal kunne vise alle tider hvor slut-tiden er større end nu og start-tiden max er 12 timer fremme.
Det skal siges at koden egentligt virkede fint og jeg har fundet ud af at problemet skyldes:  WHERE slut > $timenow AND start < $timeafter.....
Har du/i nogle bud??
$timenow = time();
$timeafter = $timenow +43200;
   
    $sql = "SELECT *
            FROM holdinfo
            WHERE slut > $timenow
            AND start < $timeafter
            ORDER BY start ASC LIMIT 10";
Avatar billede Slater Ekspert
07. september 2016 - 16:00 #1
Og hvad er fejlen?
Avatar billede PHPnoob Juniormester
07. september 2016 - 16:05 #2
At tabellen intet viser når jeg bruger WHERE slut > $timenow AND start < $timeafter
Avatar billede Slater Ekspert
07. september 2016 - 16:09 #3
Jamen det kan jo næsten ikke være andet, end at der virkelig ikke findes nogen rækker i databasen, der overholder de kriterier. Selve koden er jo valid nok.
Avatar billede PHPnoob Juniormester
07. september 2016 - 16:19 #4
Ja..det giver ikke helt mening at det ikke virker... jeg bruger epoch timestamp i DB og de er indenfor tidsrummet.

Jeg har oplevet at der kan gå en lille dags tid fra første tider er oprettet til de blev vist i tabellen
Avatar billede olsensweb.dk Ekspert
07. september 2016 - 16:40 #5
prøv at bytte om på start og slut.

$sql = "SELECT *
FROM holdinfo
WHERE start > $timenow
AND slut < $timeafter
ORDER BY start ASC LIMIT 10";

ellers skal vi nogle data.
Avatar billede arne_v Ekspert
07. september 2016 - 16:56 #7
Det er vel ikke en BETWEEN naar det er forskellige felter.
Avatar billede arne_v Ekspert
07. september 2016 - 17:00 #8
Jeg tror ogsaa at det er matchende data som mangler.

Jeg finder konstruktionen sluttid>nu noget suspekt. Hvordan kan man have en sluttid i fremtiden? Forventet sluttid??
Avatar billede PHPnoob Juniormester
07. september 2016 - 17:11 #9
Det er lavet sådan at der indsættes et epoch timestamp med kampstart og så et tilsvarende timestamp med hvornår kampen er færdig... har tjekket tabellernes timestamps på http://www.epochconverter.com og de stemmer
Avatar billede arne_v Ekspert
07. september 2016 - 17:29 #10
Og kamp slut skal ligge i fremtiden?
Avatar billede arne_v Ekspert
07. september 2016 - 17:30 #11
Kan du poste vaerdien af $sql og vaerdier for start og slut fra database som burde tages med?
Avatar billede PHPnoob Juniormester
07. september 2016 - 17:31 #12
Det virker som om den ikke helt kan forstå datoen...

Her er et stykke fra formen (starttiden)

          <div class="form-group">
            <div class="input-group date" id="startfelt">             
                <input type="text" class="form-control" name="start">     
                <span class="input-group-addon">
                    <span class="glyphicon glyphicon-calendar">
                    </span>
                </span> 
            </div>   
          </div>

og her fra insertdelen:

$date1 = $_POST['start'];
$timestamp1 = strtotime($date1);
if ($timestamp1 === FALSE) {
  $timestamp1 = strtotime(str_replace('/', '-', $date1));
}


start          = '".mysqli_real_escape_string($mysqli, $timestamp1)."',
Avatar billede PHPnoob Juniormester
07. september 2016 - 17:33 #13
vender tilbage om et par timer.....
Avatar billede michael_stim Ekspert
07. september 2016 - 17:40 #14
Jeg fatter ikke hvorfor du ikke bare har et datetimefelt i din database. Nu konverterer du det til timestamp og når du skal hente det ud skal du formodentlig konvertere det tilbage til datoformat.
Avatar billede arne_v Ekspert
07. september 2016 - 18:04 #15
$timestamp1 = strtotime($date1);
if ($timestamp1 === FALSE) {
  $timestamp1 = strtotime(str_replace('/', '-', $date1));
}

virker mystisk sammenholdt med dokumentationen:

Note:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.
Avatar billede PHPnoob Juniormester
08. september 2016 - 12:52 #16
Først og fremmest tak for jeres svar!

@michael_stim du har ret i at jeg helt sikkert kunne have gjort det på en lettere måde.. Jeg er, som mit profilnavn antyder, ret ny i PHP mv. Det virkede ret simpelt at bruge unix timestamp på denne måde - men ak^^

@ARNE_V du har vist ret i hvad du siger med dokumentationen! Jeg får indsat 9/8/2016 i start og sluttid i stedet for det korrekte 8/9/2016! (timestamps converted på http://www.timestampconvert.com/)
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