Avatar billede smeier Nybegynder
28. oktober 2004 - 19:15 Der er 28 kommentarer og
1 løsning

While løkke med dato tjeck.

Jeg vil lave en while løkke med en startdato.
Det kunne f.eks være $startdato = date("Y-m", mktime(0, 0, 0, 12, 0, 1997));

Den skal så tjecke om mysql indeholder en post med samme dato via:
$query = "SELECT user_id FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND `user_id` = '".$user_id."'";

Dette skal den tjecke fra startdato til og med dags dato.
Hvis den findes for en pågældende måned skriv x ellers y.

Nogen forslag? er virkelig ringe til løkker i den form.
Avatar billede hmortensen Nybegynder
28. oktober 2004 - 20:32 #1
Måske du kan bruge det her:
<?php
function FindesDato($start, $slut, $tabeldato) {
    $startarr = split("
  • ", $start);
    $start_dato = mktime(0, 0, 0, $startarr[1], $startarr[0], $startarr[2]);
    $slutarr = split("
  • ", $slut);
    $slut_dato = mktime(0, 0, 0, $slutarr[1], $slutarr[0], $slutarr[2]);
    $datoarr = array();
    for ( $i = 0; $i<=(($slut_dato-$start_dato)/86400); $i++ ) {
        $dato = $start_dato+($i*86400);
        $datoarr[] = date("d-m-Y", $dato);
    }
    if (in_array($tabeldato, $datoarr)) {
        return true;
    } else {
        return false;
    }
}
//FindesDato() kaldes med startdato, slutdato, den der skal tjekkes på
if (FindesDato("10-08-2004", "14-11-2004", "15-10-2004")) {
    echo "Y";
} else {
    echo "N";
}
?>
Avatar billede smeier Nybegynder
29. oktober 2004 - 14:29 #2
Højst sandsynligt kan det godt bruges. Dog kan jeg ik lige finde ud af at rette det til. Prøver lidt mere men du/i er velkommen til at prøve.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 15:16 #3
function FindesDato($start, $slut, $tabeldato) {
    $startarr = split("
  • ", $start);
    $start_dato = mktime(0, 0, 0, $startarr[1], $startarr[0], $startarr[2]);
    $slutarr = split("
  • ", $slut);
    $slut_dato = mktime(0, 0, 0, $slutarr[1], $slutarr[0], $slutarr[2]);
    $datoarr = array();
    for ( $i = 0; $i<=(($slut_dato-$start_dato)/86400); $i++ ) {
        $dato = $start_dato+($i*86400);
        $datoarr[] = date("d-m-Y", $dato);
    }
    if (in_array($tabeldato, $datoarr)) {
        return true;
    } else {
        return false;
    }
}


$query = mysql_query("SELECT user_id FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND `user_id` = '".$user_id."'");
while ($row = mysql_fetch_array($query)) {
    if (FindesDato("01-12-1997", date("d-m-Y"), $row['ditdatofelt'])) {
        echo "X";
    } else {
        echo "Y";
    }
    echo $row['andetfelt'];
}
Avatar billede smeier Nybegynder
29. oktober 2004 - 15:39 #4
Ret mig hvis jeg tager fejl. Men da den skal tjecke formattet WHERE DATE_FORMAT(`moened`, '%Y-%m') må den næsten skulle se således ud:

function FindesDato($start, $slut, $tabeldato) {
    $startarr = split("
  • ", $start);
    $start_dato = mktime(0, 0, 0, $startarr[1],0 , $startarr[0]);
    $slutarr = split("
  • ", $slut);
    $slut_dato = mktime(0, 0, 0, $slutarr[1],0 , $slutarr[0]);
    $datoarr = array();
    for ( $i = 0; $i<=(($slut_dato-$start_dato)/86400); $i++ ) {
        $dato = $start_dato+($i*86400);
        $datoarr[] = date("Y-m", $dato);
    }
    if (in_array($tabeldato, $datoarr)) {
        return true;
    } else {
        return false;
    }
}


$query = mysql_query("SELECT user_id FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND `user_id` = '".$user_id."'");
while ($row = mysql_fetch_array($query)) {
    if (FindesDato("2003-10", date("Y-m"), $row['moened'])) {
        echo "X";
    } else {
        echo "Y";
    }
    echo $row['ID'];
}
?
Du må også gerne lige kort forklare hvorledes jeg kan sætte start og slut date, går ud fra at det er her:
for ( $i = 0; $i<=(($slut_dato-$start_dato)/86400); $i++ ) {
        $dato = $start_dato+($i*86400);
        $datoarr[] = date("Y-m", $dato);
    }
Avatar billede smeier Nybegynder
29. oktober 2004 - 16:11 #5
glem den sidste kommentar om start-slutdato.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 16:26 #6
Har du fået det til at virke ?
Avatar billede smeier Nybegynder
29. oktober 2004 - 16:27 #7
Nu har jeg prøvet at teste din version:
function FindesDato($start, $slut, $tabeldato) {
    $startarr = split("
  • ", $start);
    $start_dato = mktime(0, 0, 0, $startarr[1], $startarr[0], $startarr[2]);
    $slutarr = split("
  • ", $slut);
    $slut_dato = mktime(0, 0, 0, $slutarr[1], $slutarr[0], $slutarr[2]);
    $datoarr = array();
    for ( $i = 0; $i<=(($slut_dato-$start_dato)/86400); $i++ ) {
        $dato = $start_dato+($i*86400);
        $datoarr[] = date("d-m-Y", $dato);
    }
    if (in_array($tabeldato, $datoarr)) {
        return true;
    } else {
        return false;
    }
}


$query = mysql_query("SELECT moened FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND `user_id` = '".$user_id."'");
while ($row = mysql_fetch_array($query)) {
    if (FindesDato("01-12-2003", date("d-m-Y"), $row['moened'])) {
        echo "X";
    } else {
        echo "Y";
    }
    echo $row['moened'];
    echo "<br>";
}

}           

Jeg har en min db 4 poster alle med user_id ens og med disse 4 datoer 2004-08-08,2004-07-28, 2004-07-05, 2004-09-28
Problemet er at resultatet kun bliver:
Y2004-09-28
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 16:32 #8
Så prøv at formatere i dit udtræk sådan her:
SELECT DATE_FORMAT(moened, '%d-%m-%Y') AS moened FROM `dataindsamling`...
Avatar billede smeier Nybegynder
29. oktober 2004 - 16:36 #9
Den skal jo kun søge på år-måned. sagen skal bare ignoreres.
Avatar billede smeier Nybegynder
29. oktober 2004 - 16:36 #10
sagen=dagen
Avatar billede smeier Nybegynder
29. oktober 2004 - 16:56 #11
er det muligt at lave nogen lign $row['DATE_FORMAT(`moened`, '%Y-%m')']
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 17:00 #12
function TjekDato($start, $tabeldato) {
    $startarr = split("
  • ", $start);
    $start_dato = mktime(0, 0, 0, $startarr[1], 0, $startarr[0]);
    $ack = 0;
    $i = 0;
    while ($tmpdato != date("Y-m")) {
        $i++;
        $tmpdato = date("Y-m", strtotime("+".$i." month", $start_dato));
        if ($tabeldato == $tmpdato) {
            $ack = 1;
            break;
        }
    }
    if ($ack == 1) {
        return true;
    } else {
        return false;
    }
}

$query = mysql_query("SELECT moened FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND `user_id` = '".$user_id."'");
while ($row = mysql_fetch_array($query)) {
    if (TjekDato("2003-10", $row['moened'])) {
        echo "X";
    } else {
        echo "Y";
    }
    echo $row['moened'];
    echo "<br>";
}

}


Så nu tar funktionen i mod Y-m formatet, og er testet.
Avatar billede smeier Nybegynder
29. oktober 2004 - 17:12 #13
Som du selv siger har du testet det. Jeg forstår ikke hvorfor den kun returnerer det ene resultat. Præcis det samme som før. Giver ikke rigtigt nogen mening.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 17:14 #14
Hvis du kun får et resultat, er det din query eller data i databasen den er gal med.

Du får jo også kun en dato udskrevet, så der er kun en række i udtrækket
Avatar billede smeier Nybegynder
29. oktober 2004 - 17:25 #15
Det er jo klart at jeg kun får et resultat ud. Den skal jo søge på alle resultater inden for hver user_id. Har jo selv indskrænket den til denne måned WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."

Nogen gange sidder man altså med hovedet under armen. Sorry.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 17:27 #16
Du skal da ik undskylde. Jeg så det jo heller ikke før nu.
Virker det så som det skal nu ?
Avatar billede smeier Nybegynder
29. oktober 2004 - 17:28 #17
Faktisk ikke helt. Jeg søgte jo en liste med alle måneder fra dato1 til dagsdato. så skulle den skrive x hvis den findes for denne måned og y hvis der intet fandtes for denne måned. Ved ikke helt om det overhovedet kan lade sig gøre.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 17:32 #18
Altså hvis start dato er 2004-05 og i databasen står 2004-09
Så skal den udskrive sådan her:

2004-05 - n
2004-06 - n
2004-07 - n
2004-08 - n
2004-09 - y
2004-10 - n
Avatar billede smeier Nybegynder
29. oktober 2004 - 17:35 #19
præcis.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 17:46 #20
function TjekDato($start, $tabeldato) {
    $startarr = split("
  • ", $start);
    $start_dato = mktime(0, 0, 0, $startarr[1], 0, $startarr[0]);
    $i = 0;
    $out = "";
    while  ($tmpdato != date("Y-m")) {
        $i++;
        $tmpdato = date("Y-m", strtotime("+".$i." month", $start_dato));
        $out .= $tmpdato." - ";   
        if ($tabeldato == $tmpdato) {
            $out .= "y<br />";
        } else {
            $out .= "n<br />";
        }
    }
    return $out;
}

$query = mysql_query("SELECT DATE_FORMAT(moened, '%Y-%m') AS mdr FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND `user_id` = '".$user_id."'");
while ($row = mysql_fetch_array($query)) {
    echo TjekDato("2003-12", $row['mdr']);
}
Avatar billede smeier Nybegynder
29. oktober 2004 - 17:59 #21
Det er næsten perfekt. Den viser hele listen perfekt. og en y optræder rigtigt. Nemlig dagsdato måneden.
Hvis jeg fjerner DATE_FORMAT(`moened`, '%Y-%m') = '".$dato."' AND sker der desværre det at den kører igennem flere gange. Altså kører hele listen og viser en y. Kører hele listen og viser næste y. Hvis du forstår hvad jeg mener.
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 18:02 #22
Ja, det ved jeg godt at den gør.
Fikser det lige lidt senere
Avatar billede smeier Nybegynder
29. oktober 2004 - 18:02 #23
ok. Håber ikke at jeg bruger alt for meget af din tid :)
Avatar billede hmortensen Nybegynder
29. oktober 2004 - 18:47 #24
Jeg har lige fundet ud af at den ikke returnere febuar, men marts to gange, og jeg kan ikke få den til at lade være med det.
Avatar billede smeier Nybegynder
29. oktober 2004 - 19:07 #25
ja det er rigtigt! Underligt.
Avatar billede smeier Nybegynder
30. oktober 2004 - 12:10 #26
Evt andre der har et forslag til løsningen af "marts-problemet"?
Avatar billede smeier Nybegynder
31. oktober 2004 - 23:03 #27
Fik løst det ved en simplificeret udgave af din.
Læg et svar som tak for hjælpen.
Den ser således ud:
$i = 0;

$slutdato = date("Y-m");
while ($startdato <= $slutdato)
{
$query = mysql_query("SELECT DATE_FORMAT(moened, '%Y-%m') AS mdr FROM `dataindsamling` WHERE DATE_FORMAT(`moened`, '%Y-%m') = '".$startdato."' AND `user_id` = '".$user_id."'");
while ($row = mysql_fetch_array($query)) {
    $tjeck = $row['mdr'];
}
if (!$tjeck)
{
echo "$startdato";
echo "Du har ikke udfyldt denne dato.<br>";
}
else
{
echo "$startdato";
echo "Du har udfyld denne<br>";
}

$i++;
$startdato = date("Y-m", mktime(0, 0, 0, 12 + $i, 0, 2003));

}
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 23:05 #28
Ok

Ændre mktime selv årstal når den kommer over 12 ?
Avatar billede hmortensen Nybegynder
31. oktober 2004 - 23:07 #29
Ja det gør den sørme. Kunne ha været rart hvis jeg vidste det noget før :)
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