Avatar billede trax Nybegynder
15. april 2008 - 15:39 Der er 21 kommentarer

SQL datoformat og udtræk kun data efter dato

Jeg har lavet en form, hvor jeg bla. skal skrive hvilken dato det jeg putter ind, skal gælde fra og til.

Dette er lavet via 2 rubrikker hvor jeg indtaster fx. 15-04-2008
og 18-04-2008 (gælder fra 15 til d. 18)

sætter jeg felttype i SQL til "date" vil den have det indputtet som yyyy-mm-dd istedet for den danske dd-mm-yyyy ..
Hvordan får jeg dette ændret?


Derefter skal tingene udskrives på en side, men KUN de ting som er inden for den givne dato. dvs. alle ting som er sat til gældende fra 15-04-2008 til 18-04-2008 kun bliver vidst disse dage.
Avatar billede fant0mas Nybegynder
15. april 2008 - 16:49 #1
$sql =    "SELECT hest, pony, DATE_FORMAT(date, '%d-%m-%Y') AS `dansk` FROM tabel WHERE date >= '$startDate' AND '$endDate' <= date";
Avatar billede trax Nybegynder
15. april 2008 - 17:27 #2
Noget i denne stil?
<?php
include("connect.php"); //Inkluder filen der connecter til min database

$sql =    "SELECT * DATE_FORMAT(date, '%d-%m-%Y') AS `dansk` FROM tilbud WHERE date >= '$startDate' AND '$endDate' <= date";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while ($row = mysql_fetch_assoc($result)) { ?>

<?php  echo $row["kategori"]; ?>
///her udskrives så flere
<?php } ?>

'dansk' forstår jeg ikke rigtig- hvad går den ud på?

Hvordan løser jeg at sql forstår at min datoinput fra formen, skrevet som dd-mm-yyyy
pt. skal jeg jo indtaste yyyy-mm-dd
Avatar billede fant0mas Nybegynder
15. april 2008 - 17:45 #3
Her vil det danske format være.
$row['dansk'];

Og selvom bruger vælger efter dansk format, betyder det jo ikke, at du ikke kan sende noget andet.
Avatar billede trax Nybegynder
15. april 2008 - 17:56 #4
altså mine rows hedder
$til (fra dato dd-mm-yyyy)

og

$fra (til dato dd-mm-yyyy)

Disse er i sql sat til at være "date"
Avatar billede fant0mas Nybegynder
15. april 2008 - 18:52 #5
Må jeg se hvor du samler input fra bruger?
Avatar billede trax Nybegynder
15. april 2008 - 19:24 #6
Altså formen hvor jeg tilføjer med?
Avatar billede fant0mas Nybegynder
15. april 2008 - 19:56 #7
Korrekt!
Avatar billede trax Nybegynder
16. april 2008 - 10:46 #8
<form id="FormName" action="add_tilbud.php" method="post" name="tilfoej">
               
            <table width="400" border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td width="100">Kategori:</td>
                    <td><input type="text" name="kategori" size="24"> (Hund, kat, etc.)</td>
                </tr>
                <tr>
                    <td width="100">Navn:</td>
                    <td><input type="text" name="navn" size="50"></td>
                </tr>
                <tr>
                    <td width="100">Beskrivelse:</td>
                    <td><input type="text" name="beskrivelse" size="24"></td>
                </tr>
                <tr>
                    <td width="100">Billede:</td>
                    <td><input type="file" name="uploadedfile" size="30"></td>
                </tr>
                <tr>
                    <td width="100">F&oslash;rpris:</td>
                    <td><input type="text" name="antal_foerpris" size="3" maxlength="3"> stk <input type="text" name="foerpris" size="10" maxlength="10">&nbsp;DKK (100,00)</td>
                </tr>
                <tr>
                    <td width="100">Nupris:</td>
                    <td><input type="text" name="antal_nupris" size="3" maxlength="3"> stk <input type="text" name="nupris" size="10" maxlength="10">&nbsp;DKK (100,00)</td>
                </tr>
                <tr>
                    <td width="100">Spar:</td>
                    <td><input type="text" name="spar" size="10" maxlength="10"> DKK (100,00)</td>
                </tr>
                <tr>
                    <td width="100">G&aelig;lder fra:</td>
                    <td><input type="text" name="fra" size="10" maxlength="10">&nbsp;Til:&nbsp;<input type="text" name="til" size="10" maxlength="10"> (10-10-2000)</td>
                </tr>
            </table>
            <br>
            <input class="buttons" type="submit" value="Tilf&oslash;j tilbud">&nbsp;&nbsp;<input type="reset" value="Slet alt">
        </form>
