Permalänk
Medlem

[PHP] - Visa info från databas

<?php mysql_connect ('SERVER', 'ANVÄNDARE', 'LÖSENORD') ; mysql_select_db ('DATABAS'); $sql = "SELECT * FROM nyheter WHERE id=$id"; $result = mysql_query($sql) or print ("Kan inte läsa av tabell 'nyheter'.<br />" . $sql . "<br />" . mysql_error()); while ($row = mysql_fetch_array($result)) { $date = date("l F d Y",$row["timestamp"]); $title = $row["title"]; $entry = $row["entry"]; print "<b>$title</b><br><br>"; print "$entry<br><br>"; print "skrivet: $date<br><br>"; } ?>

ELECT * FROM nyheter WHERE id=
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\Program\wamp server 5\www\dozo\visa_nyheter.php on line 10

Usch. Fattar inte vad problemet är... Enligt felmedelandet så ligger det i rad 10: while ($row = mysql_fetch_array($result)). Kan ni hjälpa mig? Vad skall jag ändra på?

Permalänk
Medlem

$sql = "SELECT * FROM nyheter WHERE id=".intval($_GET['id']);

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Medlem

He he, Shark^ nu får jag inga felmeddelanden bara en vit skärm utan inlägg. Och ja, det finns info i databasen

Permalänk
Medlem

$result = mysql_query($sql) or die("Kan inte läsa av tabell 'nyheter'.<br />" . $sql . "<br />" . mysql_error());

också

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Medlem

Nepp, tyvärr. Inget visas...

Permalänk
Medlem

vad säger

echo $sql;

då? du hämtar väl id från get?

Visa signatur

~ When there's no more room in hell, the dead will walk the earth. ~

Permalänk
Medlem

Om jag kör echo $sql; så får jag SELECT * FROM nyheter WHERE id=0 (felmeddelande). Och ja, jag hämtar ID från GET.

Finns det inget annat sätt att mata ut STAMPS på? För detta verkar inte funkar

ÄNDRAT: Skriv ni gärna något nytt sätt så kollar jag det imorn. Måste sova nu. Tack på förhand

Permalänk
Hedersmedlem

Ett id kan inte vara lägre än 1 så du har något fel någonstans.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

vad händer om du kör med "SELECT * FROM nyheter" bara?
känns ju lite onödigt att köra en while-historia om du bara skall hämta ett enda inlägg. (WHERE ID = ...) men det kanske bara är jag som tycker så?

för att ordnung på timestamp sen, så har jag för mig att man måste köra "SELECT UNIX_TIMESTAMP(timestamp) AS timestamp, title, entry FROM nyheter" för att man ska kunna köra date() på tidsstämpeln.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

while ($row = mysql_fetch_array($result)) { $date = date("l F d Y"); $title = $row["title"]; $entry = $row["entry"]; print "<b>$title</b><br>"; print "skrivet: $date<br><br>"; print "$entry<br><br>"; }

Yes! Det funkade. Jag ändrade lite värden och vips! jovnas jag gjorde som du sa och det löste sig.

Nu har jag en annan fråga. Jag har nu olika inlägg med olika datum. Hur skall jag få dom att visas 'nyaste först'? Det är en loop tror jag... ja, och så vill jag specificera hur många jag vill visa.

Kan någon vänlig själ hjälpa mig bitte?

ÄNDRAT: Och ja, min SQL SELECT ser ut såhär nu.

$sql = "SELECT * FROM nyheter WHERE id=1 ";

Permalänk
Medlem

SELECT * FROM nyheter ORDER BY timestamp DESC LIMIT 10;
visar de 10 senaste nyheterna.
DESC sorterar i fallande ordning (ex: 10, 9, 8, 7 osv), dvs den nyhet som har högst värde på timestamp hamnar överst.
ASC hade sorterat åt andra hållet (ex: 7, 8, 9, 10 osv) och är default om man inte anger något av dem...

vill du sedan visa nästa tio nyheter kör du följande;
SELECT * FROM nyheter ORDER BY timestamp DESC LIMIT 9, 10;
(eller LIMIT 10 OFFSET 9)

(som vanligt(?) med datorer, så börjar offseten räkna på 0 därav 9an...)

[edit]har du en auto_increment-kolumn (id?) så kan du sortera på den istället om du vill...[/edit]

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

