Avatar billede m3lgaard Nybegynder
26. januar 2008 - 13:25 Der er 5 kommentarer

Simpel PHP mysql_query med INSERT INTO giver fejl(nybegynder )

Hej

Jeg er lige begyndt at programmere og har kastet mig over HTML, CSS og PHP+MySQL i den rækkefølge. Jeg er stadig ved at få det grundlæggende på plads, så håber jeg har lavet en simpel fejl. Fejlbeskeden ses her http://www.randomblog.dk/nyhedadmin.php sidst på siden. Jeg vil for lærings og underholdnings skyld lave en simpel side med formular, databasegemning og loading af databasedata. Her er koden:

<html>

<head>
</head>

<body>

    <form action="nyhedadmin.php" method="post">
            Overskrift<input type="text" name="overskrift"><br />
            <textarea name="nyhed" rows="50" cols="80"> Skriv nyhed her</textarea>
        <input type="Submit" name="Submit" value="Submit">
    </form>


<?php
    echo "php start";
    $srv = "x";
    $user = "x";
    $pw = "x";
    echo " servervaluesloaded ";
    $dbname = "morte16_nyhedsystest";
    echo " qry loaded ";
    mysql_connect($srv, $user, $pw) or die(mysql_error());
    echo " connected ";
    mysql_select_db($dbname) or die(mysql_error());
    echo "selected db";

if (isset($_POST['Submit']));
    {   
    $overskrift = $_POST['overskrift'];
    echo "Overskrift loaded";
    $nyhed = $_POST['nyhed'];
    echo "Nyhed variabel loaded";
    $datetime = mktime(date("F"), date("j"), date("Y"), date("H"), date("i"));
    echo "Datetime kommando loaded";
    mysql_query("INSERT INTO nyhed (overskrift, nyhed, datetime) VALUES ($overskrift, $nyhed, $datetime)") OR DIE(mysql_error());

    echo "<br /><br /><br />Nyhed kopieret til DB";

    }

    echo " if loaded<br /><br /><br /><br /><br /><br />";
    $nyhedslctqry = "SELECT * FROM nyhed";
    $result = mysql_query($nyhedslctqry) or die(mysql_error());

    $row = mysql_fetch_array($result) or die(mysql_error());
    echo "<h1>".$row['overskrift']."</h1><br /><br />".$row['datetime']."<br /><br />".$nyhed;
    mysql_close;

?>



</body>

</html>

Der er en tabel kaldet nyhed med 4 kolonner.
1. "id", som er et int id-nummer, auto-increment og primary key.
2. "overskrift", som er overskriften, man inputter i tekstfeltet. Varchar(50).
3. "nyhed", som er nyheden i en "text"-type.
4. "datetime", som jeg har tænkt mig at generere mit eget format med mktime og så gemme den mktime som en string i en variabel, og gemme stringen i databasen.

Det er denne linje, som giver fejl:
mysql_query("INSERT INTO nyhed (overskrift, nyhed, datetime) VALUES ($overskrift, $nyhed, $datetime)") OR DIE(mysql_error());

Lad mig vide, hvis du kan se fejlen, tak :).
Avatar billede erikjacobsen Ekspert
26. januar 2008 - 13:41 #1
datetime er et reserveret ord. Find på et andet eller skriv `datetime`
Avatar billede erikjacobsen Ekspert
26. januar 2008 - 13:42 #2
Du skal også kigge på http://php.net/mktime - parametrene er ikke som du tror
Avatar billede erikjacobsen Ekspert
26. januar 2008 - 13:43 #3
...eller rettere - hvad mener du, at du gemmer i feltet? "mit eget format" ? Dato og tid "skal altid" gemmes i et felt af type DATETIME - og så kan man vise det til brugeren på en anden måde.
Avatar billede m3lgaard Nybegynder
26. januar 2008 - 14:11 #4
Jeg havde den ide, at jeg ville få en string værdi ud af mktime, som f.eks "Januar 26 2008", som jeg så ville gemme under datetime i tabellen, således at der stod Januar 26 2008 i tabelcellen, som jeg så senere kunne hente som en ren tekst/string værdi via select. Fik kommandoen fra en tutorial. Har fjernet dato-delene indtil videre, så jeg kan lokalisere problemet nærmere.

Får denne fejlbesked nu på samme linje: http://www.randomblog.dk/nyhedadmin.php

Koden her:

<head>
</head>

<body>

    <form action="nyhedadmin.php" method="post">
            Overskrift<input type="text" name="overskrift"><br />
            <textarea name="nyhed" rows="50" cols="80"> Skriv nyhed her</textarea>
        <input type="Submit" name="Submit" value="Submit">
    </form>


<?php
    echo "php start";
    $srv = "x";
    $user = "x";
    $pw = "x";
    echo " servervaluesloaded ";
    $dbname = "morte16_nyhedsystest";
    echo " qry loaded ";
    mysql_connect($srv, $user, $pw) or die(mysql_error());
    echo " connected ";
    mysql_select_db($dbname) or die(mysql_error());
    echo "selected db";

if (isset($_POST['Submit']));
    {   
    $overskrift = $_POST['overskrift'];
    echo "Overskrift loaded";
    $nyhed = $_POST['nyhed'];
    echo "Nyhed variabel loaded";
    mysql_query("INSERT INTO nyhed2 (overskrift, nyhed) VALUES ($overskrift, $nyhed)") OR DIE(mysql_error());

    echo "<br /><br /><br />Nyhed kopieret til DB";

    }

    echo " if loaded<br /><br /><br /><br /><br /><br />";
    $nyhedslctqry = "SELECT * FROM nyhed2";
    $result = mysql_query($nyhedslctqry) or die(mysql_error());

    $row = mysql_fetch_array($result) or die(mysql_error());
    echo "<h1>".$row['overskrift']."</h1><br /><br />".$row['datetime']."<br /><br />".$nyhed;
    mysql_close;

?>



</body>

</html>
Avatar billede erikjacobsen Ekspert
26. januar 2008 - 14:22 #5
Åh ja, den overså jeg i første omgang - jeg plejer at stoppe ved den første fejl... ;)
Du skal nok hellere:

    mysql_query("INSERT INTO nyhed2 (overskrift, nyhed) VALUES ('$overskrift', '$nyhed')") OR DIE(mysql_error());

Når du kigger på linket til mktime ser du

  int mktime  ([ int $hour  [, int $minute  [, int $second  [, int $month  [, int $day  [, int $year  [, int $is_dst  ]]]]]]] )

hvor det første "int" betyder, at den afleverer et tal, ikke en streng.
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
Computerworld tilbyder specialiserede kurser i database-management

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