Avatar billede fant0mas Nybegynder
16. april 2008 - 11:38 #9
Det er vist ikke den rigtige form. Skulle vi ikke vælge 2 datoer, og lave et udtræk fra databasen?
Men hedder din række dato, så ser forespørgelen sådan ud:

$startDate = mysql_real_escape_string($_POST['startDate']);
$endDate = mysql_real_escape_string($_POST['endDate']);
$query = mysql_query("SELECT *, DATE_FORMAT(dato, '%d-%m-%Y') AS dansk FROM kalender WHERE dato >= '$startDate' AND '$endDate' <= dato")or die(mysql_error());           
while ($row = mysql_fetch_assoc($query)) {
    echo $row['dansk'];
}
Avatar billede trax Nybegynder
16. april 2008 - 12:28 #10
Jo det er.

I denne form, skriver jeg fra og til dato (i fra og til input)

De skal derefter sættes ind i databasen som dd-mm-yyyy.

Derefter skal det trækkes ud på en helt anden side, hvor der sorteres efter dato (fra og til)
Avatar billede trax Nybegynder
16. april 2008 - 12:29 #11
og rækkerne hedder "til" og "fra"
Avatar billede fant0mas Nybegynder
16. april 2008 - 13:56 #12
Jeg tror egentlig jeg ville finde alle datoerne imellem, og indsætte en række for hver. Og så bruge destinct.

Nå men, -format af dato:
<form action="" method="POST">
Fra:<br><input type="text" name="fra" size="10" maxlength="10"><br>
Til:<br><input type="text" name="til" size="10" maxlength="10"><br>
<input type="submit" value="Send">
</form>
<?
if(isset($_POST['fra']) && isset($_POST['til'])){

    $format = '/^(\d\d)-(\d\d)-(\d\d\d\d)$/';

    $start = array();
    $slut = array();
    preg_match($format, $_POST['fra'], $start);
    preg_match($format, $_POST['til'], $slut);

    $cur_fra = mktime(0, 0, 0, $start[2], $start[1], $start[3]);
    $cur_til = mktime(0, 0, 0, $slut[2], $slut[1], $slut[3]);

    echo $fra = date('Y-m-d',$cur_fra);
    echo '<br>';
    echo $til = date('Y-m-d',$cur_til);
}
?>
Det burde nu være en smal sag at sætte ind i dit script.
Avatar billede trax Nybegynder
16. april 2008 - 14:11 #13
php'en jeg indsætter i databasen med, ser sådan her ud:

<?php
        include("connect.php");
if (isset($_FILES['uploadedfile'])){
if (!move_uploaded_file($_FILES['uploadedfile']['tmp_name'], "images/".$_FILES['uploadedfile']['name'])){
  echo "Der opstod en fejl, luk venligst vinduet og prøv igen.. :/";
} else {
  echo "Filen er uploadet - ".$_FILES['uploadedfile']['name']."<br>";
  mysql_query("INSERT INTO `tilbud` (`billede`) VALUES ('images/".$_FILES['uploadedfile']['name']."')");
}
}

if (isset($_POST['submit'])){
$sql="INSERT INTO tilbud (kategori, navn, beskrivelse, antal_foerpris, foerpris, antal_nupris, nupris, spar, fra, til) VALUES ('$_POST[kategori]','$_POST[navn]','$_POST[beskrivelse]','$_POST[antal_foerpris]','$_POST[foerpris]','$_POST[antal_nupris]','$_POST[nupris]','$_POST[spar]','$_POST[fra]','$_POST[til]')";
if (!mysql_query($sql,$con)){
  die('Error: ' . mysql_error());
}
}
mysql_close($con);


?>
Avatar billede trax Nybegynder
16. april 2008 - 14:12 #14
er ikke lige med på hvordan det sættes sammen med mit.
Avatar billede fant0mas Nybegynder
16. april 2008 - 14:31 #15
<?php
include("connect.php");

if (isset($_FILES['uploadedfile'])){
    if (!move_uploaded_file($_FILES['uploadedfile']['tmp_name'], "images/".$_FILES['uploadedfile']['name'])){
        echo "Der opstod en fejl, luk venligst vinduet og prøv igen.. :/";
    } else {
        echo "Filen er uploadet - ".$_FILES['uploadedfile']['name']."<br>";
        mysql_query("INSERT INTO `tilbud` (`billede`) VALUES ('images/".$_FILES['uploadedfile']['name']."')");
    }
}

