Tråden för användbara funktioner

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3, 4, 5, 6, 7  Nästa
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Figgy



Medlem i: 4741 dagar

Status: Offline



#551012
Inlägg Skrivet: 2008-01-20 01:32      Ämne: Citera

Simpel nyckel-generator med validering.
PHP:
1:
<?php   
2:
/* 
3:
Developed by Daniel Lindén
4:
 
5:
Key-generator  
6:
This key generator can be  
7:
used for validating users  
8:
or condfirmation of an  
9:
user.  
10:
 
11:
The key generator need  
12:
static variables so a  
13:
good way of generating  
14:
keys is to use usernames  
15:
and userid's.  
16:
*/  
17:
  
18:
/* Generate key */  
19:
function Gen_Key ($username,$spec_id) {   
20:
    $key md5($username.$spec_id);   
21:
    $key substr($key,0,20);   
22:
    $done wordwrap($key4"-"1);   
23:
    return $done;   
24:
}   
25:
  
26:
/* Validate key */  
27:
function Validate ($valid_key,$key) {   
28:
    if ($key == $valid_key) {   
29:
        return true;   
30:
    }   
31:
    return false;   
32:
}   
33:
/* Example */  
34:
  
35:
echo Gen_Key("Figgy",352); // Create key   
36:
/* Result: 8489-d3a5-4c13-5409-9861 */  
37:
  
38:
/* Validate key */  
39:
$key '8489-d3a5-4c13-5409-9861';   
40:
if (Validate(Gen_Key("Figgy",352),$key)) {   
41:
    echo "<br />".'Valid Key';   
42:
}   
43:
else {   
44:
    echo "<br />".'Invalid Key';   
45:
}   
46:
?>


Validatorn kanske känns lite onödig då det är enkelt att kolla nyckeln direkt mot gen_key().
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Blackp



Medlem i: 4410 dagar

Status: Offline



#558762
Inlägg Skrivet: 2008-02-19 07:04      Ämne: Citera

hade ett uppdrag av en paranoid client att göra lösenorden så säkra som möjligt -.- och tydligen räckte inte bara md5 till så resultatet blev så här

PHP:
1:
<?php
2:
 
3:
///////////////////////////////////
4:
///FÖR ALLA PARANOIDA GUBBAR SOM///
5:
///FINNS DÄR UTE                ///
6:
///IDE & FUNKTION AV BLACKP     ///
7:
///////////////////////////////////
8:
 
9:
 
10:
//host namn
11:
$dbhost '';
12:
//databas namn
13:
$dbname '';
14:
//databas användarnamn
15:
$dbuser '';
16:
//databas Lösenord
17:
$dbpasswd '';
18:
 
19:
//koppla upp sig mot databasen
20:
mysql_connect($dbhost$dbuser$dbpasswd) or die(mysql_error());
21:
mysql_select_db($dbname) or die(mysql_error());
22:
 
23:
//namn på användartabellen
24:
$dbusertable 'medlemar';
25:
?>
26:
 
27:
 
28:
<?
29:
//få kommand auto_increment värdet
30:
function dynamicsalt ($table) {
31:
   $result mysql_query("SHOW TABLE STATUS FROM $table;");
32:
      while($array mysql_fetch_array($result)) {
33:
         if($array['Name']==$table) {
34:
         return $array['Auto_increment'];
35:
         break;
36:
         }
37:
      }
38:
}
39:
 
40:
//en enkel ekvation bara för att skapa förrvirring kan ändras till önskad ekvation...
41:
function ekvation($x) {
42:
   return (pow($x2)*5*$x-10);
43:
}
44:
//regga användaren och salta med våran "dynamiska" salt 
45:
mysql_query("INSERT INTO $dbusertable (namn, pass) VALUES ($anvnamn, ".md5($dbpasswd.ekvation(dynamicsalt($dbusertable))."$anvlosen".).") ") or die(mysql_error()); 
46:
 
47:
 
48:
   //exempel på hur du kollar om lösenordet är rätt
49:
   $login = array ($_POST['anvnamn'], $_POST['anvlosen']);
50:
   
51:
   $login_query mysql_query("SELECT id ,namn ,pass FROM $dbusertable WHERE namn='$login[0]' LIMIT 1");
52:
   $login_info mysql_fetch_array($login_query);
53:
   
54:
   if($login_info['pass'] == md5($dbpasswd.ekvation($login_info['id']).$login[1])) {
55:
      //gör vad du ska nu göra vid lyckad login
56:
   } else {
57:
      //Stämmer inte överens
58:
   }
59:
?>
 

_________________
When the sun shine we'll shine togheter
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Peppe L-G



Medlem i: 4340 dagar
Från: Mullsjö
Status: Offline



#559745
Inlägg Skrivet: 2008-02-23 20:59      Ämne: Citera

WoHo!

Nu mitt i strömavbrottet (farsan har satt upp elagregatet Cool) så har jag fulländat min näst intill perfekta funktion (som EmilV hjälpte mig med igår). Den har samma funktion som print_r, men min är mycket snyggare. Eller, det är ju upp till var och en, men iaf.

Funktionen ser ut såhär (var tvungen å döpa den efter mig Smile):
PHP: function peppe_lg
<style type="text/css">
 
.level_0{
   background: #FFFF00;
   border: 2px solid black;
   width: 500px;
}
 
.level_1{
   background: #E4E400;
   margin-left: 30px;
   border: 2px solid red;
}
 
.level_2{
   background: #A4A420;
   margin-left: 60px;
   border: 2px solid blue;
}
 
.level_3{
   background: #727200;
   margin-left: 60px;
   border: 2px solid white;
}
 
</style>
 
<?php
 
function peppe_lg($text$nyckel$level$array_namn){
   $retur '';
   if(is_string($text) or is_numeric($text)){
      return '<span style="padding-left: 20px;">['.$nyckel.'] => '.$text.'</span><br />';
   }elseif(is_array($text)){
      if($level != 0){
         $retur .= '<span style="padding-left: 20px;">['.$nyckel.'] => </span>';
      $retur .= '<div class="level_'.$level.'">';
      }else{
         $retur .= '<div class="level_'.$level.'"><span style="font-size: '.(40-$level*10).'px">'.$array_namn.'</span>';
      }
      if($level != 0){
         $retur .= '<span style="font-size: '.(40-$level*6).'px">Array</span>(<i> [ <b>'.count($text).'</b> värden ]</i><br />';
      }else{
         $retur .= '<i> [ <b>'.count($text).'</b> värden ]</i><br />';
      }
      $level++;
      foreach($text as $key => $value){
         $retur .= peppe_lg($value$key$level'');
      }
      $retur .= ')<br /></div>';
   }
   return $retur;
}
 
//Anropas: peppe_lg($arrayen, '', 0, 'Namnet på arrayen');
 
?>

Och nu en demonstration. Vi jämför min fina funktion med print_r:
PHP: test.php
<?php
 
include 'peppe_lg.php'//Inkludera funktionen och CSS:en ovan
 
$array = array(
   1,
   6,
   5,
   'Hallå',
   array(
      'Tja'
      'Tjena'
      'En array' => array(
         'Jag'
         'Hallå' => 'Du'
      ),
      'Du är' => 'en idiot',
      array(array('Jag''är'), array('jätte''bäst!'))
   ),
   'Jasså',
   array(
      'Nej' => 'Ja',
      'Ja' => 'Nej'
   )
);
 
echo '<pre>';
print_r()
echo '</pre>';
 
echo peppe_lg($array''0'$Min_Array');
 
?>

print_r ger
KOD:
1:
Array
2:
(
3:
    [0] => 1
4:
    [1] => 6
5:
    [2] => 5
6:
    [3] => Hallå
7:
    [4] => Array
8:
        (
9:
            [0] => Tja
10:
            [1] => Tjena
11:
            [En array] => Array
12:
                (
13:
                    [0] => Jag
14:
                    [Hallå] => Du
15:
                )
16:
 
17:
            [Du är] => en idiot
18:
            [2] => Array
19:
                (
20:
                    [0] => Array
21:
                        (
22:
                            [0] => Jag
23:
                            [1] => är
24:
                        )
25:
 
26:
                    [1] => Array
27:
                        (
28:
                            [0] => jätte
29:
                            [1] => bäst!
30:
                        )
31:
 
32:
                )
33:
 
34:
        )
35:
 
36:
    [5] => Jasså
37:
    [6] => Array
38:
        (
39:
            [Nej] => Ja
40:
            [Ja] => Nej
41:
        )
42:
 
43:
)

