Kalendarz[PHP][MySql][HTML][JS] - problem z wyświetlaniem


(Sam 19n) #1

Witam,

Posiadam kalendarz eventów, który nie ukrywam znalazłem z sieci. Chciałbym go dostosować do swoich potrzeb, ale mam z tym duży problem.

Problem polega na tym, że jeśli mam 2 eventy w jednym dniu, wyświetlony zostaje jedynie pierwszy, który został zapisany do bazy.

Tekst pobrany z bazy i wyświetlony w kalendarzu nie jestem w stanie formatować, jest wyświetlany ciągiem(tzn jak nawet w bazie wpiszę

Chciałbym w jakikolwiek sposób formatować tekst pobierany z tabeli w bazie tj. pogrubienie, zmiana koloru tekstu, czy wcześniej wspomniane przejście do nowej linii.

To jest kod odpowiedzialny za pobranie danych z bazy

?php

header('Content-Type: application/json; charset=utf-8'); 

// Initializations of the variables used

$dates = array();


// MYSQL connection credentials

define('MYSQL_HOST', 'host');

define('MYSQL_USER', 'user');

define('MYSQL_PASSWORD', 'pass');

define('MYSQL_DB', 'db');


// PDO - connect to the database

try 

{

	$options = array(PDO::MYSQL_ATTR_INIT_COMMAND = 'SET NAMES utf8'); 

	$dbh = new PDO('mysql:host='.MYSQL_HOST.';dbname='.MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD, $options);


	$dbh-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	$dbh-setAttribute(PDO::ATTR_PERSISTENT, true);

	$dbh-setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

	$dbh-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);


} 

catch (PDOException $e) 

{

	echo 'Error!: ' . $e-getMessage() . '
';

}


// take the events from the table named "events"

try

{

	$stmt = $dbh-query('

							SELECT 

								*

							FROM

								events

						');

}

catch (PDOException $e)

{

	print($e-getMessage());

	die;

}

while ($row = $stmt-fetch(PDO::FETCH_ASSOC))

{

	// because $row['event_date'] will have this form: 2012-01-10 and in Javascript we have 2012-1-10, 

	// we need to rewrite it the way we use it in Javascript so we can compare it

	$row['event_date'] = date("Y-n-j", strtotime($row['event_date']));

	$dates[] = $row;

}	


echo json_encode($dates);


?

To jest struktura tabeli w bazie, do której zapisuję eventy. przechwytywanielu.png


(Drobok) #2

Za mało danych, ale imo baza jest nie przystosowana do kilku wpisów dla jednej daty. Robisz drugi encode / decode, albo wywal tą kolumnę i zrób nową tabelę na wpisy (pobieraj po id)


(Sam 19n) #3

Jakie dane są jeszcze potrzebne?

Co dokładnie mam zrobić, bo nie zrozumiałem..


(Konrad Kosowski) #4

Musisz zrobić tak:

event_date zalterować na int (teraz jest typu date) - do zrobienia po stronie mysql

Po stronie php zmienić to:

['event_date'] =  date("Y-n-j", strtotime($row['event_date']));[/code]
Na to:

[code=php]['event_date'] =  date("Y-n-j", $row['event_date']);



Po stronie php:



W miejscu, w którym dodajesz eventy (którego nie podałeś) musisz zmienić inserta do bazy tak, żeby zamiast daty przekazywał timestamp.



I powinno działać.

(Sam 19n) #5

Eventy dodaję poprzez prosty formularz.

Input dla daty jest typu - text.

Po prostu trzymam się formatu odpowiedniego (RRRR-MM-DD). W jakim formacie mam teraz wpisywać datę, przed konwersją do timestamp?


(Konrad Kosowski) #6

Ale ja pisałem o PHP a nie o HTML... tak czy inaczej - i tak sprzedałem błąd... bo kod w php niewiele zmieni. Generalnie - całość jest mocno do przerobienia. W zasadzie... to tylko baza mogłaby zostać.


(Sam 19n) #7

Rozumiem, a przynajmniej jak zrobić żebym mógł formatować tekst pobierany z bazy, tj przejście do nowej linii tudzież pogrubienie tekstu.

Aktualnie tekst jest wyświetlany ciągiem.


(Konrad Kosowski) #8

Tekst do dialogu wrzucany jest przez ten kod:

$("#dialog").text(selected_dates[date]['event_description']);

Afaik dialog z jquery ui pozwala na stosowanie tagów HTML w kontencie, dlatego wystarczyłoby chyba zmienienie metody text na html.