if (isset($_POST['submit'])){

    $format = '/^(\d\d)-(\d\d)-(\d\d\d\d)$/';

    $start = array();
    $slut = array();
    preg_match($format, $_POST['fra'], $start);
    preg_match($format, $_POST['til'], $slut);

    $cur_fra = mktime(0, 0, 0, $start[2], $start[1], $start[3]);
    $cur_til = mktime(0, 0, 0, $slut[2], $slut[1], $slut[3]);

    $fra = date('Y-m-d',$cur_fra);
    $til = date('Y-m-d',$cur_til);

    $sql="INSERT INTO tilbud (kategori, navn, beskrivelse, antal_foerpris, foerpris, antal_nupris, nupris, spar, fra, til) VALUES ('$_POST[kategori]','$_POST[navn]','$_POST[beskrivelse]','$_POST[antal_foerpris]','$_POST[foerpris]','$_POST[antal_nupris]','$_POST[nupris]','$_POST[spar]','$fra','$til')";
    if (!mysql_query($sql,$con)){
        die('Error: ' . mysql_error());
    }
}
mysql_close($con);
?>

Hvorfor indsætter du billedet separat i tabellen?
Avatar billede trax Nybegynder
16. april 2008 - 15:34 #16
Jeg var ved at sætte dem sammen.

men det virker ikke, det har jeg et andet spørgsmål oppe at køre på.
Avatar billede trax Nybegynder
16. april 2008 - 15:43 #17
Har sat dem sammen nu til:

if (isset($_POST['submit']) . isset($_FILES['uploadedfile'])){
Avatar billede trax Nybegynder
17. april 2008 - 16:38 #18
Jeg mangler stadigt lige at få styr på udgangsdelen.

På en side (under admin) skal jeg udskrive datoen - dette gør jeg via <?php  echo $row["fra"]; ?> og <?php  echo $row["til"]; ?> men vil gerne have det skriver i dd-mm-yyyy istedet for den direkte udtræk fra databasen yyyy-mm-dd


derudover har jeg en "vis_tilbud_public.php hvor jeg udskriver tilbudene i, men de skal sorteres og udskrives efter dato, så kun "dags dato" tilbud bliver vist.

denne fil ser sådan her ude:

<?php
include("connect.php");

$sql = "SELECT * FROM tilbud";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

while ($row = mysql_fetch_assoc($result)) { ?>

<?php  echo $row["kategori"]; ?>
<?php  echo $row["navn"]; ?>
etc. etc.



<?php } ?>

gør jeg dette ved:
$sql =    "SELECT * DATE_FORMAT(date, '%d-%m-%Y') FROM tilbud WHERE date >= '$fra' AND '$til' <= date";
Avatar billede fant0mas Nybegynder
17. april 2008 - 19:33 #19
$sql = "SELECT *, DATE_FORMAT(dato, '%d-%m-%Y')AS dansk FROM tilbud";
...
...
...
...
while ($row = mysql_fetch_assoc($result)) {
echo $row['dansk'];
echo $row['kategori'];
echo $row['navn'];
}


Dette gør så outputtet bliver i DK format.
DATE_FORMAT(dato, '%d-%m-%Y')
Avatar billede fant0mas Nybegynder
17. april 2008 - 19:40 #20
Ved nærmere eftertanke bliver det vel:
$sql = "SELECT *, DATE_FORMAT(fra, '%d-%m-%Y')AS fra_dk, DATE_FORMAT(til, '%d-%m-%Y')AS til_dk FROM tilbud";
...
...
...
...
while ($row = mysql_fetch_assoc($result)) {
echo $row['fra_dk'];
echo $row['til_dk'];
echo $row['kategori'];
echo $row['navn'];
}
Avatar billede trax Nybegynder
28. april 2008 - 12:08 #21
Så er jeg tilbage igen - har endelig fået tid til at gøre det færdigt.

Jeg mangler nu at få sorteret vis_tilbud_public.php efter dato - sådan at det kun er de tilbud som gælder fra fx. 10-10-2008 til 18-10-2008 der bliver vist mellem d. 10-10-2008 og 18-10-2008.

Jeg har prøvet lidt forskellige ting, uden resultat. fx:

$sql =    "SELECT *  FROM tilbud WHERE fra >= '$fra' AND '$til' <= til";
(viser alt)

$sql =    "SELECT *  FROM tilbud WHERE date >= '$fra' AND '$til' <= date";
(skriver at colum "date" ikke findes)

jeg udskriver resultaterne med <?php echo $row["row_name"]; ?>
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