Instalarea Php5, Mysql, Apache, Eclipse si Gimp pentru Ubuntu

Am vrut zilele trecute sa îmi continui programarea unei pagini web făcută mai demult în Php, MySql și Apache și pentru asta am avut nevoie de aceste aplicații instalate pe Ubuntu. Am gasit cum se instalează și am procedat în felul următor:
Pasul 1. Instalează aplicațiile Php5, Mysql și apache: In command shell, trebuie sa lansați următoarele comenzi:



sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql phpmyadmin

sudo /etc/init.d/apache2 restart

Pasul 2. Instalează Eclipse pentru Php pentru editarea codului sursa(am urmat pașii de aici)
Pasul 3. Instalează procesorul de imagini Gimp (l-am instalat direct din centru de software ubuntu)
Pasul 4. Testează pagina în Firefox, Chrome și Opera.
Conținutul paginilor se poate gasit în următoarea locație: /var/www/
Cred ca asta e procedura pas cu pas pentru dezvoltarea unei pagini web pe Ubuntu. Toate aplicațiile sunt gratuite și au documentație foarte bine pusa la punct.
Spor la programare și o seara frumoasa tuturor !

Template-uri in Php

Acum vreo doi ani am găsit clasa de mai jos pentru lucrul cu template-uri. Cred ca e cea mai simpla clasa de acest gen. Practic se parsează un fișier html unde se înlocuiesc tagurile {nume} cu un conținut setat de către utilizator. Daca nume = „

Continut

” atunci peste tot unde se gaseste {nume} se va inlocui cu codul html. Continut „tpl.class.php”:

 

/***************************************************************************
*
* Author : Eric Sizemore ( www.secondversion.com & www.phpsociety.com)
* Package : Simple Template Engine
* Version : 1.0.2
* Copyright: (C) 2006 - 2007 Eric Sizemore
* Site : www.secondversion.com
* Email : hide@address.com
* File : tpl.class.php
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
***************************************************************************/

// Template engine
class template
{
/**
* Template variables and their replacements
*
* @var array
*/
var $tpl_vars;

/**
* Constructor
*/
function template()
{
$this->tpl_vars = array();
}

/**
* Assign our variables and replacements
*
* @param array Template variables and replacements
* @return none
*/
function assign($var_array)
{
// Must be an array...
if (!is_array($var_array))
{
die('template::assign() - $var_array must be an array.');
}
$this->tpl_vars = array_merge($this->tpl_vars, $var_array);
}

/**
* Parse the template file
*
* @param string Template file
* @return string Parsed template data
*/
function parse($tpl_file)
{
// Make sure it's a valid file, and it exists
if (!is_file($tpl_file))
{
die('template::parse() - "' . $tpl_file . '" does not exist or is not a file.');
}
$tpl_content = file_get_contents($tpl_file);

foreach ($this->tpl_vars AS $var => $content)
{
$tpl_content = str_replace('{' . $var . '}', $content, $tpl_content);
}
return $tpl_content;
}

/**
* Output the template
*
* @param string Template file
*/
function display($tpl_file)
{
echo $this->parse($tpl_file);
}
}

Un exemplu foarte simplu folosind clasa „template” arata cam asa:

 
include("tpl.class.php");

$header = "Header";
$meniu = "linkuri meniu";
$continut = "continut pagina";
$footer = "linkuri footer";

$tpl_pagina = &new template();
$tpl_pagina->assign(array('modul_header' => $header,
'modul_meniu' => $meniu,
'modul_continut' => $continut,
'modul_footer' => $footer
)
);

$pagina_de_afisat = $tpl_pagina->display_template('templates/new-newsletter/interfata.tpl');
echo $pagina_de_afisat;

Conținutul interfata.tpl este o pagina normala html dar care conține următoarele variabile {modul_header} {modul_meniu} {modul_continut} {modul_footer}, care vor poziționate în website unde dorește utilizatorul. Practic posibilitățile sunt nelimitate, iar partea de html este complet deconectata de Php. Mai simplu de atat nu se poate.
O zi plăcută tuturor !

Trimiterea de emailuri folosind PHP si PhpMailer

Pentru a trimite emailuri programatic prin Php se poate folosi clasa PhpMailer. E foarte ușor de folosit și de încredere. Mai exista si alte clase specializare pentru trimiterea de emailuri dar personal o prefer pe aceasta pentru ca se configurează foarte simplu.
Un exemplu simplu folosind SMTP:

 
require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch

$mail->IsSMTP(); // telling the class to use SMTP

try {
$mail->Host = "mail.yourdomain.com"; // SMTP server
$mail->SMTPDebug = 2; // enables SMTP debug information (for testing)
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Host = "mail.yourdomain.com"; // sets the SMTP server
$mail->Port = 26; // set the SMTP port for the GMAIL server
$mail->Username = "yourname@yourdomain"; // SMTP account username
$mail->Password = "yourpassword"; // SMTP account password
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
$mail->AddAddress('whoto@otherdomain.com', 'John Doe');
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
$mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
$mail->MsgHTML(file_get_contents('contents.html'));
$mail->AddAttachment('images/phpmailer.gif'); // attachment
$mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
$mail->Send();
echo "Message Sent OK

n";
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}

O zi buna tuturor !

Cum se poate afisa in loc de un ID, un text in Php&MySql ?

Se dă următoarea problemă: Într-o tabela mysql se stochează doar id-uri iar aceste id-uri corespund unor informații stocate în alta tabela. Cum s-ar putea sa se afișeze în loc de aceste id-uri informațiile corespunzătoare acestor id-uri ? De exmplu avem tabela ccu câmpurile:

ID Nume Prenume Varsta
1 Nume 1 Prenume 1 34a
2 Nume 2 Prenume 2 21
3 Nume 3 Prenume 3 45

Iar în tabela contacte avem următoarele câmpuri:

ID ID_user Nume_contact Adresa
1 1 Prenume 1 adresa 1
2 2 Prenume 2 adresa 2
3 3 Prenume 3 adresa 3

Ideea ar fi ca în loc de ID_user sa se afișeze numele userului care deține contactul aferent. Codul Php folosind si clasa MySqlLib ar arata cam asa:

 

require_once("MySqlLib.class.php");

$hostname_db="localhost";
$name_db="test";
$username_db="root";
$password_db ="";
$prefix_db = "";
$sql = new MySqlLibClass($hostname_db,$name_db,$username_db,$password_db,$prefix_db);
$conn = $sql->connect();

$query = "SELECT contacte.ID,
contacte.Nume_contact,
contacte.ID_user,
useri.Nume AS 'Nume_utilizator'
FROM contacte
INNER JOIN useri ON contacte.ID_user = useri.ID
ORDER BY contacte.Nume_contact";
$result = $sql->query_html( $query );


Rezultatul este următorul:

ID Nume_utilizator Nume_contact Adresa
1 Nume 1 Prenume 1 adresa 1
2 Nume 2 Prenume 2 adresa 2
3 Nume 3 Prenume 3 adresa 3

In felul acesta se pot înlocui anumite informații irelevante pentru utilizatori cu cu niște informații ușor de citit , în cazul acesta se înlocuiește un ID cu numele utilizatorului care corespunde acelui ID.
O zi buna tuturor!

Php si Mysql – clasa de lucru cu comenzile de baza mysql

Am avut nevoie acum ceva timp de o clasa pentru lucrul cu mysql si am creeat o clasa minimala pentru comenzile de baza. Comenzile de baza Mysql sunt: select, insert, update și delete. E o clasa foarte simpla dar își face treaba foarte bine. Folosesc doar conexiune mysql temporara. După fiecare operațiune eliberez resursele și închid conexiunea. Singura chestiune pe care nu am luat-o în calcul este sql injection, dar o sa am un post viitor doar despre acest subiect.

 

<?php

