Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Ertai en 14 Diciembre 2006, 01:27 am



Título: [Recomendado] Pequeños trucos en PHP / Scripts php-mysql / POO
Publicado por: Ertai en 14 Diciembre 2006, 01:27 am
Pues eso, quería crear este post para ir poniendo pequeños truquillos, aunque sean tonterias, pero que nos pueden ayudar en ciertos momentos cuando programamos.

Este post es para que le vayais hechando un ojo de vez en cuando, y que, si algun día os encontreís un problema podais acudir aquí para ver como se hacía.


Scripts PHP-MYSQL
http://foro.elhacker.net/php/scripts_phpmysql-t48315.0.html

Clases hechas en PHP (POO)
http://foro.elhacker.net/php/clases_hechas_en_php_poo-t147928.0.html

Glosario de funciones
http://foro.elhacker.net/php/glosario_de_funciones-t65126.0.html




Evitar la caché de los navegadores
A veces podemos encontrarnos el problema de que una página no nos actualiza el contenido porque está en caché. Se puede solucionar modificando las cabeceras.

Código
  1. <?php
  2. header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );  // disable IE caching
  3. header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
  4. header( "Cache-Control: no-cache, must-revalidate" );
  5. header( "Pragma: no-cache" );
  6. ?>
  7.  



Contador en SQL
Puede ser que necesitemos un contador (de lecturas, por ejemplo) de una noticia guardada en SQL. Si queremos aumentar este valor, muchos habríamos leído el campo, lo hubieramos incrementado y luego hubieramos hecho el UPDATE. Pues hay una forma mucho más fácil, segura y limpia de hacerlo y con solo una SQL.

Código
  1. <?php
  2. mysql_query('UPDATE trucos SET lecturas = lecturas + 1 WHERE id=12 LIMIT 1');
  3. ?>
  4.  



Hacer funcionar la función mail()
En local, la función mail() nos devolverá un error porque no tenemos configurado un cliente SMTP.

Aquí teneis la forma más fácil y rápida de solucionar este problema.

http://www.forosdelweb.com/showpost.php?p=662241&postcount=115



Intercambiar colores en X filas
A la hora de hacer listados, puede darse el caso que la legibilidad de las filas no sea buena, por lo tanto sera conveniente usar dos colores diferentes de background para cada fila, de manera que se vayan intercalando y la legibilidad sea buena. Como hacemos esto? Pues una de las maneras más elegantes es usar el operador ternario. Ahí va:

Código
  1. <?php
  2. $color = "#000000";
  3. $i = 0;
  4. while ($i < 10)
  5. {
  6.   $color = ($color == "#000000") ? "#FFFFFF" : "#000000";
  7.   echo $color."<br>";
  8.   $i++;
  9. }
  10. ?>
  11.  



Fechas en MySQL
Una lista de funciones muy útiles para trabajar con fechas en nuestra base de datos MySQL

http://www.xlwebmasters.com/modules.php?d=doc&f=doc2&id=1057



Saber si un año es bisiesto
Pues eso :xD (por Azielito)

Código
  1. <?php
  2. function Bisiesto($anyo)
  3. {
  4. return checkdate(02,29,$anyo);
  5. }
  6. ?>
  7.  

... y asi funciona ...

Código
  1. <?php
  2. $actual = date("Y");
  3. $sig = $actual+1;
  4. if(Bisiesto($actual)){
  5. echo $actual." es bisiesto<br>";
  6. }else{
  7. echo $actual." no es bisiesto<br>";
  8. }
  9.  
  10. if(Bisiesto($sig)){
  11. echo $sig." es bisiesto<br>";
  12. }else{
  13. echo $sig." no es bisiesto<br>";
  14. }
  15. ?>
  16.  



Forzar descarga
Forzar la descarga de un archivo desde PHP en un navegador

Código
  1. header("Content-type: application/force-download");
  2.  


Título: Re: Pequeños trucos en PHP
Publicado por: дٳŦ٭ en 31 Marzo 2007, 01:53 am
Aquí dejo una función muy sencilla pero útil  ;)

Código
  1. <?php
  2. function conectar($host, $user, $pass, $database){
  3. $conectar = mysql_connect($host, $user, $pass) or die(mysql_error());
  4. mysql_select_db($database,$conectar);
  5. return $conectar;
  6. }
  7. $conexion=conectar("tuhost","user","password","basededatos");
  8. ?>
  9.  

Por ejemplo, en cada desarrollo creo un archivo llamado db.php y lo incluyo (include()) en mis php que usan MySQL. Ya solo utilizamos la variable $conexion como identificador de conexión.



Validar email
Una función para validar tu email (incluyendo subdominios).
Código
  1. <?php
  2. function ValidaMail($v_email) {
  3.    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$", $v_email )){
  4. return true;
  5.   }
  6. else{
  7.       return false;
  8.     }
  9. }
  10. ?>
  11.  



Asegurando contra Inyección SQL
Es una función que incluye el SMF para evitar inyección SQL:
Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>
  15.  



Redireccionar a HTTPS
Si nuestra web la tenemos normal con el 'HTTP' pero si queremos redireccionarlos automaticamente a HTTPS (necesitas un certificado) con esto lo puedes hacer:

Código
  1. <?php
  2. if(!$_SERVER['HTTPS']== 'on'){
  3.       $nueva="https://". $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  4.       header("Location: $nueva");
  5.       exit();
  6.    }
  7. ?>
  8.  



Mandar email con PHP
Enviar email con la función mail() de PHP.

Código
  1. <?php
  2. //Ejemplo: send_mail("user@mail.com","cuerpo","asunto","demi@localhost","demi");
  3.  
  4. function send_mail($to, $body, $subject, $fromaddress, $fromname, $attachments=false)
  5. {
  6.  $eol="\r\n";
  7.  $mime_boundary=md5(time());
  8.  
  9.  # Common Headers
  10.  $headers .= "From: ".$fromname."<".$fromaddress.">".$eol;
  11.  $headers .= "Reply-To: ".$fromname."<".$fromaddress.">".$eol;
  12.  $headers .= "Return-Path: ".$fromname."<".$fromaddress.">".$eol;    // these two to set reply address
  13.  $headers .= "Message-ID: <".time()."-".$fromaddress.">".$eol;
  14.  $headers .= "X-Mailer: PHP v".phpversion().$eol;          // These two to help avoid spam-filters
  15.  
  16.  # Boundry for marking the split & Multitype Headers
  17.  $headers .= 'MIME-Version: 1.0'.$eol.$eol;
  18.  $headers .= "Content-Type: multipart/mixed; boundary=\"".$mime_boundary."\"".$eol.$eol;
  19.  
  20.  # Open the first part of the mail
  21.  $msg = "--".$mime_boundary.$eol;
  22.  
  23.  $htmlalt_mime_boundary = $mime_boundary."_htmlalt"; //we must define a different MIME boundary for this section
  24.  # Setup for text OR html -
  25.  $msg .= "Content-Type: multipart/alternative; boundary=\"".$htmlalt_mime_boundary."\"".$eol.$eol;
  26.  
  27.  # Text Version
  28.  $msg .= "--".$htmlalt_mime_boundary.$eol;
  29.  $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
  30.  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  31.  $msg .= strip_tags(str_replace("<br>", "\n", substr($body, (strpos($body, "<body>")+6)))).$eol.$eol;
  32.  
  33.  # HTML Version
  34.  $msg .= "--".$htmlalt_mime_boundary.$eol;
  35.  $msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
  36.  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  37.  $msg .= $body.$eol.$eol;
  38.  
  39.  //close the html/plain text alternate portion
  40.  $msg .= "--".$htmlalt_mime_boundary."--".$eol.$eol;
  41.  
  42.  if ($attachments !== false)
  43.  {
  44.    for($i=0; $i < count($attachments); $i++)
  45.    {
  46.      if (is_file($attachments[$i]["file"]))
  47.      {  
  48.        # File for Attachment
  49.        $file_name = substr($attachments[$i]["file"], (strrpos($attachments[$i]["file"], "/")+1));
  50.  
  51.        $handle=fopen($attachments[$i]["file"], 'rb');
  52.        $f_contents=fread($handle, filesize($attachments[$i]["file"]));
  53.        $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();
  54.        $f_type=filetype($attachments[$i]["file"]);
  55.        fclose($handle);
  56.  
  57.        # Attachment
  58.        $msg .= "--".$mime_boundary.$eol;
  59.        $msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol;  // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
  60.        $msg .= "Content-Transfer-Encoding: base64".$eol;
  61.        $msg .= "Content-Description: ".$file_name.$eol;
  62.        $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
  63.        $msg .= $f_contents.$eol.$eol;
  64.      }
  65.    }
  66.  }
  67.  
  68.  # Finished
  69.  $msg .= "--".$mime_boundary."--".$eol.$eol;  // finish with two eol's for better security. see Injection.
  70.  
  71.  # SEND THE EMAIL
  72.  ini_set(sendmail_from,$fromaddress);  // the INI lines are to force the From Address to be used !
  73.  $mail_sent = mail($to, $subject, $msg, $headers);
  74.  
  75.  ini_restore(sendmail_from);
  76.  
  77.  return $mail_sent;
  78. }
  79. ?>
  80.  



