WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   php, mysql arrays! (https://www.wn.se/forum/showthread.php?t=1038791)

youheardit 2009-10-28 07:58

php, mysql arrays!
 
Hej igen!
Nu har jag stött på ett litet problem...
jag har en array:
Kod:

$calendar->highlighted_dates = array(
'2009-10-27',
        '2000-01-01'
        );

och denna visar då datum i en kalender men jag vill att den ska hämta datumen från mySQL..
har testat:
Kod:

mysql_query('SELECT date FROM events GROUP BY date');

$calendar->highlighted_dates = mysql_fetch_array($res);

Vad är felet?

Tacksam för svar!
//Philip Andersson!

Alex 2009-10-28 08:04

Vad har du för fält i databasen?
Varför anropar du $res (resource) när den inte är satt?
Har du exempeldata i databasen till oss?
Vad får du för felmeddelande?

Svara på dessa frågor, så kan vi hjälpa dig. Vi är inga tankeläsare :)

youheardit 2009-10-28 08:08

jag har tabellen events och kolumnen date.
Och jag får inget felmeddelnade, allting visas som det ska fast utan dessa datumen "highlighted".
exempel data: 2009-10-28

tack!

BjörnJ 2009-10-28 08:18

Du har missat $res= framför mysql_query.
Sedan när du kör fetch får du en array som innehåller bara den första raden (det första datumet) från databassvaret.

youheardit 2009-10-28 08:23

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20328424)
Du har missat $res= framför mysql_query.
Sedan när du kör fetch får du en array som innehåller bara den första raden (det första datumet) från databassvaret.

oj! har missat det nu när jag skrev in på WN, har det i filen.
men hur gör jag så den loopar då? och tar alla.
Jag har testat med while($line = mysql_fetch_array($res)){
echo $dates; //värde = 2009-10-28
}
innuti php arrayen! men får error. unexpected ";" on line xx //vilket är ; efter mysql frågan.

Nerox 2009-10-28 08:28

Citat:

Ursprungligen postat av youheardit (Inlägg 20328425)
oj! har missat det nu när jag skrev in på WN, har det i filen.
men hur gör jag så den loopar då? och tar alla.
Jag har testat med while($line = mysql_fetch_array($res)){
echo $dates; //värde = 2009-10-28
}
innuti php arrayen! men får error. unexpected ";" on line xx //vilket är ; efter mysql frågan.


Eftersom $dates inte finns bör du använda $line['date']

Kod:


while($line = mysql_fetch_array($res)){
      echo $line['date']; //värde = 2009-10-28 
}


BjörnJ 2009-10-28 08:30

Testa att göra så här:
PHP-kod:

foreach(mysql_fetch_row($res) as $row)
  
$calendar->highlighted_dates[]=$row[0]; 


youheardit 2009-10-28 08:41

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20328428)
Testa att göra så här:
PHP-kod:

foreach(mysql_fetch_row($res) as $row)
  
$calendar->highlighted_dates[]=$row[0]; 


Nej, tyvärr funkade inte :(
men jag har kanske fel mysql fråga?
Kod:

$res = mysql_query('SELECT date FROM events GROUP BY date');
tack för svaren!

BjörnJ 2009-10-28 08:48

Citat:

Ursprungligen postat av youheardit (Inlägg 20328431)
men jag har kanske fel mysql fråga?
Kod:

$res = mysql_query('SELECT date FROM events GROUP BY date');

Jag tycker det ser rätt ut. Du har väl anslutit och valt DB?

PHP-kod:

$db_link=mysql_connect('host','user','password') or die('Error! Cannot access database!');
mysql_select_db('db_name',$db_link) or die('Error! Cannot select database!'); 


youheardit 2009-10-28 08:55

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20328432)
Jag tycker det ser rätt ut. Du har väl anslutit och valt DB?

PHP-kod:

$db_link=mysql_connect('host','user','password') or die('Error! Cannot access database!');
mysql_select_db('db_name',$db_link) or die('Error! Cannot select database!'); 


Jadå, hade den i en annan fil och kör include'fil.php'; längre upp på sidan!
som ser ut så här:
PHP-kod:

<?php mysql_connect("localhost""loginnamn""password");
mysql_select_db("db_namn") or die(mysql_error());
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8");

?>


BjörnJ 2009-10-28 09:00

Får du något felmeddelande, eller tycks allt fungera som det ska bortsett från att du inte får highlight som du tänkt?

BjörnJ 2009-10-28 09:05

Kommentera bort tilldelningen efter foreach och lägg istället dit:
PHP-kod:

echo $row[0]."<br />\n"

Edit:
Eller sätt dit måsvingar, och ha med både echo och tilldelning.

Magnus_A 2009-10-28 09:07

Du kan få ut allt i en array om du använder dig av det inbyggda stödet för PDO och metoden fetchall(), se vidare http://www.php.net/manual/en/pdostatement.fetchall.php
Inte bra med allför stora resultat, men jäkligt praktiskt att slippa loopa ibland och plocka direkt ur matrisen.