Min funktion ger:

Så börja att använda min funktion nu så att den kan ta över print_r's plats Twisted Evil

Senast ändrad av Peppe L-G den 2008-02-23 21:24, ändrad totalt 2 gånger
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Wedge
Administratör



Medlem i: 5991 dagar
Från: Järfälla
Status: Offline



#559750
Inlägg Skrivet: 2008-02-23 21:18      Ämne: Citera

Peppe L-G skrev:
Funktionen ser ut såhär (var tvungen å döpa den efter mig Smile):
Om du INTE hade gjort det så hade det kanske till och med fungerat. Minustecken i ett funktionsnamn...? Tror inte det...
 

_________________
I am Groot
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Peppe L-G



Medlem i: 4340 dagar
Från: Mullsjö
Status: Offline



#559752
Inlägg Skrivet: 2008-02-23 21:28      Ämne: Citera

Wedge skrev:
Minustecken i ett funktionsnamn...? Tror inte det...

Oj då... Visserligen så är det ett bindestreck, men nu är felet tillrättat, och funktionen är redo att ta över världen :D (om jag tjänar pengar på funktionen så ska du, Wedge, och EmilV såklart få eran del av kakan Wink)
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
yador



Medlem i: 3883 dagar

Status: Offline



#583777
Inlägg Skrivet: 2008-06-05 22:57      Ämne: Citera

Funktionen är rekursiv och array:er kan vara ganska stora så du bör försöka göra så att funktionen inte använder sig av rekursion. Mycket mer minne kommer nämligen behövas om du skickar en lite större array till den. Bara ett tips liksom.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Walkman
Ex-Moderator



Medlem i: 4672 dagar
Från: Vaxholm (bor i Göteborg)
Status: Offline



#596419
Inlägg Skrivet: 2008-08-21 03:16      Ämne: Rankingalgoritm för att jämföra två strängar Citera

En funktion som för en given input (förkortning av ett ord) returnerar ett värde mellan 0 och 1 som representerar hur väl förkortningen passar in på ett visst ord.

Används bäst som sökfunktion på en lista av ord, till exempel:
PHP:
1:
    $browsers = array(
2:
      'firefox',
3:
      'internet explorer',
4:
      'opera',
5:
      'safari',
6:
      'shiira',
7:
      'camino',
8:
      'flock',
9:
      'konqueror',
10:
   );
11:
   $search 'ir';
12:
   $results = array();
13:
   foreach($browsers as $browser) {
14:
      $score strscore($browser$search);
15:
      if($score 0) {
16:
         $results[$browser] = (float)number_format($score2);
17:
      }
18:
   }
19:
   arsort($results);
20:
   var_dump($results); 

Output:
KOD:
1:
array(3) {
2:
  ["firefox"]=>
3:
  float(0.8)
4:
  ["internet explorer"]=>
5:
  float(0.75)
6:
  ["shiira"]=>
7:
  float(0.48)
8:
}


Funktion:
PHP:
1:
<?php
2:
   /**
3:
    * A PHP implementation of the Quicksilver string score algorithm. Requires “MBString” extension (for unicode support).
4:
    * 
5:
    * Quicksilver URL: http://docs.blacktree.com/quicksilver/development/string_ranking
6:
    * 
7:
    * @param string Text to match against.
8:
    * @param search Text to try to match with.
9:
    * @param offset Offset to start matching from.
10:
    * @return float Score (between 0.0 and 1.0).
11:
    */