Checar headers
Chequea si ya se enviaron cabeceras y en que parte.

Código
  1. <?php
  2.  
  3. // Si no se han enviado cabeceras, enviar una
  4. if (!headers_sent()) {
  5.    header('Location: http://www.example.com/');
  6.    exit;
  7. }
  8.  
  9. // Un ejemplo del uso de las parametros opcionales archivo y linea, a
  10. // partir de PHP 4.3.0.
  11. // Note que $nombre_archivo y $num_linea son pasados para su uso posterior.
  12. // No les asigne valores con anterioridad.
  13. if (!headers_sent($nombre_archivo, $num_linea)) {
  14.    header('Location: http://www.example.com/');
  15.    exit;
  16.  
  17. // Probablemente quiera producir un error aqui.
  18. } else {
  19.  
  20.    echo "Las cabeceras ya fueron enviadas en $nombre_archivo en la linea " .
  21.         "$num_linea\nNo es posible redireccionar, por ahora por favor " .
  22.         "pulse este <a href=\"http://www.example.com\">enlace</a> en su " .
  23.         "lugar\n";
  24.    exit;
  25. }
  26.  
  27. ?>

Otros más:
Glosario de funciones
http://foro.elhacker.net/index.php/topic,65126.0.html


Título: Re: Pequeños trucos en PHP
Publicado por: born2kill en 16 Julio 2007, 00:22 am
Aqui algunas funciones simples y utiles  :)

Código
  1. <?php
  2. function mysql_now() {
  3.    $fecha = fecha(”Y-m-d H:i:s”);
  4.    return $fecha;
  5. }
  6. ?>

Con la función MySqlNow, podemos obtener la hora y fecha local desde MYSQL.



Código
  1. <?php
  2. // Abrimos la conexion FTP
  3. $conn_id = ftp_connect($ftp_server);
  4.  
  5. // Entramos con nuestro user & pass
  6. $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  7.  
  8. // Chequeamos la conexion
  9. if ((!$conn_id) || (!$login_result)) {
  10.        echo "Fallo conexion";
  11.        exit;
  12.    } else {
  13.        echo "Conectado a $ftp_server, for user $ftp_user_name";
  14.    }
  15.  
  16. // Cerramos la conexion
  17. ftp_close($conn_id);
  18. ?>  
  19.  

Con esta función nos conectamos a un servidor FTP, y luego nos desconectamos, esto es util para si tenemos algun script y tenemos que renombrar archivos, etc.

B0rn2kill


Título: Re: Pequeños trucos en PHP
Publicado por: Red Mx en 16 Julio 2007, 01:28 am
Ps ay les voy con unas

Código
  1. //------ Funciones de abstraccion de consultas SQL ---------------------
  2.  
  3. //-INSERT- $columns=get_commas(...)   $values=get_commas(...)
  4. function get_insert($table, $columns, $values){
  5. return "INSERT INTO $table ($columns) VALUES ($values)";
  6. }
  7.  
  8. //-UPDATE- $values=get_mult_set(...)   $where=get_mult_set(...) o get_simp_set(...)
  9. function get_update($table, $values, $where){
  10. return "UPDATE $table SET $values WHERE $where";
  11. }
  12.  
  13. //-UPDATE- actualiza una tabla con valores de otra (sólo MySQL >4.xx)
  14. function get_update_join($table_a, $table_b, $id_a, $id_b, $values, $where=''){
  15. if($where!='') $where="AND ($where)";
  16. return "UPDATE $table_a a, $table_b b SET $values WHERE a.$id_a=b.$id_b $where";
  17. }
  18.  
  19. //-SELECT- $columns=get_commas(...) o '*'   $where=get_mult_set(...) o get_simp_set(...)
  20. function get_select($table, $columns, $where='', $order=''){
  21. $tmp = "SELECT $columns FROM $table";
  22. if($where!=''){
  23. $tmp.=" WHERE $where";
  24. }
  25. if($order!=''){
  26. $tmp.=" ORDER BY $where";
  27. }
  28. return $tmp;
  29. }
  30.  
  31. //-SELECT- entre 2 tablas por 2 indices comunes
  32. function get_select_join($table_a, $table_b, $id_a, $id_b, $columns, $where='', $order=''){
  33. $table ="$table_a a, $table_b b";
  34. $w="a.$id_a=b.$id_b ";
  35. if($where!='') $w.="AND ($where)";
  36. return get_select($table, $columns, $w, $order);
  37. }
  38.  
  39.  
  40. //-DELETE-  $where=get_mult_set(...) o get_simp_set(...)
  41. function get_delete($table, $where=''){
  42. $tmp = "DELETE FROM $table";
  43. if($where!=''){
  44. $tmp.=" WHERE $where";
  45. }
  46. return $tmp;
  47. }
  48. //- get_commas(true|false, 1, 2, 4...) true pone comillas  => '1','2','4'...
  49. function get_commas(){
  50. $com = $a[0];
  51. return get_commasA(array_slice($a, 1, count($a)-1), $com);
  52. }
  53. //- como la anterior pero devuelve entre comas el array pasado
  54. function get_commasA($arr_in, $comillas=true){
  55. $temp='';
  56. $coma="'";
  57. if(!$comillas) $coma=''; //-el 1er param==true, metemos comas
  58.  
  59. foreach($arr_in as $arg){
  60.   if($temp!='')  $temp.=",";
  61.   if(substr($arg,0,2)=='!!'){ //- Si empieza por !! no le pongo comas...
  62. $temp.=substr($arg,2); continue;
  63.   }
  64.   $temp.="$coma".$arg."$coma";
  65. }
  66. return $temp;
  67. }
  68.  
  69. //- Devuelve una asignacion (por defecto) simple entre comillas  X='1'
  70. function get_simp_set($col, $val, $sign='=', $comillas=true){
  71. $cm="'";
  72. if(!$comillas) $cm='';
  73. if(substr($val,0,2)=='!!'){ //- Si empieza por !! no le pongo comas...
  74. $val=substr($val,2); $cm='';
  75. }
  76. return $col."$sign $cm".$val."$cm";
  77. }
  78.  
  79. //-Mezcla cada valor de $a_cols, con uno de $a_vals   "X='1', T='2'...
  80. //- ej:  con $simb='or'  X='1' or T='2'...
  81. //- ej:  con $sign='>'   X>'1' or T>'2'...
  82. function get_mult_set($a_cols, $a_vals, $simb=',', $sign='=', $comillas=true){
  83. $temp='';
  84. for($x=0;$x<count($a_cols);$x++){
  85. if($temp!='')  $temp.=" $simb ";
  86.   $temp.= get_simp_set($a_cols[$x],$a_vals[$x], $sign, $comillas);
  87. }
  88. return $temp;
  89. }
  90.  
  91. function get_between($col, $min, $max){
  92. return "($col BETWEEN $min AND $max)";
  93. }
  94.  
  95.  
  96. ?>
  97.  
  98.  


Título: Re: Pequeños trucos en PHP
Publicado por: coolfrog en 11 Agosto 2007, 19:18 pm
aqui les paso mi clase:
hola que tal, bueno hice una clase para evitar tener que cambiar la sintaxis con diferentes bases de datos, todo ese proceso de queries y connects es muy engorroso y bueno aqui esta mi clase hecha en php5 (la hice en php4 pero la actualize).

