Category Archives: PHP

php категория

Създаване PDF файл от SQL заявка

В този пост искам да ви покажа как може да създавате .pdf файл след като имате някакви данни (най-често получени от базата с данни).
Нека предположим че имаме php код, чрез който ще правим заявка към базата с данни и върнатите резултати от там ще бъдат поставени в новосъздаден .pdf файл. Ето и кода с който става това:

<?php

require_once(‘DBConnection.php’);
require_once(‘fpdf.php’);

//съдържанието на файла fpdf.php

//може да намерите тук

$query = “SELECT * FROM table WHERE id IN(1,2,3,4,5)”;

$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);

//за всеки ред от БД,

//добавяме поле към съответната колона

$colum_name = array();
$out = array();
$columns = mysql_num_fields($result);

for($i = 0; $i < $columns; $i++){

$l = mysql_field_name($result, $i);
$colum_name[$i] = $l;

}

while($l = mysql_fetch_array($result)){

for($i = 0; $i < $columns; $i++){

if($colum_name[$i] == ‘birthday’)

$out[$i] .= (date(‘d-M-Y’, strtotime($l[$colum_name[$i]])).”\n”);

else

$out[$i] .= ($l[$colum_name[$i]].”\n”);

}

}

mysql_close();

//създаваме нов PDF файл с помощта на

//библиотеката fpdf.php

$pdf=new FPDF();
$pdf->AddPage();

//Задаваме позицията на имената на колоните
$Y_Fields_Name_position = 20;
//Задаваме позицията на самите колони под имената им
$Y_Table_Position = 26;

//Първо се създава всяко име на поле
//Задава се сив фон н имената на полетата

$pdf->SetFillColor(232,232,232);

//Задава се удебелен фон на имената на полетата

$pdf->SetFont(‘Arial’,’B’,12);
$pdf->SetY($Y_Fields_Name_position);
$pdf->SetX(10);
$pdf->Cell(30,6,’Fisrt name’,1,0,’L’,1);
$pdf->SetX(40);
$pdf->Cell(30,6,’Surname’,1,0,’L’,1);
$pdf->SetX(70);
$pdf->Cell(10,6,’Sex’,1,0,’L’,1);
$pdf->SetX(80);
$pdf->Cell(55,6,’Email’,1,0,’L’,1);
$pdf->SetX(135);
$pdf->Cell(40,6,’Phone’,1,0,’L’,1);
$pdf->SetX(175);
$pdf->Cell(40,6,’Birthday’,1,0,’L’,1);

//Добавя се нов ред във файла
$pdf->Ln();

//Записват се стойностите в колоните

//За всяка една клетка се задават размери

$pdf->SetFont(‘Arial’,”,12);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(10);
$pdf->MultiCell(30,6,$out[0] ,1);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(40);
$pdf->MultiCell(30,6,$out[1] ,1);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(70);
$pdf->MultiCell(10,6,$out[2] ,1);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(80);
$pdf->MultiCell(55,6,$out[3] ,1);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(135);
$pdf->MultiCell(40,6,$out[4] ,1);

$pdf->SetY($Y_Table_Position);
$pdf->SetX(175);
$pdf->MultiCell(40,6,$out[5] ,1);

$pdf->SetY($Y_Table_Position);

//Създават се кутиите (boxes) за всеки един ред

$i = 0;
$pdf->SetY($Y_Table_Position);
while($i < $num_rows){

$pdf->SetX(10);
$pdf->MultiCell(200,6,”,1);
$i = $i +1;

}

//Връща се изходния pdf файл

$pdf->Output();

?>

По този начин може да създавате автоматично Ваши .pdf файлове, които да съдържат справки направени от данните в базата с дани. Показаният код в този пост е само сървърната част, необходима за създаването на .pdf файла и записването на данните в  него. JavaScript частта е същата както при обикновените Ajax заявки.

PHP автоматично форматиране на дата

В този пост ще Ви покажа как може автоматично в PHP да форматирате в движение датите показвани във Вашите web страници.
Сигурно Ви се е случвало да получите дата от базата с данни, но не точно във формата в който Ви трябва. Например базата данни Ви връща дата (1981-10-29), а на Вас Ви трябва същата тази дата да бъде представена в сайта в друг формат, например (29 -Nov-1981). Това става много лесно като се използва стандартната за PHP функция date(), със съответните параметри за нея.
Следващия код е за конвертирането в нашият случай:

date(‘d-M-Y’, strtotime($row[‘date’]));

За да може функцията date() да форматира нашата дата ($row[‘date’]) в желания от нас формат, трябва същата тази дата да подадем на друга стандартна функция за PHP strtotime().

strtotime() получава като параметър някаква дата под формата на текст (стринг) и превръща този текст в число, което показва секундите изтекли от 00:00 часа на 01 януари 1970 година до датата която е подадена във функцията.

Функцията date() използва за първи параметър  желания формат под формата на точно подреден стринг с помощта на английски букви. Тук са разделени със знака “-” за по-добра видимост. Всяка една от тези букви казва на date() как точно да подреди изписването на датата. В нашият случай стринга ‘d-M-Y’ казва да се подреди датата като първо се напише деня от месеца с число от две цифри, след това се напише месеца съкратено с букви и накрая се изпише цялата година с число.

Сега ще Ви дам няколко различни примера (за нашата дата) с различни начини на форматиране:

 date(‘Y-M-d’, strtotime(“1981-10-29”));//връща 1981-Nov-29

date(‘D-M-Y’, strtotime(“1981-10-29”));//връща Sun-Nov-1981

date(‘Y-F-D’, strtotime($row[‘date’]));//връща 1981-November-Sun

date(‘d-m-y’, strtotime($row[‘date’]));//връща 29-10-81

Разбира се функцията date() може да се използва и за форматиране на часове и на комбинации от дати и часове. Следващия пример е за комбинирано форматиране на дата и час.

date(‘l jS \of  F Y h:i:s A’,strtotime(“1981-10-29”));//връща Monday 8th of August 2005 00:00:00 PM

Върнатия час е 00:00:00 часа защото не сме задали час в нашия стринг.

За пълното описание на функцията date() и strtotime() може да посетите официалния сайт на PHP.

 

 

PHP код за Ajax JSON заявка

В този пост ще бъде описано накратко какво представлява един PHP файл (сървърен скрипт), който трябва да прочете идващия JSON обект от JavaScript-a. който е предназначен да изпрати и в последствие изиска някакви данни от сървъра (най-често данни съдържащи се в базата данни на сайта ни). Ако не е ясно точно за какъв JavaScript код става на въпрос може да прочетете поста “Ajax заявка чрез JSON обект“.

Целта на нашия сървърен скрипт ще бъде да прочете идващите данни чрез JSON обект, да направи нещо с тях и да върне отново отговор на браузъра на потребителя с помощта на JSON обект. Нека нашия файл се казва serverScript.php и неговото съдържание бъде следното:

<?php

$js_json_obj = jsonString2Object($_POST[‘myobj’]);

$php_json_obj = array();

if (strlen($js_json_obj->first_name) < 2 || strlen($js_json_obj->last_name) < 2){

$php_json_obj[‘is_valid’] = ‘Човека няма зададени имена’;

}else{

$php_json_obj[‘is_valid’] = ‘Човека има зададени имена и пол’;

}

echo json_encode($php_json_obj);

?>
<?php

function jsonString2Object($str){

return json_decode(stripslashes($str));

}

?>

Ето и обяснението на нашия код ред по ред:

– $js_json_obj = jsonString2Object($_POST[‘myobj’]);//създаваме нова php променлива $js_json_obj, която ще представлява php обект. Функцията jsonString2Object получава като параметър JSON обекта идващ от post заявката от JavaScript кода. Забележете че достъпваме JSON обекта идващ от JavaScript чрез името (myobj) зададено при стартирането на post заявката. Погледнете кода в поста  “Ajax заявка чрез JSON обект“.

– $php_json_obj = array();//създаваме нов масив, който ще съдържа по-късно данните които искаме да върнем JavaScript кода от web страницата ни.

– if (strlen($js_json_obj->first_name) < 2 || strlen($js_json_obj->last_name) < 2)//правим проверка дали в данните които получаваме от JavaScript има зададени имена на човек

– $php_json_obj[‘is_valid’] = //в зависимост от това дали в JSON обекта идващ от JavaScript има или няма зададени имена, задаваме различни стойности на член променливата ‘is_valid’ от масива $php_json_obj

– echo json_encode($php_json_obj);//връщаме на JavaScript кода резултата от действията ни в PHP сървърния скрипт. Тези резултати ние сложихме в член променлива на масив, който масив чрез функцията  json_encode() – част от PHP езика, се превръща във валиден JSON код.

След като върнем като резултат JSON обекта създаден от PHP, в JavaScipt кода ние трябва да превърнем този обект отново в JavaScript променлива за да може JavaScript да работи с него като JSON обект. Ако приемем, че отговора от PHP е returned_data, това може да стане по следния начин:

eval(“var data =”+returned_data);

След този ред ако в JavaScript използваме код:

console.log(data.is_valid);

//ще получим изписан в конзолата резултата върнат от PHP скрипта