12:
   function strscore($string$search$offset 0) {
13:
      // Save some time from calling functions
14:
      $stringlen mb_strlen($string);
15:
      $searchlen mb_strlen($search);
16:
      
17:
      if($searchlen == 0) { return 0.9; }
18:
      if($searchlen $stringlen) { return 0; }
19:
      
20:
      // Search for smaller and smaller portions
21:
      for($i $searchlen$i 0; --$i) {
22:
         $part mb_substr($search0$i);
23:
         $index mb_stripos($string$part);
24:
         
25:
         if($index === FALSE) { continue; }
26:
         if(($index $searchlen) > ($stringlen $offset)) { continue; }
27:
         
28:
         $next mb_substr($string$index mb_strlen($part));
29:
         $nextlen mb_strlen($next);
30:
         $abbr '';
31:
         
32:
         if($i $searchlen) {
33:
            $abbr mb_substr($search$i);
34:
         }
35:
         
36:
         // Search for the rest of the abbreviation (that didn't match)
37:
         $rem strscore($next$abbr$offset $index);
38:
         if($rem 0) {
39:
            $score $stringlen $nextlen;
40:
            if($index != 0) {
41:
               if(mb_eregi('\s'mb_substr($string$index-11))) {
42:
                  for($j $index 2$j > -1; --$j) {
43:
                     if(mb_eregi('\s'mb_substr($string$j1))) {
44:
                        $score -= 1.00;
45:
                     } else {
46:
                        $score -= .15;
47:
                     }
48:
                  }
49:
               } else {
50:
                  $score -= $index;
51:
               }
52:
            }
53:
            $score += $rem $nextlen;
54:
            $score /= $stringlen;
55:
            return (float)$score;
56:
         }
57:
      }
58:
      return 0;
59:
   }
60:
?>


URL: http://git.burgestrand.se/phplibs/tree/Strings.php
 

_________________
Koda alltid som om nästa person som till slut ska läsa din kod är en våldsam psykopat och vet var du bor.

Förstå kod innan du använder den.
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
ErikGroda



Medlem i: 3701 dagar
Från: Linköping
Status: Offline



#614097
Inlägg Skrivet: 2008-12-06 13:09      Ämne: Citera

thr skrev:
För att kolla vilken typ av dag ett datum är Smile
PHP:
1:
<?php
2:
   function mktime_day($d,$m,$y){
3:
      $d date('l',mktime(0,0,0,$m,$d,$y));
4:
      switch($d){
5:
         case 'Monday':
6:
            return 'Måndag';
7:
            break;
8:
         case 'Tuesday':
9:
            return 'Tisdag';
10:
            break;
11:
         case 'Wednesday':
12:
            return 'Onsdag';
13:
            break;
14:
         case 'Thursday':
15:
            return 'Torsdag';
16:
            break;
17:
         case 'Friday':
18:
            return 'Fredag';
19:
            break;
20:
         case 'Saturday':
21:
            return 'Lördag';
22:
            break;
23:
         case 'Sunday':
24:
            return 'Söndag';
25:
            break;
26:
         default:
27:
            return false;         
28:
      }
29:
   }
30:
   /* Example: mktime_day(24,03,2025);
31:
   */
32:
?>


Vill du ha engelska namn på dagarna så är det bara att använda denna funktionen istället:
PHP:
1:
<?php
2:
   function mktime_day($d,$m,$y){
3:
      return date('l',mktime(0,0,0,$m,$d,$y));
4:
   }
5:
   /* Example: mktime_day(24,03,2025);
6:
   */
7:
?>


Eller så gör man såhär:
PHP:
1:
<?php
2:
   $days = array ('Måndag''Tisdag''Onsdag''Torsdag''Fredag''Lördag''Söndag');
3:
   $date date ('N'mktime (0,0,0,24,03,2025));
4:
   echo $days[$date];
5:
?>


Det gör ju precis samma sak. Enda skillnaden är att det inte är en funktion!
 

_________________
// Erik Groda - Nörden av PHP (:
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida MSN Messenger
KarlKaluns



Medlem i: 4135 dagar
Från: Karlshamn
Status: Offline



#614517
Inlägg Skrivet: 2008-12-09 21:03      Ämne: Citera

Lägger upp två funktioner. En som generar ett lösenord och en som kollar om en sträng verkligen är bara siffror. is_numeric är ju lite skum...
PHP:
1:
<?php
2:
   function randpw($length)