Jo, tack! Löste faktiskt det själv. Kollade på PHP.net (sidan är omöjlig att hitta på men det gick).

$sql = "SELECT * FROM nyheter ORDER BY timestamp DESC LIMIT 5";

Men jag har hamna i timestamp trubbel. Allt fungerar om jag kör på det autogenererade datumet på min skriv_nyheter.php-sida. Men om jag väljer ett av mina svenska datum så blir det knas.

Warning: date() [function.date]: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in c:\Program\wamp server 5\www\dozo\visa_nyheter.php on line 14

Här är min skriv_nyheter.php-sida. Felet kanske ligger däri? :/

<?php $current_month = date("F"); $current_date = date("d"); $current_year = date("Y"); $current_time = date("H:i"); ?> <form method="post" action="uppdatera_nyheter.php"> <table> <tr> <td> <b>datum:</b> <select name="month"> <option value="<? echo $current_month ?>"><? echo $current_month ?></option> <option value="Januari">Januari</option> <option value="Februari">Februari</option> <option value="Mars">Mars</option> <option value="April">April</option> <option value="Maj">Maj</option> <option value="Juni">Juni</option> <option value="Juli">Juli</option> <option value="Augusti">Augusti</option> <option value="September">September</option> <option value="Oktober">Oktober</option> <option value="November">November</option> <option value="December">December</option> </select> <input type="text" name="date" size="2" value="<? echo $current_date ?>"> <select name="year"> <option value="<? echo $current_year ?>"><? echo $current_year ?></option> <option value="2004">2004</option> <option value="2005">2005</option> <option value="2006">2006</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2008</option> <option value="2010">2010</option> </select> <input type="text" name="time" size="5" value="<? echo $current_time ?>"> </td> </tr> <tr> <td> <b>titel:</b> <input type="text" name="title" size="40"> </td> </tr> <tr> <td> <textarea cols="80" rows="20" name="entry"></textarea> </td> </tr> <tr> <td> <input type="submit" name="submit" value="Skicka"> </td> </tr> </table> </form>

Jag vill alltså gärna välja mina svenska datum utan att få fel.

Permalänk
Medlem

om jag förstår dig rätt vill du kunna editera datumet på en redan befintligt nyhet?

du måste nog formatera strängen som MySQL vill ha den för att du ska kunna uppdatera timestampen.

du måste alltså klistra ihop en sträng som ser ut i stil med detta för att det ska funka;
20041008154400 (alltså ÅÅÅÅMMDDTTMMSS)

ex; $stamp = $_POST['year'].$_POST['month'].$_POST['day']

ändra också <option value="Januari">Januari</option> till <option value="01">Januari</option> så att du får siffror istället...

mer info här; http://dev.mysql.com/doc/mysql/en/DATETIME.html

[edit]om du menade hur du kan visa tiden på svenska så kolla här;
http://forum.sweclockers.com/showthread.php?s=&threadid=34839...
om du inte redan sett den tråden då... [/edit]

Visa signatur

as far as we can tell, the massacre went well...

Permalänk

Det går att fixa svenska datum med str_replace lätt annars.

<?php function swe($date){ //Replace months to Swedish names $date = str_replace("January","Januari",$date); $date = str_replace("February","Februari",$date); $date = str_replace("March","Mars",$date); $date = str_replace("April","April",$date); $date = str_replace("May","Maj",$date); $date = str_replace("June","Juni",$date); $date = str_replace("July","Juli",$date); $date = str_replace("August","Augusti",$date); $date = str_replace("September","September",$date); $date = str_replace("October","Oktober",$date); $date = str_replace("November","November",$date); $date = str_replace("December","December",$date); //Replace days to Swedish names $date = str_replace("Sunday","Söndag",$date); $date = str_replace("Monday","Måndag",$date); $date = str_replace("Tuesday","Tisdag",$date); $date = str_replace("Wednesday","Onsdag",$date); $date = str_replace("Thursday","Torsdag",$date); $date = str_replace("Friday","Fredag",$date); $date = str_replace("Saturday","Lördag",$date); return $date; } $dag = swe(date("l")); $dagnr = date("d"); $mandad = swe(date("F")); $tid = date("H:m"); // Ger tex. "Fredag 08 Oktober - 18:10" echo "$dag $dagnr $mandad - $tid"; ?>