youheardit 2009-10-28 09:36

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20328437)
Du kan få ut allt i en array om du använder dig av det inbyggda stödet för PDO och metoden fetchall(), se vidare http://www.php.net/manual/en/pdostatement.fetchall.php
Inte bra med allför stora resultat, men jäkligt praktiskt att slippa loopa ibland och plocka direkt ur matrisen.

Så här antar jag? men iallafall så får jag error när jag kör detta:
Kod:

Fatal error: Call to a member function prepare() on a non-object in /home/web75761/domains/cubemedia.se/public_html/ramek/personal/calendar.php on line 16
PHP-kod:

$sth $dbh->prepare('SELECT date FROM events GROUP BY date');
$sth->execute();

/* Fetch all of the remaining rows in the result set */
$result $sth->fetchAll();
  
$calendar->highlighted_dates $result


Magnus_A 2009-10-28 09:43

Du måste nog tala om vilken databas, host, användare och lösenord du tänkte använda för att skapa pdo-objektet $dhb i ditt fall ovan. Annars kommer du inte långt.
Läs den fina manualen här: http://www.php.net/manual/en/pdo.connections.php

youheardit 2009-10-28 09:48

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20328446)
Du måste nog tala om vilken databas, host, användare och lösenord du tänkte använda för att skapa pdo-objektet $dhb i ditt fall ovan. Annars kommer du inte långt.
Läs den fina manualen här: http://www.php.net/manual/en/pdo.connections.php

Tack!
Testade nyss och jag får inget error iallafall men den visar fortfarande inte highlighted!
PHP-kod:

$user "xxx";
$pass "xxx";
$dbh = new PDO('mysql:host=xxx;dbname=xxx'$user$pass);


$sth $dbh->prepare('SELECT date FROM events GROUP BY date');
$sth->execute();

/* Fetch all of the remaining rows in the result set */
$result $sth->fetchAll();
  
$calendar->highlighted_dates $result


BjörnJ 2009-10-28 09:58

PHP-kod:

print_r($calendar->highlighted_dates); 


youheardit 2009-10-28 10:00

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20328453)
PHP-kod:

print_r($calendar->highlighted_dates); 


Körde detta och fick utskrivet: Array ( [0] => Array ( [date] => 2009-10-28 [0] => 2009-10-28 ) [1] => Array ( [date] => 2009-10-29 [0] => 2009-10-29 ) )

Men det ska väll vara i form av:
array(
'2009-10-28',
'2009-10-29';
);

eller är jag fel på det?

hnn 2009-10-28 10:02

date räknas som en funktion i MySQL. Korrekt kod:
PHP-kod:

$res mysql_query('SELECT `date` FROM `events` GROUP BY `date`');

while(
$row mysql_fetch_assoc($res))
  
$calendar->highlighted_dates[]=$row['date']; 


BjörnJ 2009-10-28 10:05

PHP-kod:

$result $sth->fetchAll(PDO::FETCH_COLUMN0); 

Men du behöver inte mellanlagra i $result:
PHP-kod:

$calendar->highlighted_dates=$sth->fetchAll(PDO::FETCH_COLUMN0); 


youheardit 2009-10-28 10:06

Citat:

Ursprungligen postat av hnn (Inlägg 20328455)
date räknas som en funktion i MySQL. Korrekt kod:
PHP-kod:

$res mysql_query('SELECT `date` FROM `events` GROUP BY `date`');

while(
$row mysql_fetch_assoc($res))
  
$calendar->highlighted_dates[]=$row['date']; 


ah! okej. Tack så mycket, detta funkade.
Hade oxå för mig att det var en funktion men visste inte hur jag skulle använda den. men tack alla som hjälpte! det är gyllenevärt!

Ha det bra!
//Philip Andersson!

BjörnJ 2009-10-28 10:20

(Felaktig kod från första inlägget i tråden.)
Citat:

Ursprungligen postat av youheardit (Inlägg 20328415)
Kod:

$calendar->highlighted_dates = mysql_fetch_array($res);

Angående val av fetch-funktion: Oftast är det att föredra att använda mysql_fetch_assoc() eller mysql_fetch_row() istället för mysql_fetch_array(), beroende på vad man ska göra med arrayen.

Med $row=mysql_fetch_row() får du $row[0]
Med $row=mysql_fetch_assoc() får du $row['date']
Med $row=mysql_fetch_array() får du $row[0] och $row['date'] som båda innehåller samma värde.

row tar minst systemresurser. assoc tar inte så mycket mer med tanke på mervärdet om man har flera kolumner att hålla reda på. Jag brukar använda row om det är bara en kolumn, annars assoc.

tartareandesire 2009-10-28 10:24

Undvik att använda reserverade ord som tabellnamn så slipper du problem med detta.

youheardit 2009-10-28 10:32

okej! tack så mycket! då vet jag bättre till nästa gång :)


Alla tider är GMT +2. Klockan är nu 03:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson