vineri, 26 iulie 2013

Electronic door locks

Interesant filmuleț!

luni, 22 iulie 2013

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!

joi, 18 iulie 2013

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!