3:
   {
4:
      $numbers range(09);
5:
      $letters range("a""z");
6:
      $length $length 2;
7:
      for($i 0$i $length$i++)
8:
      {
9:
         $pw .= $numbers[rand(09)];
10:
         $pw .= $letters[rand(025)];
11:
      }
12:
      $pw str_shuffle($pw);
13:
      return $pw;
14:
   }
15:
?>


PHP:
1:
<?php
2:
   function is_numeric_real($numbers)
3:
   {
4:
      if (preg_match("/^[0-9]*$/"$numbers))
5:
      {
6:
         return true;
7:
      }
8:
      else
9:
      {
10:
         return false;
11:
      }
12:
   }
13:
?>
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
ErikGroda



Medlem i: 3701 dagar
Från: Linköping
Status: Offline



#616338
Inlägg Skrivet: 2008-12-22 00:41      Ämne: Citera

KarlKaluns skrev:
...


Min is_numeric_real() skulle ha sett ut såhär, och den fungerar som din.
PHP:
1:
<?php
2:
   function is_numeric_real ($string)
3:
   {
4:
      return ((int)$string == $string);
5:
   }
6:
?>
 

_________________
// Erik Groda - Nörden av PHP (:
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida MSN Messenger
pengi
Ex-Moderator



Medlem i: 4463 dagar
Från: JO57XQ
Status: Offline



#616340
Inlägg Skrivet: 2008-12-22 00:49      Ämne: Citera

ErikGroda skrev:
KarlKaluns skrev:
...


Min is_numeric_real() skulle ha sett ut såhär, och den fungerar som din.
PHP:
1:
<?php
2:
   function is_numeric_real ($string)
3:
   {
4:
      return ((int)$string == $string);
5:
   }
6:
?>


inte riktigt samma sak...
testa t.ex. med värdena "-34", "32.0" osv.

Sedan att i KarlKaluns kod är att rekommendera skrivsättet return preg_match( blah ) > 0; istället för if-satsen.
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
ErikGroda



Medlem i: 3701 dagar
Från: Linköping
Status: Offline



#616349
Inlägg Skrivet: 2008-12-22 01:12      Ämne: Citera

pengi skrev:
...


Varför är det att rekommendera?
 

_________________
// Erik Groda - Nörden av PHP (:
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida MSN Messenger
pengi
Ex-Moderator



Medlem i: 4463 dagar
Från: JO57XQ
Status: Offline



#616351
Inlägg Skrivet: 2008-12-22 01:39      Ämne: Citera

ErikGroda skrev:
pengi skrev:
...


Varför är det att rekommendera?

Mer korrekt (finns det mer än noll träffar, inte tolka en siffra som en boolean), samt att det är kortare, utan att tappa någon större tydlighet. if( uttr ) return true; else return false; är redundant... är sant sant? isf. returnera sant, annars falskt.

Men men... det är mer en åsikt, inte ett så-ska-det-vara...
 

_________________
"Question everything. Never trust propaganda. Keep on hacking." - Phrack
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
jagaj



Medlem i: 4263 dagar
Från: Göteborg
Status: Offline



#616520
Inlägg Skrivet: 2008-12-23 12:58      Ämne: Citera

Marty: filen du länkar till finns inte... [http://www.marty.nu/spell_db.phps]
 

_________________
Bättre att inte ha något liv än att ha ett liv som ingen ändå inte vill ha....
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
KarlKaluns



Medlem i: 4135 dagar
Från: Karlshamn
Status: Offline



#618760
Inlägg Skrivet: 2009-01-10 21:21      Ämne: Citera

En funktion som pingar en sida eller en ip-adress. Kan bl.a användas för att pinga Counter-Strike servrar.
Skriver ut pingen i ms

PHP:
1:
<?php
2:
   function ping($ip)
3:
   {
4:
      $ping exec("ping " $ip " -n 5 -w 90 & exit"$output);
5:
      if (!preg_match_all("/([0-9]+) ms/"$ping$ms))
6:
      {
7:
         return false;
8:
      }
9:
      else
10:
      {
11:
         return $ms[1][2];
12:
      }
13:
   }
14:
?>
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3, 4, 5, 6, 7  Nästa
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic