Avatar billede syngredk Nybegynder
17. april 2006 - 16:34 Der er 16 kommentarer og
1 løsning

Skrivning til databasen (MySQL/PHP)

Jeg har følgende felter i min database: photo_album
- id
- ip
- year (f.eks. 2005, hvis det er året for albummet)
- date (den dag, billeder blev taget)
- upright (den dag (lige nu) hvor man opretter i databasen)
- title
- description
- author
- folder

Alle felter kommer fint med, dog IKKE "date". Denne bliver fortsat ved at være 0000-00-00 uanset hvad. Nogle der kan løse problemet, således at den angivet dato i "date" også kommer med ind i databasen?

photo.add.php -->
<?php include ('../includes/menu.php'); ?>

<form action="photo.config.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="referer" value="photo.add">

  <table border="0" width="100%" height="204">
    <tr>
      <td width="11%" height="25">Overskrift</td>
      <td width="1%" height="25">:</td>
      <td width="88%" height="25"><input type="text" name="title" size="42"></td>
    </tr>
    <tr>
      <td width="11%" height="81">Beskrivelse</td>
      <td width="1%" height="81">:</td>
      <td width="88%" height="81"><textarea rows="3" name="description" cols="35"></textarea></td>
    </tr>
    <tr>
      <td width="11%" height="21">&nbsp;</td>
      <td width="1%" height="21"></td>
      <td width="88%" height="21"></td>
    </tr>
    <tr>
      <td width="11%" height="25">Årstal</td>
      <td width="1%" height="25">:</td>
      <td width="88%" height="25"><input type="text" name="year" size="13">
        (skriv årstal for billederne, f.eks. 2006, 2007)</td>
    </tr>
    <tr>
      <td width="11%" height="21">Dato for billeder</td>
      <td width="1%" height="21">:</td>
      <td width="88%" height="21"><input type="text" name="date" size="13">
        (skriv årår-dd-mm)</td>
    </tr>
    <tr>
      <td width="11%" height="21">Mappens navn</td>
      <td width="1%" height="21">:</td>
      <td width="88%" height="21"><input type="text" name="folder" size="42"></td>
    </tr>
    <tr>
      <td width="11%" height="21">&nbsp;</td>
      <td width="1%" height="21"></td>
      <td width="88%" height="21"></td>
    </tr>
    <tr>
      <td width="11%" height="25">Fotograf/oprettet af</td>
      <td width="1%" height="25">:</td>
      <td width="88%" height="25"><input type="text" name="author" size="42"></td>
    </tr>
    <tr>
      <td width="11%" height="21">&nbsp;</td>
      <td width="1%" height="21"></td>
      <td width="88%" height="21"></td>
    </tr>
    <tr>
      <td width="11%" height="1"></td>
      <td width="1%" height="1"></td>
      <td width="88%" height="1"><input type="submit" value="Opret fotoalbum" name="B1">&nbsp;
        <input type="reset" value="Slet alt" name="B2">
        <input type="hidden" name="ip" value="<?php print $_SERVER['REMOTE_ADDR']; ?>"></td>
    </tr>
  </table>
</form>

photo.config.php -->

<?php
include('../access/access_config.php');

if ($_POST['referer'] == 'photo.add') {

function add_slash($string)
{
    if ($string[strlen($string)-1] != '/')
        return $string.'/';
    else return $string;


$root = add_slash($_SERVER['DOCUMENT_ROOT']);
$mappe_navn = $_POST['folder'];
$mappen = $root.'photoalbum/'.$mappe_navn;
echo 'Rel path: '.$mappen;
echo 'Abs path: '.realpath($mappen);
mkdir($mappen);

mysql_query("INSERT INTO photo_album (ip, year, date, upright, title, description, author, folder) VALUES ('".$_POST['ip']."','".$_POST['year']."','".$_POST['date']."',NOW(),'".$_POST['title']."','".$_POST['description']."','".$_POST['author']."','".$_POST['folder']."')") or die(mysql_error());

}

?>
Avatar billede erikjacobsen Ekspert
17. april 2006 - 16:39 #1
Du skal bruge formatet: yyyy-mm-dd
Avatar billede syngredk Nybegynder
17. april 2006 - 16:41 #2
erikjacobsen --> Yes, men hvordan sætter jeg den lige ind med de korrekte tegn m.v.?
$_POST['date']."', - det er der, den skal rettes?
Avatar billede erikjacobsen Ekspert
17. april 2006 - 18:01 #3
Jeg ved ikke lige hvad du mener ... hvis yyyy-mm-dd ikke er formatet, der tastes ind, så skal det laves om til det format.
Avatar billede fixxxer Nybegynder
18. april 2006 - 12:28 #4
$dato = strtotime($_POST['date']);
$ny_dato = date('Y-m-d', $dato);

I din query, bruger du så $ny_dato i stedet for $_POST['date']
Avatar billede syngredk Nybegynder
18. april 2006 - 15:52 #5
Skal se, om jeg har forstået det korrekt:

mysql_query("INSERT INTO photo_album (ip, year, date, upright, title, description, author, folder) VALUES ('".$_POST['ip']."','".$_POST['year']."','".$_POST['Y-m-d', $dato']."',NOW(),'".$_POST['title']."','".$_POST['description']."','".$_POST['author']."','".$_POST['folder']."')") or die(mysql_error());
Avatar billede fixxxer Nybegynder
18. april 2006 - 22:13 #6
Nej det har du fået helt galt fat i..

$_POST variablen er et array og ikke en funktion.

I stedet for ovenstående (som var ment som et eksempel, for at synliggøre hvad der gøres) kan du blot overskirve $_POST['date'] på følgende måde:

$dato = strtotime($_POST['date']);
$_POST['date'] = date('Y-m-d', $dato);

Herefter behøver du ikke ændre din opringelige SQL statement.
Avatar billede syngredk Nybegynder
19. april 2006 - 21:39 #7
Nu ser det således ud:

mysql_query("INSERT INTO photo_album (ip, year, date, upright, title, description, author, folder) VALUES ('".$_POST['ip']."','".$_POST['year']."','".$dato = strtotime($_POST['date']);
$_POST['date'] = date('Y-m-d', $dato);."',NOW(),'".$_POST['title']."','".$_POST['description']."','".$_POST['author']."','".$_POST['folder']."')") or die(mysql_error());

Jeg får følgende fejl:
Parse error: parse error, unexpected ';' in
- det må være der ved datoen?
Avatar billede fixxxer Nybegynder
20. april 2006 - 10:43 #8
Hvorfor prøver du at omskrive mit eksempel ind i din SQL statement?

"Herefter behøver du ikke ændre din opringelige SQL statement."

Du behøver netop ikke at ændre noget som helst i din SQL statement fra 17/04 2006     16:34:31, hvis du blot indsætter de følgende to linjer før statementen..

$dato = strtotime($_POST['date']);
$_POST['date'] = date('Y-m-d', $dato);
Avatar billede syngredk Nybegynder
20. april 2006 - 19:39 #9
fixxxer --> Nu har jeg gjort som du siger, men den giver lidt problemer i databasen

Ved "date" i databasen skriver den nu "2007-08-04" og ikke "2006-20-04" som jeg har bedt den om. Virker lidt underligt?
Avatar billede fixxxer Nybegynder
24. april 2006 - 20:18 #10
Når php ser et format som yyyy-dd-mm tror den at den at den har med formatet yyyy-mm-dd at gøre.

Derfor bliver 2006-20-04 til 12 måneder + 8 måneder, derfor + 1 år og giver således:

2007-08-04


Er der en speciel årsag til at du vil have at brugeren indtaster i formattet yyyy-dd-mm?
Avatar billede syngredk Nybegynder
24. april 2006 - 22:00 #11
fixxxer --> Det er den dato, hvor billedet i den aktuelle album er blevet taget. På den måde ved, besøgende at billeder er blevet taget den angivet dato "date".
Avatar billede fixxxer Nybegynder
25. april 2006 - 09:39 #12
Nu kender jeg godt funktionen af en dato, det jeg spørger dig om er om der en særlig årsag til at du vil have at brugeren indtaster, i for mig at se et ukorant format, i stedet for i ISO-formatet yyyy-mm-dd ?

For det er årsagen til at din dato bliver tolket som den gør når du skriver 2006-20-04
Avatar billede syngredk Nybegynder
25. april 2006 - 15:19 #13
Hvis vi siger jeg opretter albumet i dag, men billederne egentlig stammer fra i går, skal det være datoen i går der skal kunne angives i det felt.
Avatar billede fixxxer Nybegynder
25. april 2006 - 15:37 #14
Vi snakker om to vidt forskellige ting:

-- du fortæller mig hvad du vil bruge din dato til

-- jeg prøver at forklare dig at det handler om formatet af din dato, ikke funktionen heraf.


Du indtastet i din formular en dato med formatet yyyy-dd-mm, eller på dansk åååå-dd-mm .

Når PHP parser en dato med strtotime() kigger den på opbygningen af den givne streng:

- først ser den 4 tal efterfulgt af en bindestreg og herefter 2 tal, igen efterfulgt af bindestreg og 2 tal. Det tror PHP er et datoformat lig: yyyy-mm-dd !!

Hvis du ikke forstår hvad jeg mener, vil jeg gerne forsøge at forklare mig igen. Dog vil jeg påpege at min tålmodighed efterhånden er begrænset, i det du i to indlæg ikke har formået at stille spørgsmåltegn ved mine kommentarer, men blot afværget dem med ligegyldig forklaring af hvad du bruger din dato til.
Avatar billede syngredk Nybegynder
25. april 2006 - 15:48 #15
fixxxer --> Jeg er meget glad for, at du vil hjælpe. Og kan selvfølgelig godt forstå, at din tålmodighed er begrænset. Men jeg forsøger, men tror vi taler lidt forbi hinanden.

Det jeg forstår udfra dine indlæg, efter en nærmere gennemlæsning igen er:

At når der bliver skrevet f.eks. 2006-04-25 i formularen kan PHP ikke tolke det, og skriver det derfor forkert ind i databasen?

dit indlæg: 24/04-2006 20:18:26
- bruger skriver ikke yyyy-dd-mm -> men yyyy-mm-dd
Avatar billede syngredk Nybegynder
25. april 2006 - 15:55 #16
fixxxer --> nu vkan jeg bedre forstå at jeg lyder dybt åndsvag.. Tror lige jeg vender tilbage om 2 min...
Avatar billede syngredk Nybegynder
25. april 2006 - 15:58 #17
Nu funger det.. Du havde fuldkommen ret, den fik en forkert kommanda (yy-dd-mm) Derfor fejlen. Det er nu rettet og det hele fungere som det skal. Jeg har smidt lidt ekstra point i puljen, som tak for din store tålmodighed.
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