/*
+----------------------------------------------------------------------+
| MySqlLibClass version 1.0
+----------------------------------------------------------------------+
| Copyright (C) Simedru Florin 2013,http://automatic-house.blogspot.ro/
+----------------------------------------------------------------------+
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| This program is distributed in the hope that it will be useful |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
+----------------------------------------------------------------------+
| Author: Simedru Florin |
+----------------------------------------------------------------------+
*/

class MySqlLibClass{

var $host_db; // MySql host name
var $nume_db; // Database name
var $user_db; // User name
var $parola_db; // Password
var $prefix_db; // prefixul pentru toate tablele din baza de date

//******************************************************************************
// Nume functie:MySqlLibClass($hostname_db,$name_db,$username_db,$password_db,$prefix_db)
// Descriere:Constructorul clasei MySqlLibClass - seteaza datele de conectare la MySQL
// Returneaza: none
//******************************************************************************

function MySqlLibClass($hostname_db,$name_db,$username_db,$password_db,$prefix_db)
{
$this->host_db = $hostname_db;
$this->nume_db = $name_db;
$this->user_db = $username_db;
$this->parola_db = $password_db;
$this->prefix_db="".$prefix_db."";
}

//******************************************************************************
// Nume functie : setDBHost($host) ...
// Descriere :functii utile pentru manipularea mai usoara a datelor de conexiune
// Returneaza : dupa caz
//******************************************************************************
function setDBHost($host)
{
$this->host_db = $host;
}
function setDBName($name)
{
$this->nume_db = $name;
}
function setDBUser($user)
{
$this->user_db = $user;
}
function setDBPass($pass)
{
$this->parola_db = $pass;
}
function getDBHost()
{
return $this->host_db;
}
function getDBName()
{
return $this->nume_db;
}
function getDBUser()
{
return $this->user_db;
}
function getDBPass()
{
return $this->parola_db;
}

//******************************************************************************
// Nume functie : connect()
// Descriere : Realizeaza conexiunea MySQL
// Returneaza : $conn -> conexiunea la serverul MySql
//******************************************************************************
function connect()
{
$conn=0;
$conn = mysql_connect($this->host_db,$this->user_db,$this->parola_db) or die( "Nu ma pot conecta >> ".mysql_error()." >> $query "."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
mysql_select_db($this->nume_db,$conn) or die("Eroare in query
>>$query
Nu pot sa selectez baza de date >> ".mysql_error()." >> >$this->nume_db<");
return $conn;
}
//******************************************************************************
// Nume functie : close($conn)
// Descriere : Inchide conexiunea MySQL
// Returneaza : rezultat
//******************************************************************************
function close($conn)
{
return mysql_close($conn);
}
//******************************************************************************
// Nume functie : query($query)
// Descriere : executa si afiseaza rezultatele unei interogari SQL tabelar
// Returneaza : numele coloanelor si datele interogarii
//******************************************************************************
function query_html($query)
{
$nr_col=0;
$form_query ="";
$result=0;
$i=0;
$j=0;
$conexiune = $this->connect();
$result = mysql_query($query,$conexiune) or die("Error in query
>>$query
Query failed >>$query".mysql_error());
$nr_col = mysql_num_fields($result);

$html_retVal.="";
$html_retVal.= "";
for($j=0;$j<$nr_col;$j++)
{
$fieldname[$j] = mysql_field_name($result,$j);
$html_retVal.= "";
}
$html_retVal.="";
while($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
$html_retVal.="";
for($i=0;$i<$nr_col;$i++)
{
$fieldname[$i] = mysql_field_name($result,$i);
$values[$i] = @$line["$fieldname[$i]"];
$html_retVal.= "";
}
$html_retVal.= "";
}
$html_retVal.="
".$fieldname[$j]."
".$values[$i]."

";
@mysql_free_result($result);
$this->close($conexiune);
return $html_retVal;
}
//******************************************************************************
// Nume functie : query($query)
// Descriere : executa o interogare MySql
// Returneaza : numele coloanelor si datele interogarii
//******************************************************************************
function query($query)
{
$result=0;
$conexiune = $this->connect();
$result = mysql_query($query,$conexiune) or die("Error in query
>>$query
Query failed >>$query".mysql_error());
return $result;
}

//******************************************************************************
// Nume functie :insert_record_simple ($table)
// Descriere : insereaza o inregistrare noua in tabela aferenta
// Returneaza : string query = interogare
//******************************************************************************
function insert_record($table)
{
$conn=0;
$lista_values= "";
$lista_fields = "";
$conn=$this->connect();
$query = "select * from $table";
$result = mysql_query($query,$conn) or die("Error in query
>>$query
Query failed
".mysql_error());
$nr_col = mysql_num_fields($result);
$j=0;

for($i=0;$i<$nr_col;$i++)
{
$fieldname[$i] = mysql_field_name($result,$i);
$values[$i] = @$_POST[$fieldname[$i]];

if(is_array($_POST[$fieldname[$i]]) == "Array")
{
$values[$i] = "";
$values[$i] = @$_POST[$fieldname[$i]][0];
}
else
$values[$i] = @$_POST[$fieldname[$i]];

$lista_values= $lista_values."'".$values[$i]."',";
$lista_fields = $lista_fields.$fieldname[$i]." , ";
}
$length_values = strlen($lista_values);
$length_fields = strlen($lista_fields);
$lista_values=substr($lista_values, 0, $length_values-1);
$lista_fields=substr($lista_fields, 0, $length_fields-2);
$query = "INSERT INTO $table ($lista_fields) VALUES ($lista_values);";
$result = mysql_query($query) or die("Error in query
>>$query
Query failed
".mysql_error());
@mysql_free_result($result);
mysql_close($conn);
return $query;
}

//******************************************************************************
// Nume functie :get_data($table,$fieldname_input,$fieldname_return,$value)
// Descriere : returneaza valoarea campului $fieldname_input in cazul in care
// $fieldname_input='$value'
// select * from $table where $fieldname_input='$value'
// Returneaza : string
//******************************************************************************
function get_data($table,$fieldname_input,$fieldname_return,$value)
{
$conn=0;
$conn=$this->connect();
$query1 = "select * from $table where $fieldname_input='$value'";
$result1 = mysql_query($query1,$conn) or die("Error in query
>>$query
Error : Query failed : >>".mysql_error()."$query1"."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
while($line1 = mysql_fetch_array($result1, MYSQL_ASSOC))
{
$ret_value = $line1["$fieldname_return"];
$ret_value = str_replace("<","<",$values2 );
$ret_value = str_replace(">",">",$values2 );
return $ret_value;
}
}
//******************************************************************************
// Nume functie : set_data_ID
// Descriere : Executa un update mysql
// Returneaza : none
//******************************************************************************
function set_data_ID($table,$fieldname,$data,$id)
{
$data = str_replace("<","<",$data );
$data = str_replace(">",">",$data );
$conn=0;
$conn=$this->connect();
$query = "UPDATE $table SET $fieldname='$data' where ID='$id'";
$result = mysql_query($query,$conn) or die("Error in query
>>$query
set_data_user: Query failed: >>".mysql_error()." Query>> $query1"."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
@mysql_free_result($result);
mysql_close($conn);
}
//******************************************************************************
// Nume functie : delete_record_ID
// Descriere : Executa un delete mysql pentru intregistarea cu ID-ul selectat
// Returneaza : none
//******************************************************************************
function delete_record_ID($table,$ID)
{
$conn=0;
$conn=$this->connect();
mysql_select_db($this->nume_db,$conn) or die("Error in query
>>$query
update_record_ext: Query failed: >>".mysql_error()."$query"."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
$query = "DELETE FROM $table WHERE ID='$ID'";
$result = mysql_query($query) or die("Error in query
>>$query
delete_record: Query failed : >>".mysql_error()."$query"."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
if($result != FALSE )
{
$html_ret_value .= "
Înregistrarea $ID a fost stearsa .";
}
else
{
$html_ret_value .= "
Înregistrarea $ID nu a fost stearsa!";
}
@mysql_free_result($result);
mysql_close($conn);
return $html_ret_value;
}
//******************************************************************************
// Nume functie : delete_record
// Descriere : Executa un delete mysql pentru intregistarea cu $fieldname-ul
// selectat egal cu $value
// DELETE FROM $table WHERE $fieldname='$value'
// Returneaza : none
//******************************************************************************
function delete_record($table,$fieldname,$value)
{
$conn=0;
$conn=$this->connect();
mysql_select_db($this->nume_db,$conn) or die("Error in query
>>$query
update_record_ext: Query failed: >>".mysql_error()."$query"."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
$query = "DELETE FROM $table WHERE $fieldname='$value'";
$result = mysql_query($query) or die("Error in query
>>$query
delete_record: Query failed : >>".mysql_error()."$query"."
>> Line:".__LINE__."
>>File:". __FILE__."
>>Function :".__FUNCTION__."
>>Class :".__CLASS__."
");
if($result != FALSE )
{
$html_ret_value .= "
Înregistrarea $value a fost stearsa .";
}
else
{
$html_ret_value .= "
Înregistrarea $value nu a fost stearsa!";
}
@mysql_free_result($result);
mysql_close($conn);
return $html_ret_value;
}

}
?>

Sper sa fie de folos cuiva.
O zi buna tuturor!

Conexiunea cu o baza de date MySql în Php

E simplu ca buna ziua :).
Sunt doua tipuri de conexiune:
1. Conexiunea temporara
2. Conexiunea permanenta

 

<?php

$host_db="localhost";
$nume_db="test";
$user_db="root";
$parola_db="";

$query1 = "select * from utilizatori";
$result1 = mysql_query($query1,$conn) or die("get_config_data: Query failed : [".mysql_error()."$query1"."]");

function Conecteaza()
{
$db_link = mysql_connect($host_db,$user_db,$parola_db);
if (!is_resource($db_link))
{
if(!$db_link)
{
print(' Conecteaza() :Can't connect : ['.mysql_errno($db_link).' : '. mysql_error().']');
}
}
else
{
$db_selected = mysql_select_db($nume_db,$db_link);
if (!$db_selected)
{
print('Conecteaza() :Can't select database : ['.mysql_errno($db_link).' : '. mysql_error().']');
if (!mysql_ping ($db_link))
{
//here is the major trick, you have to close the connection (even though its not currently working) for it to recreate properly.
mysql_close($db_link);
$db_link = mysql_connect($host_db,$user_db,$parola_db);
mysql_select_db($nume_db,$db_link);
}
}
}
return $db_link;
}


function Conecteaza_permanent()
{
$conn = mysql_pconnect($host_db,$user_db,$parola_db) or die( "Nu ma pot conecta : ".mysql_error().":".$host_db." - ".$user_db.":".$nume_db."");
if (!($conn === false))
{
mysql_select_db($nume_db,$conn) or die("Error in query : Nu pot sa selectez baza de date".mysql_error().":".$host_db.":".$user_db.":".$nume_db."");
}
return $conn;
}
?>

Am găsit și următoarea recomandare http://www.php.net/manual/en/mysqlinfo.api.choosing.php referitoare la alegerea funcţiilor API pe care le folosiţi. E recomandat sa verificați temeinic funcţiile pe site-ul php.net pentru că se schimba când ţie lumea mai dragă. Personal eu nu prea folosesc conexiunile permanente şi nici nu le recomand din mai multe cauze. O tabela blocata într-o conexiune permanenta va rămîne blocata pana expira timeout-ul pentru respectiva conexiune. Asta ar putea dura foarte mult și riscați sa blocați serverul. Însuși măria sa serverul Apache se cam înţacă (blochează) dacă are de-a face cu o conexiune permanentă. Mai bine folosiţi conexiunea temporară pentru că oricum ar fi, timpul de comunicaţie dintre PHP şi MySql este destul de mic.
Mai multe descrieri şi comentarii găsiţi aici.
Spor la treabă tuturor!