Deben nombrar a este archivo "DBALL.php" (nota: no significa Dragon Ball, significa data bases all - todas las bases de datos)   ;D ;D
Código
  1. <?php
  2. /**
  3.  * Creador: Coolfrog  from Bolivia
  4.  * Correo: jm.neutron@gmail.com
  5.  * Blog: http://mundocoolf.blogspot.com
  6.  * Web Page: ***En progreso***
  7.  * Version:1.1
  8.  *
  9.  * Clase para php5  que permite ejecutar MYSQL, POSTGRESQL  E ISIS
  10.  * en versiones siquientes  se aumentara para oracle y otras que sean necesarias.
  11.  * Ultima Acualización 6/8/07
  12.  *
  13.  * Es cogigo libre y puede ser distribuido a cualquier persona, solo una condicion ,para usar esta clase deben dejar mis datos ;) es lo unico que les agradeceria que hicieran
  14.  */
  15. include("iniDB.php"); //archivo que inicia las variables estaticas, SIRVE PARA TRABAJAR CON UN SOLO MOTOR DE BASE DATOS
  16. class DBALL{
  17. public static $host;
  18. public static $usr;
  19. public static $pass;
  20. public static $dbname;
  21. public static $motor;
  22. private $conex;
  23. private $result;
  24. public static $showErrors;
  25.  
  26. /*#######DESCOMENTAR EL CONSTRUCTOR SI SE QUIERE TRABAJAR CON DOS O MAS MOTORES DE BASES DE DATOS AL MISMO TIEMPO, Y HACER LA CONEXCION CON EL CONSTRUCTOR PARA CADA MOTOR#######*/
  27. /**
  28. * constructor que inicia las variables
  29. *
  30. * @param str $host
  31. * @param str $usr
  32. * @param str $pass
  33. * @param str $dbname
  34. * @param str $motor
  35.     */
  36. /*function __construct($host,$usr,$pass,$dbname,$motor){
  37. self::$host=$host;
  38. self::$usr=$usr;
  39. self::$pass=$pass;
  40. self::$dbname=$dbname;
  41. self::$motor=$motor;
  42. }*/
  43. /*#####CONSTRUCTOR: DESCOMENTAR HASTA AQUI#####*/
  44. /**
  45. * metodo que conecta a una base de datos dependiendo del parameto $motor
  46. * @return boolean
  47.     */
  48. public function dbConnect(){
  49.    self::$motor=strtoupper(self::$motor);
  50.    $v=false;
  51. if(self::$motor=="MYSQL"){
  52. $this->conex=mysql_connect(self::$host,self::$usr,self::$pass);
  53. $var=mysql_select_db(self::$dbname,$this->conex);
  54. if($var){
  55. $v=true;
  56. }
  57. } else if(self::$motor=="PSQL"){
  58.     $this->conex=@pg_connect("host=".self::$host." dbname=".self::$dbname." user=".self::$usr." password=".self::$pass);
  59. if($this->conex){
  60.     $v=true;
  61. }
  62.    } else if(self::$motor=="ISIS"){
  63.   $this->conex=isis_open(self::$dbname,"-v error -format aligned -encoding ISO8859_1");
  64.     if($this->conex){
  65. $v=true;
  66. }
  67. }
  68. //devuelve true si se conecto y false si hay error
  69. return $v;
  70. }
  71. /**
  72.  * selecciona registros SELECTS
  73.  *
  74.  * @param string $consulta
  75.  * @return array
  76. */
  77. public function dbSelect($consulta){
  78. $res=array();
  79. if(self::$motor=="MYSQL"){
  80. $this->result = mysql_query($consulta);
  81. if(self::$showErrors){
  82. if(mysql_errno($this->conex)!=0)
  83.     echo "Error ".mysql_errno($this->conex)." : ".mysql_error($this->conex);
  84.     }
  85. $fila= mysql_num_rows($this->result);
  86. $i=0;
  87. while ($row = mysql_fetch_object($this->result)){
  88. $res[$i]=$row;
  89. $i++;
  90. }
  91. mysql_free_result($this->result);
  92. }else if(self::$motor=="PSQL"){
  93. $this->result = @pg_query($this->conex,$consulta);
  94. $fila=@pg_numrows($this->result);
  95. for($i=0;$i<$fila;$i++){
  96. $res[$i]=@pg_fetch_object($this->result,$i);
  97.     }
  98. @pg_free_result($this->result);
  99.  
  100. }else if (self::$motor=="ISIS"){
  101. $this->result = isis_query($consulta,$this->conex);
  102. $i=0;
  103. if ($this->result!=null && $this->result!='') {
  104. while($record = isis_fetch_flat_array($this->result)){
  105. $res[$i]=$record;
  106.    $i++;
  107. }
  108. }
  109.     }
  110. return $res;
  111. }
  112. /**;
  113. * realiza consultas como:UPDATE,INSERT AND DELETE
  114. * retorna true si la consulta se ejecuto correctamente caso contrario false
  115. *
  116. * @param string $consulta
  117. * @return boolean
  118. */
  119. public function dbABM($consulta){
  120. $r=false;
  121. if(self::$motor=="MYSQL"){
  122. $this->result = mysql_query($consulta);
  123. if(self::$showErrors){
  124. if(mysql_errno($this->conex)!=0)
  125.     echo "Error ".mysql_errno($this->conex)." : ".mysql_error($this->conex);
  126.     }
  127. //mysql_free_result($this->result);
  128. }else if(self::$motor=="PSQL"){
  129. $this->result = @pg_query($this->conex,$consulta);
  130. pg_free_result($this->result);
  131. }
  132. if ($this->result) {
  133. $r=true;
  134. }
  135. //Devuelve false en caso de error
  136. return $r;
  137. }
  138. /**
  139. * Inicia la transaccion, retorna true si la transaccion se Inicia correctamente caso contrario false
  140. *
  141. * @return Boolean
  142. */
  143. public function dbBeginTransaction(){
  144. if(self::$motor=="MYSQL"){
  145. $this->result = mysql_query("BEGIN");
  146. }else{
  147. $this->result = pg_query($this->conex,"BEGIN");
  148. }
  149. if ($this->result) {
  150. return true;
  151. //echo "Transaccion Iniciada";
  152. }
  153. else
  154.    return false;
  155. }
  156. /**
  157. * Cancela la transaccion, retorna true si la transaccion es cancelada correctamente caso contrario false
  158. *
  159. * @return Boolean
  160. */
  161.    public function dbCancelTransaction(){
  162.         if(self::$motor=="MYSQL"){
  163. $this->result = mysql_query("ROLLBACK");
  164. }else{
  165. $this->result = pg_query($this->conex,"ROLLBACK");
  166. }
  167. if ($this->result) {
  168. return true;//$r=true;
  169. //echo "Transaccion Cancelada";
  170. }
  171. else
  172.    return false;
  173.  
  174. }
  175. /**
  176. * Termina la transaccion, retorna true si la transaccion termina correctamente caso contrario false
  177. *
  178. * @return Boolean
  179. */
  180. public function dbEndTransaction(){
  181. if(self::$motor=="MYSQL"){
  182. $this->result = mysql_query("COMMIT");
  183. }else{
  184. $this->result = pg_query($this->conex,"COMMIT");
  185. }
  186. if ($this->result) {
  187. return true;
  188. //echo "Transaccion Terminada";
  189. } else
  190.    return false;
  191. }
  192.  
  193. public function dbClose(){
  194. if(self::$motor=="MYSQL"){
  195. }else if(self::$motor=="PSQL"){
  196. }else if (self::$motor=="ISIS"){
  197.    @isis_close($this->conex);//$this->dbname,"-v error -format aligned -encoding ISO8859_1"
  198. }
  199. }
  200.  
  201.  
  202. // #################### FUNCIONES EXCLUSIVAS PARA ISIS #######################
  203. /*PUEDEN BORRAR O COMENTAR ESTAS FUNCIONES SI NO UTILIZAN  ISIS*/
  204. private function num_reg_query(){  //retorna el numer de registros de la consulta
  205. if ($this->result!=null && $this->result!='') {
  206. return isis_num_rows($this->result);
  207. }//else return 0;
  208. }
  209. private function num_reg(){ //retorna el numer de registros de toda la BD
  210. return isis_last_mfn($this->conex);
  211. }
  212. private function get_reg($mfnindex){ //retorna el registro especificado
  213. return isis_fetch_flat_array_from_mfn($mfnindex,$this->conex);
  214. }
  215. // #################### FUNCIONES EXCLUSIVAS PARA ISIS #######################
  216. }
  217. ?>
  218.  

El archivo de configuracion de los parametros iniciales es este:
Deben nombrar a este archivo "iniDB.php"
Código
  1. <?php
  2. //parametros de inicio de la base de datos
  3. DBALL::$host="localhost";     //la ruta del servidor donde esta la BD
  4. DBALL::$usr="root";             //el usuario para conectarse
  5. DBALL::$pass="mysql";        //el password para conectarse
  6. DBALL::$dbname="logico";   //nombre de la base de datos
  7. DBALL::$motor="mysql";     //el motor puede ser mysql,postgres o isis
  8. DBALL::$showErrors=true;  // indica si se deben mostrar los errores de la BD
  9. ?>
  10.  

Como dice al inicio de los comentarios cualquiera que este interesado puede usar mi clase solo les pido que dejen mis datos al inicio smiley

Ahora su forma de uso es la siguiente para un INSERT, DELETE O UPDATE:
Código
  1. $categoria="php"
  2. $categoriaPadre=1
  3. include("DBALL.php"); //incluyen el archivo que contiene la clase
  4. $mydb=new DBALL();  //instancian a la clase
  5. if($mydb->dbConnect()){  //el metodo dbConnect devuelve true si no hay problemas
  6. //una consulta insert
  7. $sql="INSERT INTO CATEGORIA VALUES(default,'$categoria',$categoriaPadre);";
  8.    if($mydb->dbABM($sql)) //procesa consultas insert,delete y update
  9.        echo "SE INSERTO CORRECTAMENTE");
  10. else  echo "NO SE PUEDO INSERTAR";
  11. }
  12. else{
  13. echo "NO SE PUDO CONECTAR";
  14. }
  15.  

Ahora su forma de uso es la siguiente para un SELECT

Código
  1. include("DBALL.php"); //incluyen el archivo que contiene la clase
  2. $mydb=new DBALL();  //instancian a la clase
  3. if($mydb->dbConnect()){  //el metodo dbConnect devuelve true si no hay problemas
  4. //una consulta select
  5. $sql="select * from categoria";
  6. $reg=$mydb->dbSelect($sql); //dbSelect devuelve un array de objetos
  7. //para recorrer el array
  8. for($i=0;$i<count($reg);$i++){
  9. echo "<option value=".$reg[$i]->idCat.">".$reg[$i]->nombreCategoria."</option>";
  10. //se accede a los nombres los campos como si fueran propiedades de objetos
  11. }
  12. }
  13. else{
  14. echo "NO SE PUDO CONECTAR";
  15. }
  16.  

Para terminar deben guardar los dos archivos "DBALL.php" y "iniDB.php" en el mismo directorio.


Bueno eso es todo, tb. tiene metodo para manejar transacciones pero eso es mas facil y si tienen dudas pregunten que con gusto voy a contestar.

PD: Si alguien quiere modificar o ayudarme a hacer algunas mejoras con gusto las recibo, y si quieren la clase para php 4 solo avisen.


Título: Funcion para cortar texto
Publicado por: alienmaster en 16 Septiembre 2007, 04:53 am
Funcion para cortar texo o limitar, ideal para ultimas noticias y demas

Código
  1. <?
  2. // Funcion para cortar texto
  3. // Programado por alienmaster <efnworkz@hotmail.com>
  4. // http://4cosas.com
  5. function cortar($text0, $limite){
  6.    $comp = strlen($text0);
  7.    if($comp > $limite){
  8.        return = substr($text0, 0, $limite)."...";
  9.    }
  10.    else{
  11.        return "$text0";
  12.    }
  13. }
  14. ?>


Título: Pequeños trucos en PHP
Publicado por: Carxl en 30 Enero 2008, 04:30 am
Forma abreviada para imprimir en pantalla

Es sencillo!!!

Código:
$nick="Soy Carxl";
<?=$nick?>

Esa instrucción reemplazaría: <?php echo $nick;?>

Saludos ;D


Título: Re: Pequeños trucos en PHP
Publicado por: WHK en 17 Junio 2008, 00:19 am
Hice una pequeña función que permite seleccionar lo que hay dentro de un string desde la palabra necesitada hasta la que finaliza...

Código
  1. <?php
  2.  
  3. function desde_hasta($desde, $hasta, $contenido){
  4. if(eregi($desde ,$contenido)){
  5.  $retorno = explode($desde, $contenido);
  6.  $retorno = $retorno[1];
  7.  $retorno = explode($hasta, $retorno);
  8.  $retorno = $retorno[0];
  9.  return $retorno;
  10. } else {
  11.  return FALSE;
  12. }
  13. }
  14.  
  15. ?>

De esta forma ejecutas:
Código
  1. <?php
  2. $contenido = 'tienes <a href="http://foro.elhacker.net/pm.html">111 mensajes</a>';
  3. $cantidad_mensajes = desde_hasta('tienes <a href="http://foro.elhacker.net/pm.html">', 'mensajes</a>', $contenido);
  4. echo "Cantidad de mensajes: $cantidad_mensajes\n";
  5. ?>
Desbuelve:
Citar
Cantidad de mensajes: 111


Título: Recortar palabras largas
Publicado por: WHK en 7 Septiembre 2008, 21:14 pm
Estaba realizando unas funciones propias para un sistema que estoy haciendo y quería compartirlo con ustedes si es que agún dia tienen la misma necesidad:

Código
  1. <?php
  2. $palabra = "1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950";
  3. echo whk_recorta($palabra,10);
  4. /* Resultado: 1234567891...4647484950 */
  5.  
  6. function whk_recorta($palabra,$limite){
  7. if($limite < 1){
  8.  return $palabra;
  9. }
  10. if(strlen($palabra)>(($limite * 2) + 1)){
  11.  for($cuenta=0;$cuenta<$limite;$cuenta++){
  12.   $palabra_final .= $palabra[$cuenta];
  13.  }
  14.  $palabra_final .= "...";
  15.  for($cuenta = (strlen($palabra) - $limite); $cuenta <= strlen($palabra); $cuenta++){
  16.   $palabra_final .= $palabra[$cuenta];
  17.  }
  18.  return $palabra_final;
  19. }else{
  20.  return $palabra;
  21. }
  22. }
  23. ?>

De esta forma se recortan hacia ambos lados... derecha e isquierda.


Título: Re: Pequeños trucos en PHP
Publicado por: cassiani en 20 Septiembre 2008, 18:54 pm
Código
  1. function rnd_string($LongString){
  2.        $RndString = '';
  3.     for ($i=0; $i<$LongString - 1; $i++){
  4.            switch (rand(0,2)){
  5.                case 0: $RndString .= chr((rand(0,9)) + 48);break;
  6.                case 1: $RndString .= chr((rand(0,25)) + 65);break;
  7.                case 2: $RndString .= chr((rand(0,25)) + 97);break;
  8.            }
  9.     }
  10.     return $RndString;
  11.    }


Título: Re: Funcion para cortar texto
Publicado por: DJmixmancar en 4 Octubre 2008, 16:46 pm
Funcion para cortar texo o limitar, ideal para ultimas noticias y demas

Código
  1. <?
  2. // Funcion para cortar texto
  3. // Programado por alienmaster <efnworkz@hotmail.com>
  4. // http://4cosas.com
  5. function cortar($text0, $limite){
  6.    $comp = strlen($text0);
  7.    if($comp > $limite){
  8.        return = substr($text0, 0, $limite)."...";
  9.    }
  10.    else{
  11.        return "$text0";
  12.    }
  13. }
  14. ?>

oe man una consultatita , como aria esta esta funcion con una consulta en mysql
que muestre las noticias no entiendo bien con mysql


Título: Re: Pequeños trucos en PHP
Publicado por: WHK en 13 Octubre 2008, 09:04 am
Transformación de Strings en múltiples formas

Código
  1. // Powered by GreenCode - WHK
  2. function codifica_base64_gz($buffer){
  3. $buffer = bin2hex(base64_encode(gzcompress($_POST['buffer'])));
  4. $separador = 16; // Editable, separador de 16 bytes.
  5. $separa = 0;
  6. for($cuenta=0;$cuenta<strlen($buffer);$cuenta+=2){
  7.  if($separa == 0){
  8.   $dump .= '"';
  9.  }
  10.  $dump .= '\x'.$buffer[$cuenta].$buffer[$cuenta+1];
  11.  $separa++;
  12.  if($separa == $separador){
  13.   $dump .= '"';
  14.   if($cuenta != (strlen($buffer))-2){
  15.    $dump .= '.'."\n";
  16.   }
  17.   $separa = 0;
  18.  }
  19. }
  20. if($dump[strlen($dump)-1] != '"'){
  21.  $dump .= '"';
  22. }
  23. return
  24. "\x3c\x3fphp\n// ...\n\n/* El retorno es tu buffer */".
  25. "\$str = gzuncompress(base64_decode(\n$dump\n));\n\n// ...\n\x3f\x3e";
  26. }
  27.  
  28. function ascii_a_png($buffer){
  29. return
  30. "\x3c\x3fphp\n// ...\n\n".
  31. "/* El retorno es una imagen */\n".
  32. "\$handle_img = imagecreate(".(int)(strlen($buffer) * 9).", 30);\n".
  33. "\$fondo = imagecolorallocate(\$handle_img, 255, 255, 255);\n".
  34. "\$color_texto = imagecolorallocate(\$handle_img, 0, 0, 255);\n".
  35. "imagestring(\$handle_img, 5, 0, 0, base64_decode(\"".base64_encode($buffer)."\"), \$color_texto);\n".
  36. "header(\"Content-type: image/png\");\n".
  37. "imagepng(\$handle_img);\n\n".
  38. "// ...\n\x3f\x3e";
  39. }
  40.  
  41. function sqlchr($buffer){
  42. for($cuenta=0;$cuenta<strlen($buffer);$cuenta++){
  43.  $dump .= 'char('.ord($buffer[$cuenta]).')';
  44.  if((strlen($buffer) - 1) != $cuenta){
  45.   $dump .= ',';
  46.  }
  47. }
  48. return $dump;
  49. }
  50.  
  51. function sqldword($buffer){
  52. return 'funcion(0x'.bin2hex($buffer).')';
  53. }
  54.  
  55. function urlencode_total($buffer){
  56. $buffer = bin2hex($buffer);
  57. for($cuenta=0;$cuenta<strlen($buffer);$cuenta+=2){
  58.  $dump .= '%'.$buffer[$cuenta].$buffer[$cuenta+1];
  59. }
  60. return $dump;
  61. }
  62.  
  63. function unescape_javascript($buffer){
  64. return '<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">
  65. document.write(unescape("'.urlencode_total($buffer).'"));
  66. </SCRIPT>';
  67. }
  68.  
  69. function php_encode($buffer){
  70. $buffer = bin2hex(base64_encode(gzcompress($_POST['buffer'])));
  71. $separador = 16; // Editable, separador de 16 bytes.
  72. $separa = 0;
  73. for($cuenta=0;$cuenta<strlen($buffer);$cuenta+=2){
  74.  if($separa == 0){
  75.   $dump .= '"';
  76.  }
  77.  $dump .= '\x'.$buffer[$cuenta].$buffer[$cuenta+1];
  78.  $separa++;
  79.  if($separa == $separador){
  80.   $dump .= '"';
  81.   if($cuenta != (strlen($buffer))-2){
  82.    $dump .= '.'."\n";
  83.   }
  84.   $separa = 0;
  85.  }
  86. }
  87. if($dump[strlen($dump)-1] != '"'){
  88.  $dump .= '"';
  89. }
  90. return
  91. "\x3c\x3fphp\n// ...\n".
  92. "/*\nRecuerda que no debes anteponer '\x3c\x3f' ni terminar con '\x3f\x3e'".
  93. "Elimina este comentario.\n*/\n".
  94. "eval(gzuncompress(base64_decode(\n$dump\n)));\n\n// ...\n\x3f\x3e";
  95. }
  96.  
  97. function decodifica_base64_gz($buffer){
  98. $buffer1 = str_replace('"',' ',$buffer);
  99. $buffer1 = str_replace('.',' ',$buffer);
  100. $buffer1 = explode('\x',$buffer);
  101. $buffer1[0] = '';
  102. for($cuenta=0;$cuenta<count($buffer1);$cuenta++){
  103.  if(strlen($buffer1[$cuenta]) == '2'){
  104.   $buffer2 .= ' '.$buffer1[$cuenta];
  105.   $procesando = true;
  106.  }else{
  107.   if($procesando){
  108.    $buffer2 .= ' '.$buffer1[$cuenta][0].$buffer1[$cuenta][1];
  109.   }
  110.  }
  111. }
  112. $buffer2 = explode(' ',$buffer2);
  113. for($cuenta=0;$cuenta<count($buffer2);$cuenta++){
  114.  if(strlen($buffer2[$cuenta]) == '2'){
  115.   $buffer3 .= $buffer2[$cuenta];
  116.  }
  117. }
  118. return gzuncompress(base64_decode(hexa_a_str($buffer3)));
  119. }
  120.  
  121. function ascii_a_sha1($buffer){
  122. return sha1($buffer);
  123. }
  124.  
  125. function hexa_a_str($buffer){
  126. $buffer = preg_replace("/[^a-zA-Z0-9s]/", "", str_replace('\x',' ',$buffer));
  127. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  128.  $dump .= chr(hexdec($buffer[$cuenta].$buffer[($cuenta+1)]));
  129. }
  130. return $dump;
  131. }
  132.  
  133. function ascii_a_decimal($buffer){
  134. for($cuenta=0;$cuenta<strlen($buffer);$cuenta++){
  135.  $dump .= ord($buffer[$cuenta]).' ';
  136. }
  137. return $dump;
  138. }
  139.  
  140. function ascii_a_html_sin_s($buffer){
  141. $buffer = bin2hex($buffer);
  142. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  143.  $dump .= '&#38;#'.hexdec($buffer[$cuenta].$buffer[$cuenta+1]);
  144. }
  145. return $dump;
  146. }
  147.  
  148. function ascii_a_html_con_s($buffer){
  149. $buffer = bin2hex($buffer);
  150. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  151.  $dump .= '&#38;#x'.$buffer[$cuenta].$buffer[$cuenta+1].';';
  152. }
  153. return $dump;
  154. }
  155.  
  156. function generar_htpasswd_sha($user,$pass){
  157. return $user.':{SHA}'.base64_encode(sha1($pass, TRUE));
  158. }
  159.  
  160. function generar_htpasswd_md5($user,$realm,$pass){
  161. return $user.':'.md5($user.':'.$realm.':'.$pass);
  162. }
  163.  
  164. function hexadecimal_a_decimal($buffer){
  165. $buffer = preg_replace("/[^a-zA-Z0-9s]/", "", str_replace('\x',' ',$buffer));
  166. for($cuenta=0; $cuenta<strlen($buffer); $cuenta++){
  167.  if(ctype_xdigit($buffer[$cuenta].$buffer[$cuenta+1])){
  168.   $dump .= hexdec($buffer[$cuenta].$buffer[$cuenta+1]).' ';
  169.   $cuenta++;
  170.  }
  171. }
  172. return $dump;
  173. }
  174.  
  175. function octal_a_decimal($buffer){
  176. $buffer = preg_replace("/[^0-9 s]/", "", $buffer);
  177. $buffer = explode(' ',$buffer);
  178. for($cuenta=0; $cuenta<(count($buffer)-1); $cuenta++){
  179.  $dump .= octdec($buffer[$cuenta]).' ';
  180. }
  181. return $dump;
  182. }
  183.  
  184. function ascii_a_hexadecimal($buffer){
  185. return chunk_split(bin2hex($buffer),2,' ');
  186. }
  187.  
  188. function ascii_a_octal($buffer){
  189. $buffer = bin2hex($buffer);
  190. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  191.  $dump .= hexdec($buffer[$cuenta].$buffer[$cuenta+1]).' ';
  192. }
  193. $dump3 = explode(' ',$dump);
  194. for($cuenta=0; $cuenta<(count($dump3)-1); $cuenta++){
  195.  $dump2 .= decoct($dump3[$cuenta]).' ';
  196. }
  197. return $dump2;
  198. }
  199.  
  200. function debugger(){
  201. global $dump;
  202. if($dump){
  203.  echo htmlspecialchars($dump,ENT_QUOTES);
  204. }else{
  205.  if($_POST['buffer'] and $_POST['algoritmo']){
  206.  echo "No hay datos que devolver";
  207.  }
  208. }
  209. }
  210.  

Uso:

Código
  1. <?php
  2. // .. ..
  3. $dump = ascii_a_png('Hola Elhacker.net'); // Procesa el String.
  4. debugger(); // Imprime en pantalla el resultado evitando un XSS.
  5. // .. ..
  6. ?>

Debido a una incompatibilidad de SMF con carácteres HTML como & y # las dos funciones
ascii_a_html_sin_s()
ascii_a_html_con_s()
No se ven como debieran. Deben aparecer de la siguiente manera:

function ascii_a_html_sin_s($buffer){
 $buffer = bin2hex($buffer);
 for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  $dump .= '&#'.hexdec($buffer[$cuenta].$buffer[$cuenta+1]);
 }
 return $dump;
}

function ascii_a_html_con_s($buffer){
 $buffer = bin2hex($buffer);
 for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  $dump .= '&#x'.$buffer[$cuenta].$buffer[$cuenta+1].';';
 }
 return $dump;
}


Título: [Funcion] Para Instaladores
Publicado por: Dacan en 19 Diciembre 2008, 14:50 pm
Función:
Código
  1. <?
  2. // Creada por Dacan
  3. function instalador ($archivo , $variable1, $variable2, $variable3, $variable4){
  4. $manejador = @fopen($archivo, "w+");
  5.  
  6. $contenido = "<?\n";
  7. $contenido .= "\$servidor = \"$variable1\";\n";
  8. $contenido .= "\$usuario = \"$variable2\";\n";
  9. $contenido .= "\$password = \"$variable3\";\n";
  10. $contenido .= "\$base = \"$variable4\";\n";
  11. $contenido .= "\$conexion = @mysql_connect(\$servidor, \$usuario, \$password) or die(mysql_error());\n";
  12. $contenido .= "@mysql_select_db(\$base, \$conexion) or die (mysql_error());\n";
  13. $contenido .= "?>";
  14. if(fwrite($manejador, $contenido)){
  15. return true;
  16. }
  17. else{
  18. return false;
  19. }
  20. }
  21. ?>

Ejemplo de Uso:

Código
  1. <?
  2. if(instalador("config.php", $_POST['servidor'], $_POST['usuario'], $_POST['password'], $_POST['base'])){
  3. echo "Datos guardados correctamente";
  4. }
  5. else {
  6. echo "Ocurrio un error!";
  7. }
  8. ?>

Como Funciona:

Código
  1. function instalador ($archivo , $variable1, $variable2, $variable3, $variable4){

La variable $archivo corresponde al archivo que se va modificar, $variable 1 corresponde al host donde esta alojada la base de datos, $variable2 corresponde al usuario de la base de datos, $variable3 corresponde la password de la base de datos y $variable4 corresponde el nombre de la base de datos.

Si encuentran algún error, modifican algo, tienen dudas no duden en avisarme, si lo usan en sus scripts aunque sea dejen la parte de Creada por Dacan se les agradece.

Este tema proviene de otro foro al cual pertenezco para que no hayan confusiones: http://mixforo.com/foro/index.php/topic,61657.0.html


Saludos, Dacan  :D


Título: Re: [Funcion] Para Instaladores
Publicado por: & eDu & en 20 Diciembre 2008, 16:32 pm
Me gusta, lo utilizaré para el instalador que estoy creando... ;)


Título: Re: [Funcion] Para Instaladores
Publicado por: Dacan en 21 Diciembre 2008, 00:54 am
Cuando pueda la mejoro con mas opciones así cuando necesiten hacer un instalador se ahorren mucho código.

Saludos, Dacan  :D


Título: Re: Pequeños trucos en PHP
Publicado por: WHK en 21 Diciembre 2008, 04:11 am
Podríamos hacer un solo post en el comienzo con uno o grupos de php algo así como librerías de códigos sacados de acá mismo y usarlos en sistemas, pasar todo a funciones y aplicarlos como uno quiera, por ejemplo que todo comienze con un include a ./.class_php/includes.php y ese include que se encargue de hacer el resto y ese directorio con acceso denegado al acceso público, de esta forma si alguien necesita alguna función de acá solo descarga el sistema y le hace un include y listo.

Si es que se puede con el permiso del mod, habría que pedir permiso a los que postearon cada tema para ver si se puede incluir o no, es mas, hasta podría elegirse solo los mas funcionales para ahorrar espacioy hacer algo así como un concurso mensual y los mejores serán incluido al paquete  :P, si fuera así cada persona que posteara algo acá tendría que decir que podemos incluirlo si es que quiere que se incluya.. claro nuevamente con el permiso del mod  :P


Título: Re: Pequeños trucos en PHP
Publicado por: дٳŦ٭ en 21 Diciembre 2008, 04:52 am
Claro ;) no hay problema, nomas me avisan a que le dejo y quito chincheta  ;)


Título: Re: Pequeños trucos en PHP
Publicado por: WHK en 21 Diciembre 2008, 06:49 am
Bién, gracias.. ahi va:

http://foro.elhacker.net/php/proyecto_phplibs_creado_por_los_usuarios_de_elhackernet-t239182.0.html

Como son mas de un tema de donde sacar mejor hize uno nuevo  :P como fuiste el único que me ha respondido que puedo poner tus scripts en el sistema entonces solo los dos estamos integrados, si alguien mas quiere hacerlo que se haga presente en ese post que puse.


Título: Re: Pequeños trucos en PHP
Publicado por: e500 en 26 Diciembre 2008, 03:11 am
Exelente! :)


Título: Generar series de DNI's falsos
Publicado por: Erik# en 18 Enero 2009, 21:39 pm
Bueno, este generador lo hice hace tiempo, es util para formularios de dominios, hosting, emails...:

Código
  1. <?php
  2.  
  3. // generador de dnis para formularios
  4.  
  5. // Creado por Erik#
  6.  
  7. // erik_unix@hotmail.com
  8.  
  9. function dni($dni){
  10.  
  11. $gen= (int) ($dni / 23);
  12.  
  13. $gen *= 23;
  14.  
  15. $gen= $dni - $gen;
  16.  
  17. $gen2= "TRWAGMYFPDXBNJZSQVHLCKEO";
  18.  
  19. $letra= substr ($gen2, $gen, 1);
  20.  
  21. return $dni.$letra;
  22.  
  23. }
  24.  
  25. $n1 = rand(0,9);
  26.  
  27. $n2 = rand(0,9);
  28.  
  29. $n3 = rand(0,9);
  30.  
  31. $n4 = rand(0,9);
  32.  
  33. $n5 = rand(0,9);
  34.  
  35. $n6 = rand(0,9);
  36.  
  37. $n7 = rand(0,9);
  38.  
  39. $n8 = rand(0,9);
  40.  
  41. $ndni = $n1.$n2.$n3.$n4.$n5.$n6.$n7.$n8;
  42.  
  43. echo '<b>DNI: </b>'.dni($ndni);
  44.  
  45. ?>
  46.  
  47.  


Título: Captcha en PHP
Publicado por: Erik# en 18 Enero 2009, 22:34 pm
Bueno, os dejo un captcha que cree usando sesiones, en principio iva a usar cookies, pero, me lo repense:

captchaverf.php
Código
  1. <?php
  2.  
  3.  
  4. if($_POST['ok']){
  5.  
  6. if($_POST['captcha'] == $_SESSION['captcha']){
  7.  
  8. echo "Captcha correcto";
  9.  
  10. }else{
  11.  
  12. echo "Captcha incorrecto";
  13.  
  14. }
  15.  
  16. }else{
  17.  
  18. echo '<img src="captcha.php"><br>
  19.  
  20. <form action="captchaverf.php" method="POST">
  21.  
  22. <input type="text" name="captcha"><br><input type="submit" name="ok" value="Verificar"></form>';
  23.  
  24. }
  25.  
  26. ?>
  27.  
  28.  

captcha.php
Código
  1. <?php
  2.  
  3.  
  4. header("Content-type: image/png");
  5.  
  6. $_SESSION['captcha'] = rand(0001, 9999);
  7.  
  8. $imagen = imagecreate(50,25);
  9.  
  10. $fondo = imagecolorallocate($imagen, 0, 0, 0);
  11.  
  12. $texto = imagecolorallocate($imagen, 255, 255, 255);
  13.  
  14. imagestring($imagen, 10, 6, 5,$_SESSION['captcha'], $texto);
  15.  
  16. imagepng($imagen);
  17.  
  18. ?>

Prueba: www.krews.es/captchaverf.php


Título: Re: Pequeños trucos en PHP
Publicado por: Servia en 25 Enero 2009, 22:41 pm
Esta funcióncomo se usaría?
Código
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>

Se pone en cada archivo php y listo? no verdad? :(


Título: Re: Pequeños trucos en PHP
Publicado por: Dacan en 25 Enero 2009, 23:19 pm
Es para poner slashes del tipo (\) y se usa:

Código
  1. echo addslashes__recursive($tuvariable);

Aunque en ese código ya esta siendo utilizada en todas las superglobales.

Saludos, Dacan  :D


Título: Evitando Inclusiones malicias de XSRF.
Publicado por: HardieVon en 28 Enero 2009, 07:30 am
Hola que tal, a mi me fastidia andar capturando captchas y explotando mi server con sesiones. sin mencionar la gestion  de cookies como sesiones.

Aqui eh hecho una solución aparentemente factible. y digo aparente por que todo es hipotetico aunque supongo que funciona perfecto.

AQUI CON ESTA FUNCION.

Código
  1. <?php
  2. function XSRF($s){
  3. $ref=parse_url($_SERVER['HTTP_REFERER']);
  4. if(($ref['host']==$_SERVER['HTTP_HOST'])&&(basename($ref['path'])==$s)) return true;
  5. }
  6. /* EJEMPLO  */
  7. # El argumento este que se pasa, es script donde se supone viene el vinculo por ejemplo
  8. # en un script donde su nombre es admin_posts.php y contine algo como <a href="eliminar.php?cual=estemero">Eliminar</a>
  9. #entonces en el script eliminar.php ponemos la siguente estructura
  10. if(XSRF("admin_posts.php")){
  11. #ejecuta si es legitimo -->
  12. $gestor=fopen('correcto.txt', 'a');
  13. fwrite($gestor, "OK\n");
  14. fclose($gestor);
  15. #<--
  16. }
  17. ?>


Título: Re: Pequeños trucos en PHP
Publicado por: [u]nsigned en 3 Junio 2009, 07:32 am
Una pregunta, la lectura/escritura de un archivo en el server, consumemenos recursos que el uso de SESIONES?

Saludos


Título: Re: Pequeños trucos en PHP
Publicado por: HardieVon en 3 Junio 2009, 08:08 am
Una pregunta, la lectura/escritura de un archivo en el server, consumemenos recursos que el uso de SESIONES?

Saludos

man no debes de postear eso aqui, y relativamente es lo mismo, mejor usa cookie es mas lijero que el proceso de sesiones.

pero no le veo mucha relacion utilitaria en una sesion y un archivo.

podrias tu sustituir el uso de una sesion con el uso de un archivo??

PD: tu firma me da miedo.


Título: Re: Pequeños trucos en PHP
Publicado por: дٳŦ٭ en 4 Junio 2009, 17:15 pm
Es para poner slashes del tipo (\) y se usa:

Código
  1. echo addslashes__recursive($tuvariable);

Aunque en ese código ya esta siendo utilizada en todas las superglobales.

Saludos, Dacan  :D

Exactirijillo xD, así es, con eso se cepilla todo lo que entra y sale a través del server/php. Aunque si tienes las magic quotes te va a poner tripe \ xD tons le cambié algo...

Código
  1. //----------------------------------------------+
  2. // We claer all traffic of our server |
  3. //----------------------------------------------+
  4. // This function I extrac of SMF system fourum, cleared all " and ' in traffic server
  5. function addslashes__recursive($var){
  6. if (!is_array($var))
  7. return addslashes($var);
  8. $new_var = array();
  9. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  10. return $new_var;
  11. }
  12. //If the magic quotes are disable, aplicate the function, else, do not nothing
  13. $_POST=addslashes__recursive($_POST);
  14. $_GET=addslashes__recursive($_GET);
  15. $_REQUEST=addslashes__recursive($_REQUEST);
  16. $_SERVER=addslashes__recursive($_SERVER);
  17. $_COOKIE=addslashes__recursive($_COOKIE);
  18. }
  19.  

Y pues entrado en tema... les regalo otra!:

Código
  1. // With this function, we are clear the html chars to entity ascii
  2. function clear_chars($var){
  3. if(!is_array($var)){
  4. return htmlspecialchars($var);
  5. }
  6. else{
  7. $new_var = array();
  8. foreach ($var as $k => $v){
  9. $new_var[htmlspecialchars($k)]=clear_chars($v);
  10. return $new_var;
  11. }
  12. }
  13. }
  14. if($_POST) $_POST=clear_chars($_POST);
  15. if($_GET) $_GET=clear_chars($_GET);
  16. if($_REQUEST) $_REQUEST=clear_chars($_REQUEST);
  17. if($_SERVER) $_SERVER=clear_chars($_SERVER);
  18. if($_COOKIE) $_COOKIE=clear_chars($_COOKIE);
  19.  

Suerte


Título: Re: Pequeños trucos en PHP
Publicado por: HardieVon en 24 Junio 2009, 08:48 am
Es para poner slashes del tipo (\) y se usa:

Código
  1. echo addslashes__recursive($tuvariable);

Aunque en ese código ya esta siendo utilizada en todas las superglobales.

Saludos, Dacan  :D

Exactirijillo xD, así es, con eso se cepilla todo lo que entra y sale a través del server/php. Aunque si tienes las magic quotes te va a poner tripe \ xD tons le cambié algo...

Código
  1. //----------------------------------------------+
  2. // We claer all traffic of our server |
  3. //----------------------------------------------+
  4. // This function I extrac of SMF system fourum, cleared all " and ' in traffic server
  5. function addslashes__recursive($var){
  6. if (!is_array($var))
  7. return addslashes($var);
  8. $new_var = array();
  9. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  10. return $new_var;
  11. }
  12. //If the magic quotes are disable, aplicate the function, else, do not nothing
  13. $_POST=addslashes__recursive($_POST);
  14. $_GET=addslashes__recursive($_GET);
  15. $_REQUEST=addslashes__recursive($_REQUEST);
  16. $_SERVER=addslashes__recursive($_SERVER);
  17. $_COOKIE=addslashes__recursive($_COOKIE);
  18. }
  19.  

Y pues entrado en tema... les regalo otra!:

Código
  1. // With this function, we are clear the html chars to entity ascii
  2. function clear_chars($var){
  3. if(!is_array($var)){
  4. return htmlspecialchars($var);
  5. }
  6. else{
  7. $new_var = array();
  8. foreach ($var as $k => $v){
  9. $new_var[htmlspecialchars($k)]=clear_chars($v);
  10. return $new_var;
  11. }
  12. }
  13. }
  14. if($_POST) $_POST=clear_chars($_POST);
  15. if($_GET) $_GET=clear_chars($_GET);
  16. if($_REQUEST) $_REQUEST=clear_chars($_REQUEST);
  17. if($_SERVER) $_SERVER=clear_chars($_SERVER);
  18. if($_COOKIE) $_COOKIE=clear_chars($_COOKIE);
  19.  

Suerte

Sigue estando el return dentro de el bucle.
¬¬ vicioso del vodka


Título: Re: Pequeños trucos en PHP
Publicado por: WHK en 24 Agosto 2009, 05:33 am
más corto:
Código
  1. <?php
  2. $_GET = stripslashses_gpc($_GET);
  3. $_POST = stripslashses_gpc($_POST);
  4. $_COOKIE = stripslashses_gpc($_COOKIE);
  5. $_SERVER = stripslashses_gpc($_SERVER);
  6.  
  7. function stripslashses_gpc($buffer){
  8. if(!function_exists('get_magic_quotes_gpc'))
  9.  return $buffer;
  10.  if(is_array($buffer)){
  11.   foreach($buffer as $variable => $valor){
  12.    $temp[$variable] = stripslashses_gpc($valor);
  13.   }
  14.   return $temp;
  15.  }else{
  16.   return stripslashes($buffer);
  17.  }
  18. }else{
  19.  return $buffer;
  20. }
  21. }
  22. ?>

Y con array_map() es más corto.


Título: Re: Pequeños trucos en PHP
Publicado por: zinfinal en 27 Enero 2011, 18:22 pm
Descripcion: Bueno esto sirve de una palabra agregarle algo en cada letra.

Código:
function letras($palabra, $k){
return implode($k,str_split($palabra));
}

ejemplo:

echo letras('hola', '<br />');
//resultado:
h
o
l
a

ejemplo2:

echo letras('hola', ',');
//resultado:
h,o,l,a


Título: Re: Pequeños trucos en PHP
Publicado por: WHK en 2 Enero 2012, 17:05 pm
Array de 80 valores contando desde el 1, útil para selector de edades:
Código
  1. <?php
  2. $a = array_keys(explode(',', str_repeat(",", 80)));
  3. ?>

Por ejemplo:
Código
  1. <select name="edad">
  2. <?php
  3. $a = array_keys(explode(',', str_repeat(",", 80)));
  4. foreach($a as $id){
  5. echo '<option value="'.$id.'">'.$id.'</option>';
  6. }
  7. ?>
  8. </select>


Título: Re: Pequeños trucos en PHP
Publicado por: free-articles en 25 Marzo 2012, 04:17 am
Como podria hacer en php lo siiguiente?


Imaginamos que tengo una lista con 100 usuarios o los que sean
en un archivo de texto plano txt


en este caso cojemos un user al azahar yo mismo

http://foro.elhacker.net/profiles/escuchamusicabiz-u323186.html

Ahora bien  si yo quiero que el php coja y vea el perfil de los
100 users y me guarde un archivo que me diga el rango que
tiene cada uno, como podria hacerlo?

es decir que el php lea el perfifl y donde pone escrito el rango
lo copie y lo guarde en el archivo añadiendo al usuario el rango que
tenga?


No se como hacerlo, gracias me gustaria aprender a ahacer algo asi.

Leer con php y extraer lo que desee, en este caso el rango del user



Título: Re: Pequeños trucos en PHP
Publicado por: Pirat3net en 7 Abril 2012, 01:06 am
Código
  1. <?php
  2.  
  3.  
  4.  
  5. $nombreClan=$_POST['nombreClan'];
  6. $tag=$_POST['tag'];
  7. $miembro1=$_POST['miembro1'];
  8. $miembro2=$_POST['miembro2'];
  9. $miembro3=$_POST['miembro3'];
  10. $miembro4=$_POST['miembro4'];
  11. $miembro5=$_POST['miembro5'];
  12.  
  13.  
  14.  
  15.        $link = mysql_connect("mysql12.000webhost.com","a6190584_data","database1");
  16.        mysql_select_db("a6190584_data",$link);
  17.  
  18.  
  19.        mysql_query("INSERT INTO clanes (nombreClan,tag,miembro1,miembro2,miembro3,miembro4,miembro5)
  20.        VALUES ('$nombreClan','$tag','$miembro1','$miembro2','$miembro3','$miembro4','$miembro5',$link)");
  21.  
  22.        // Ahora comprobaremos que todo ha ido correctamente
  23.        $my_error = mysql_error($link);
  24.  
  25.        if(!empty($my_error)) {
  26.  
  27.            echo "Ha habido un error al insertar los valores. $my_error";
  28.  
  29.        }
  30.  
  31. ?>


error

Ha habido un error al insertar los valores. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #8)' at line 2


Título: Re: Pequeños trucos en PHP
Publicado por: Graphixx en 29 Mayo 2012, 20:27 pm
A mi me salvo el dia hoy la de quitar saltos de linea:
Código
  1. $sinsalto = eregi_replace("[\n|\r|\n\r]", ' ', $consalto);
 

muy util cuando deseamos pasar esa variable a javascript a travez de varias ventanas. para objetos recomiendo json_encode.


Título: Re: Pequeños trucos en PHP
Publicado por: WarGhost en 29 Mayo 2012, 20:41 pm
eregi_replace esta obsoleta creo, o si no lo esta... es muy desaconsejable usarla.

Es mejor utlizar preg_match o preg_match_all.

Un saludo!


Título: Re: Pequeños trucos en PHP
Publicado por: :ohk<any> en 10 Diciembre 2013, 20:53 pm
Retorna la conversión de números a letras.

Código
  1. <?php
  2.  
  3. class EnLetras
  4. {
  5.  var $Void = "";
  6.  var $SP = " ";
  7.  var $Dot = ".";
  8.  var $Zero = "0";
  9.  var $Neg = "Menos";
  10.  
  11. function ValorEnLetras($x, $Moneda )
  12. {
  13.    $s="";
  14.    $Ent="";
  15.    $Frc="";
  16.    $Signo="";
  17.  
  18.    if(floatVal($x) < 0)
  19.     $Signo = $this->Neg . " ";
  20.    else
  21.     $Signo = "";
  22.  
  23.    if(intval(number_format($x,2,'.','') )!=$x) //<- averiguar si tiene decimales
  24.      $s = number_format($x,2,'.','');
  25.    else
  26.      $s = number_format($x,0,'.','');
  27.  
  28.    $Pto = strpos($s, $this->Dot);
  29.  
  30.    if ($Pto === false)
  31.    {
  32.      $Ent = $s;
  33.      $Frc = $this->Void;
  34.    }
  35.    else
  36.    {
  37.      $Ent = substr($s, 0, $Pto );
  38.      $Frc =  substr($s, $Pto+1);
  39.    }
  40.  
  41.    if($Ent == $this->Zero || $Ent == $this->Void)
  42.       $s = "Cero ";
  43.    elseif( strlen($Ent) > 7)
  44.    {
  45.       $s = $this->SubValLetra(intval( substr($Ent, 0,  strlen($Ent) - 6))) .
  46.             "Millones " . $this->SubValLetra(intval(substr($Ent,-6, 6)));
  47.    }
  48.    else
  49.    {
  50.      $s = $this->SubValLetra(intval($Ent));
  51.    }
  52.  
  53.    if (substr($s,-9, 9) == "Millones " || substr($s,-7, 7) == "Millón ")
  54.       $s = $s . "de ";
  55.  
  56.    $s = $s . $Moneda;
  57.  
  58.    if($Frc != $this->Void)
  59.    {
  60.       $s = $s . " Con " . $this->SubValLetra(intval($Frc)) . "Centavos";
  61.       //$s = $s . " " . $Frc . "/100";
  62.    }
  63.    //return ($Signo . $s . " M.N.");
  64. return ($Signo . $s);
  65.  
  66. }
  67.  
  68.  
  69. function SubValLetra($numero)
  70. {
  71.    $Ptr="";
  72.    $n=0;
  73.    $i=0;
  74.    $x ="";
  75.    $Rtn ="";
  76.    $Tem ="";
  77.  
  78.    $x = trim("$numero");
  79.    $n = strlen($x);
  80.  
  81.    $Tem = $this->Void;
  82.    $i = $n;
  83.  
  84.    while( $i > 0)
  85.    {
  86.       $Tem = $this->Parte(intval(substr($x, $n - $i, 1).
  87.                           str_repeat($this->Zero, $i - 1 )));
  88.       If( $Tem != "Cero" )
  89.          $Rtn .= $Tem . $this->SP;
  90.       $i = $i - 1;
  91.    }
  92.  
  93.  
  94.    //--------------------- GoSub FiltroMil ------------------------------
  95.    $Rtn=str_replace(" Mil Mil", " Un Mil", $Rtn );
  96.    while(1)
  97.    {
  98.       $Ptr = strpos($Rtn, "Mil ");      
  99.       If(!($Ptr===false))
  100.       {
  101.          If(! (strpos($Rtn, "Mil ",$Ptr + 1) === false ))
  102.            $this->ReplaceStringFrom($Rtn, "Mil ", "", $Ptr);
  103.          Else
  104.           break;
  105.       }
  106.       else break;
  107.    }
  108.  
  109.    //--------------------- GoSub FiltroCiento ------------------------------
  110.    $Ptr = -1;
  111.    do{
  112.       $Ptr = strpos($Rtn, "Cien ", $Ptr+1);
  113.       if(!($Ptr===false))
  114.       {
  115.          $Tem = substr($Rtn, $Ptr + 5 ,1);
  116.          if( $Tem == "M" || $Tem == $this->Void)
  117.             ;
  118.          else          
  119.             $this->ReplaceStringFrom($Rtn, "Cien", "Ciento", $Ptr);
  120.       }
  121.    }while(!($Ptr === false));
  122.  
  123.    //--------------------- FiltroEspeciales ------------------------------
  124.    $Rtn=str_replace("Diez Un", "Once", $Rtn );
  125.    $Rtn=str_replace("Diez Dos", "Doce", $Rtn );
  126.    $Rtn=str_replace("Diez Tres", "Trece", $Rtn );
  127.    $Rtn=str_replace("Diez Cuatro", "Catorce", $Rtn );
  128.    $Rtn=str_replace("Diez Cinco", "Quince", $Rtn );
  129.    $Rtn=str_replace("Diez Seis", "Dieciseis", $Rtn );
  130.    $Rtn=str_replace("Diez Siete", "Diecisiete", $Rtn );
  131.    $Rtn=str_replace("Diez Ocho", "Dieciocho", $Rtn );
  132.    $Rtn=str_replace("Diez Nueve", "Diecinueve", $Rtn );
  133.    $Rtn=str_replace("Veinte Un", "Veintiun", $Rtn );
  134.    $Rtn=str_replace("Veinte Dos", "Veintidos", $Rtn );
  135.    $Rtn=str_replace("Veinte Tres", "Veintitres", $Rtn );
  136.    $Rtn=str_replace("Veinte Cuatro", "Veinticuatro", $Rtn );
  137.    $Rtn=str_replace("Veinte Cinco", "Veinticinco", $Rtn );
  138.    $Rtn=str_replace("Veinte Seis", "Veintiseís", $Rtn );
  139.    $Rtn=str_replace("Veinte Siete", "Veintisiete", $Rtn );
  140.    $Rtn=str_replace("Veinte Ocho", "Veintiocho", $Rtn );
  141.    $Rtn=str_replace("Veinte Nueve", "Veintinueve", $Rtn );
  142.  
  143.    //--------------------- FiltroUn ------------------------------
  144.    If(substr($Rtn,0,1) == "M") $Rtn = "Un " . $Rtn;
  145.    //--------------------- Adicionar Y ------------------------------
  146.    for($i=65; $i<=88; $i++)
  147.    {
  148.      If($i != 77)
  149.         $Rtn=str_replace("a " . Chr($i), "* y " . Chr($i), $Rtn);
  150.    }
  151.    $Rtn=str_replace("*", "a" , $Rtn);
  152.    return($Rtn);
  153. }
  154.  
  155.  
  156. function ReplaceStringFrom(&$x, $OldWrd, $NewWrd, $Ptr)
  157. {
  158.  $x = substr($x, 0, $Ptr)  . $NewWrd . substr($x, strlen($OldWrd) + $Ptr);
  159. }
  160.  
  161.  
  162. function Parte($x)
  163. {
  164.    $Rtn='';
  165.    $t='';
  166.    $i='';
  167.    Do
  168.    {
  169.      switch($x)
  170.      {
  171.         Case 0:  $t = "Cero";break;
  172.         Case 1:  $t = "Un";break;
  173.         Case 2:  $t = "Dos";break;
  174.         Case 3:  $t = "Tres";break;
  175.         Case 4:  $t = "Cuatro";break;
  176.         Case 5:  $t = "Cinco";break;
  177.         Case 6:  $t = "Seis";break;
  178.         Case 7:  $t = "Siete";break;
  179.         Case 8:  $t = "Ocho";break;
  180.         Case 9:  $t = "Nueve";break;
  181.         Case 10: $t = "Diez";break;
  182.         Case 20: $t = "Veinte";break;
  183.         Case 30: $t = "Treinta";break;
  184.         Case 40: $t = "Cuarenta";break;
  185.         Case 50: $t = "Cincuenta";break;
  186.         Case 60: $t = "Sesenta";break;
  187.         Case 70: $t = "Setenta";break;
  188.         Case 80: $t = "Ochenta";break;
  189.         Case 90: $t = "Noventa";break;
  190.         Case 100: $t = "Cien";break;
  191.         Case 200: $t = "Doscientos";break;
  192.         Case 300: $t = "Trescientos";break;
  193.         Case 400: $t = "Cuatrocientos";break;
  194.         Case 500: $t = "Quinientos";break;
  195.         Case 600: $t = "Seiscientos";break;
  196.         Case 700: $t = "Setecientos";break;
  197.         Case 800: $t = "Ochocientos";break;
  198.         Case 900: $t = "Novecientos";break;
  199.         Case 1000: $t = "Mil";break;
  200.         Case 1000000: $t = "Millón";break;
  201.      }
  202.  
  203.      If($t == $this->Void)
  204.      {
  205.        $i = $i + 1;
  206.        $x = $x / 1000;
  207.        If($x== 0) $i = 0;
  208.      }
  209.      else
  210.         break;
  211.  
  212.    }while($i != 0);
  213.  
  214.    $Rtn = $t;
  215.    Switch($i)
  216.    {
  217.       Case 0: $t = $this->Void;break;
  218.       Case 1: $t = " Mil";break;
  219.       Case 2: $t = " Millones";break;
  220.       Case 3: $t = " Billones";break;
  221.    }
  222.    return($Rtn . $t);
  223. }
  224.  
  225. }
  226.  
  227. ?>
  228.  

Forma de uso:

La funcion ValorEnLetras nos exige 2 parámetros entre ellos las siglas de la moneda y el valor.

Código
  1. $num = 1200;
  2. $valor=new EnLetras();
  3. $literal = $valor->ValorEnLetras($num,"$USD");
  4. echo $literal;
  5.  

La función ValorEnLetras también puede enviar su segundo parámetro en blanco.

Código
  1. $literal = $valor->ValorEnLetras($num,"");

Saludos