All posts by admin

Utilizare CONCAT in JOIN MySQL

Acum cateva ore mi s-a cerut sa fac un JOIN in MYSQL, singura problema fiind ca in tabela relationala nu exista o coloana unde sa fie stocat id-ul inregistrarii din prima tabela.

EX tabel1:
==============
| id | title |
==============
| 1 | abc |
| 2 | bac |
==============

EX tabel2:
=========================
| id | id_string_tabel1 |
=========================
| 1 | tabel1_1 |
| 2 | tabel1_2 |
=========================

Dupa cum ati observat in tabelul 2 id-ul are un prefix, in exemplul de mai sus este: tabel1_

SQL-ul pentru JOIN in MySQL se face utilizand CONCAT

SELECT * FROM tabel1 t1
LEFT JOIN tabel2 t2 ON CONCAT('tabel1_', t1.id) = t2.id_string_tabel1

Daca aveti solutii mai simple/bune va rog sa lasati un comentariu.

Cele mai importante noutati in PHP 5.5

Azi am avut timp sa ma joc cu PHP 5.5 si cele mai interesante / importante noutati voi enumera in acest articol.

Generatoare – utilizand cuvantul cheie yield

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
// nu mai avem nevoi de return ;)
function generator($start, $limit) {
    for ($i = $start; $i <= $limit; $i += 1) {
        yield $i;
    }
}
 
// se va afisa 1 2 3 4 5
foreach (generator(1,5) as $nr) {
    echo $nr . ' ';
}
?>

Foreach suporta liste

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$my_array = array ( 
  array(1, 'ion'),
  array(2, 'maria')
);
 
// se va afisa 
// ion 1
// maria 2
foreach ($my_array as list($id, $name)) {
    echo $name . ' ' . $id;
}
?>

“Dereferentiere” pentru array si string

1
2
3
4
<?php
 
echo [1, 2, 3][0]; // se va afisa 1
?>
1
2
3
4
5
<?php
 
echo 'PHP'[0]; // se va afisa P
 
?>

Noutati PHP-GD Graphics Library

  • imageflip()
  • imagecrop() si imagecropauto()
  • imagecreatefromwebp()si& imagewebp()

Calculează vârsta în PHP

Există foarte multe modalități pentru a obține vârsta într-o variabilă PHP. Pentru a afla vârsta este de ajuns să știm data nașterii.

1
2
3
4
5
6
7
8
9
10
11
<?php
 
define ('DATE_OF_BIRTH', '15-02-1984');  // zz-ll-aaaa
 
$date_of_birth = new DateTime(DATE_OF_BIRTH);
$today = new DateTime(); // for testing purposes
$diff = $today->diff($date_of_birth);
 
printf('%d years', $diff->y);
 
?>

Start cu procedurile stocate in MySQL

De multa vreme nu am mai create proceduri stocate ( PROCEDURE ) in MySQL, dar azi s-au schimbat multe. Vreau sa impart cu voi 2 comenzi utile:

Creeaza procedura stocata

 DELIMITER $$
 CREATE PROCEDURE `numele_procedurii` (OUT param1 INT)
        BEGIN
           SELECT COUNT(*) INTO param1 FROM nume_tabela;
        END $$
DELIMITER ;

Listeaza toate procedurile stocate

SHOW PROCEDURE STATUS;

Diferenta intre 2 siruri (array)

Sa presupunem ca aveti 2 array-uri cu nume utilizatori si doriti sa aflati:

  1. toti utilizatorii care se afla in primul array dar nu se afla in al doilea array.
  2. toti utilizatorii care se afla in al doilea array dar nu se afla in primul.

Exemplu:

1
2
3
4
5
6
<?php 
 
$user1_arr = array ('Vasile', 'Ion', 'andrei'); 
$user2_arr = array ('Ion', 'Andrei', 'Maria'); 
 
?>

Rezolvare 1

Se va folosi functia array_diff($arr1, $arr2):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
 
$user1_arr = array ('Vasile', 'Ion', 'andrei'); 
$user2_arr = array ('Ion', 'Andrei', 'Maria'); 
 
// Verificam diferentele pornind de la primul array . 
$user1_diff_arr = array_diff($user1_arr, $user2_arr);
 
// Rezultat 
// $user1_diff_arr = array ('Vasile', 'andrei');
// se observa ca in lista de rezultate apare 'andrei' desi nu ar trebui. Ei, array_diff() este case-sensitive, deci daca in primul array apare cu litere mici, in al doilea cu prima litera mare, se va lua in considerare ca si diferenta. 
 
// Pentru a face o diferentiere case-insensitive vom folosi functia array_udiff()
$user1_diff_arr = array_udiff($user1_arr, $user2_arr, 'strcasecmp');
 
// Rezultat
// $user1_diff_arr = array ('Vasile');
 
 
?>

Rezolvare 2

Pentru punctul 2 se va porni de la al doilea array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
 
$user1_arr = array ('Vasile', 'Ion', 'andrei'); 
$user2_arr = array ('Ion', 'Andrei', 'Maria'); 
 
// Verificam diferentele pornind de la primul array . 
$user1_diff_arr = array_diff($user2_arr, $user1_arr);
 
// Rezultat 
// $user1_diff_arr = array ('Andrei', 'Maria');
 
 
// Diferentiere case-insensitive vom folosi functia array_udiff()
$user1_diff_arr = array_udiff($user2_arr, $user1_arr, 'strcasecmp');
 
// Rezultat
// $user1_diff_arr = array ('Maria');
 
 
?>

Daca aveti intrebari puteti lasa un comentariu.

Conectare la baza de date MySQL din PHP

Pentru a se conecta la baza de date MySQL din PHP se vor folosi urmatoarele functii din PHP:

mysql_connect($nume_server, $utilizator, $parola);

Parametrii

  • $nume_server este numele sau ip-ul serverului de MySQL ( ex: localhost, 127.0.0.1, 87.12.34.125 )
  • $utilizator este numele de utilizator cu care dorim sa ne conectam la baza de date
  • $parola este codul de access pentru utilizator de mai sus

Aceasta functie doar se conecteaza, vizual nu se va vedea nimic

mysql_select_db($nume_baza_de_date, $con);

Parametrii

  • $nume_baza_de_date este numele bazei de date la care dorim sa ne conectam
  • $con este handlerul de conexiune, este rezultatul functiei mysql_connect()

Aceasta functie doar selecteaza baza de date mentionata, vizual nu se va vedea nimic

mysql_close($con);

Aceasta functie PHP inchide conexiunea cu baza de date.

Exemplu

Dorim sa ne conectam la baza de date locala avand ip-ul 127.0.0.1 la baza de date numita wordpress, utilizatorul alex si parola 123456

1
2
3
4
5
6
7
8
9
10
11
<?php
$con = mysql_connect("127.0.0.1","alex","123456"); // salvam conexiunea in variabila $con
if (!$con)
  {
  die('Nu este posibila conectarea la baza de date din urmatoarele motive: ' . mysql_error());
  }
 
mysql_select_db("wordpress", $con); // selectam baza de date wordpress
 
mysql_close($con);  // inchidem conexiunea
?>

Dezautentificare in WordPress

Pentru a integra in tema functionalitatea de dezautentificare ajunge sa adaugi un parametru in url si daca este setat acest parametru sa se apeleze functia de logout din WordPress.

Linkul trebuie sa fie ceva de genu:

http://domeniul.tau/?out=1

Adauga urmatorul cod in functions.php in tema WordPress:

1
2
3
4
5
6
7
8
9
10
<?php
 
if ($_GET['out'] == 1 ) {
  wp_logout();  // in acest moment se va face delogarea 
 
  wp_redirect(home_url()); // vom face redirect la prima pagina. Avem nevoie de un refresh ca sa se vada efectul de logout. 
 
}
 
?>

Autentificare in WordPress pe baza de email

Posibil ca la un moment dat vei avea nevoie de o logare automata pe baza de email. In mod normal pentru orice sistem de autentificare trebuie sa introduci un utilizator / o adresa email si o parola.

Dar ce se intampla cand ai doar o adresa de email?

In WordPress se poate aplica un mic hack ce NU ESTE RECOMANDAT, dar va arat cum se poate implementa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
// Aceasta functie se poate copie in folderul vostru de tema WordPress in fisierul functions.php 
// @param:  string $email - adresa de email 
 
function autentificare_dupa_email ( $email ) {
   $user_id = email_exists($email);   // daca exista adrese de email, functia va returna id-ul utilizatorului 
 
    if (!$user_id) return false;      // daca nu avem $user_id inseamna ca nu exista utilizatorul in baza de date, deci nu se va loga
 
    wp_set_current_user($user_id, $email); // setam utilizatorul curent in WordPress
 
    wp_set_auth_cookie($user_id);          // creeam cookie-ul de autentificare pentru a pastra utilizatorul logat. 
}
 
// Unde vrem sa apelam auto autentificarea introducem urmatoare linie: 
 
autentificare_dupa_email ('sandor@mailinator.com'); 
 
// Utilizatorul in acest moment este logat si se poate apela functia is_user_logged_in() ce va returna TRUE. 
?>