Joachimv Skrevet 25. oktober 2009 Del Skrevet 25. oktober 2009 (endret) Prøver å få til en gjestebok på nettsida mi med bruk av SQL (ja, er en del av ei skoleoppgave). Problemet ser ut til å være dato-greiene med SQL-servern. Får lagt inn ting i basen, men det kommer med samme dato (eller, 00-00-00 00:00:00 står det riktignok). PHP-koden gir dato så det er rett liksom. gjest.php <h1>Gjestebok!</h1><br> <h2>Legg igjen ein kommentar då vell!</h2><br><br> <form method="post" action="?gjest" name="gjest"> Namn <input maxlength="30" size="15" name="namn"><br><br> Kommentar (1000 teikn): <textarea cols="50" rows="3" name="kommentar"> </textarea> <br> <br> <input name="store" value="Lagre" type="submit"></form> <?php include 'db.php'; $kommentar = $_POST['kommentar']; $namn = $_POST['namn']; $store = $_POST['store']; if ($store) store($namn,$kommentar); function store($namn,$kommentar) { date_default_timezone_set("Europe/Oslo"); // to avoid warning tha timezone is ot set $dato = date("Y-M-D H:i:s"); // retrieve date from the server $resultat = mysql_query("INSERT INTO gjestdb VALUES ('$dato', '$namn', '$kommentar')"); // sender en sql streng til mysql serveren med verdiene som skal inn if (!$resultat) // resultat f�r verdien false hvis sql setningen ikke var vellykket echo "<br><b>Ikke godkjent!</b>"; else { include 'gjest.php'; including the last one, stored now } $store = false; } function retrieve() { $query = "SELECT * FROM gjestdb ORDER BY dato DESC"; $result = mysql_query($query); $number = mysql_numrows($result); $runner = 0; while ($runner < $number) { $dato = mysql_result($result, $runner,"dato"); $namn = mysql_result($result, $runner,"namn"); $kommentar = mysql_result($result, $runner,"kommentar"); echo "<b>$dato $namn </b><br> $kommentar <br>"; $runner++; // $runner = $runner + 1; } } ?> db.php <?PHP $result = mysql_connect("server", "username", "password"); if ($result == FALSE) echo "Kobla til SQL-basen"; $result = mysql_select_db("joachv09"); if (!$result) echo "Valgt SQL-base er ikkje riktig"; ?> Endret 25. oktober 2009 av viiite Lenke til kommentar
Knut_F Skrevet 25. oktober 2009 Del Skrevet 25. oktober 2009 Prøv å bruke denne while løkken isteden. while ($row = mysql_fetch_array($result, MYSQL_BOTH)) { echo "Dato: $row[0] Beskjed: $row[1] Navn: $row[2]"; } Lenke til kommentar
Joachimv Skrevet 25. oktober 2009 Forfatter Del Skrevet 25. oktober 2009 what? bytte den ut med denne? while ($runner < $number) { $dato = mysql_result($re .... $namn </b><br> $kommentar <br>"; $runner++; // $runner = $runner + 1; } I så fall gikk det ikke det heller. Byttet dog ikke ut noe i din kode. Skal kanskje gjøre det? Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 27. oktober 2009 Del Skrevet 27. oktober 2009 Kan du si meg hvordan tabellen (gjestdb) er bygd opp? F.eks. koble til mysql serveren hvis du har tilgang til dette (direkte på kommandolinje eller phpMyAdmin) og kjøre "EXPLAIN gjestdb;", og poste resultatet her. Det jeg vil vite er hvilke datatyper de forskjellige kolonnene er definert som, og hva de heter. Lenke til kommentar
Joachimv Skrevet 28. oktober 2009 Forfatter Del Skrevet 28. oktober 2009 Dette du mener? Field Type Null Key Default Extra dato datetime NO PRI NULL namn varchar(40) NO NULL kommentar varchar(1000) NO NULL Lenke til kommentar
Gjest Slettet-rXRozPkg Skrevet 28. oktober 2009 Del Skrevet 28. oktober 2009 (endret) $dato = date("Y-M-D H:i:s"); Vil gi f.eks: 2009-Oct-Wed 10:41:12 Parameterene du gir til date er feil. Illegal DATETIME, DATE, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00 00:00:00' or '0000-00-00'). Ref: http://dev.mysql.com/doc/refman/5.1/en/datetime.html Bytt til: $dato = date("Y-m-d H:i:s"); Les om parameterene her: http://no.php.net/manual/en/function.date.php En annen ting er at det å bruke et datofelt som primary key ikke er spesielt lurt, da ting vil dø/krasje/ikke fungere skikkelig (alt ettersom hvordan du behandler feil) den gangen to brukere legger inn en beskjed i samme sekund. Nå blir sikkert ikke dette noe problem for deg i denne skoleoppgaven, men du bør tenke på det til neste gang :o) Endret 28. oktober 2009 av Slettet-rXRozPkg Lenke til kommentar
Joachimv Skrevet 28. oktober 2009 Forfatter Del Skrevet 28. oktober 2009 (endret) Nå får jeg beskjed om at linje 52 er feil.. altså "?>" melding: Parse error: syntax error, unexpected $end in Fra linje 38-52 function retrieve() { $query = "SELECT * FROM gjestdb ORDER BY dato DESC"; $result = mysql_query($query); $number = mysql_numrows($result); $runner = 0; while ($runner < $number) { $dato = mysql_result($result, $runner,"dato"); $namn = mysql_result($result, $runner,"namn"); $kommentar = mysql_result($result, $runner,"kommentar"); echo "<b>$dato $namn </b><br> $kommentar <br>"; $runner++; // $runner = $runner + 1; } } ?> Endret 28. oktober 2009 av viiite Lenke til kommentar
footnote Skrevet 28. oktober 2009 Del Skrevet 28. oktober 2009 Trur ikke feilen din er på de linjene, du har sannsynligvis glemt å avslutte en tidligere funksjon med }. PHP parseren forventet ikke å finne slutten på skriptet da noe ikke er avsluttet enda. post gjerne hele koden i en codebox dersom du ikke finner ut av det (eller på pastie.org) Lenke til kommentar
Joachimv Skrevet 28. oktober 2009 Forfatter Del Skrevet 28. oktober 2009 Fant det ut Er svaksynt ser du, så ser ikke alt Eneste nå er at jeg ønsker de skal bli redirecta etter de har trykt "lagre". Lenke til kommentar
TheClown Skrevet 28. oktober 2009 Del Skrevet 28. oktober 2009 Skriv header ("Location: index.php"); i fila di (erstatt index.php med den siden som skal redirectes til Lenke til kommentar
Joachimv Skrevet 28. oktober 2009 Forfatter Del Skrevet 28. oktober 2009 Veit, prøvde det men da fungerte ingenting.. Har det på ei anna side. Prøvde en gang, så gadd ikke mer Skal nok få det til. Visninga blir ikke helt slik den skal være etter at folk har trykket på "lagre", så kan like godt redirekte de tilbake til utgangspunktet før de har skrevet noe. Men skulle gjerne hatt en div rundt det folk har skrevet. prøvde å lage en div rundt retrieve()-funksjonen og det men fungerte ikke. Vil gjerne ha en annen farge og border på det liksom. Skal prøve meg mer fram der også - prøvde bare en gang der også Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå