Zurück   klamm-Forum > Virtual World > Programmierung > FAQ und Archiv

Antwort
 
Themen-Optionen
Alt 04.04.2009, 22:32:28   #31
Stex
Zeta Sagittarii
Benutzerbild von Stex

ID: 54415
Lose senden

Stex eine Nachricht über ICQ schicken Stex eine Nachricht über Skype™ schicken
Reg: 11.05.2006
Beiträge: 1.225
Standard [Ruby on Rails] Hash zu Conditions-Array "konvertieren"

Code:
1:
2:
3:
4:
#Benötigte Funktion zum escapen des SQL-Statements def mysql_escape_string string string.gsub(/["';]/, "") end
Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
#konvertiert einen hash in ein conditions-array für Model.find() def hash2conditions _hash, options = { :compare => "LIKE", :additional => ""} conditions = {} conditions[:fields] = [] conditions[:values] = [] if _hash _hash.each do |key, value| #sql-injections verhindern key = mysql_escape_string key _hash[key] = mysql_escape_string _hash[key] unless _hash[key].blank? #Wenn compare-methode "like" und der wert kein Integer ist if options[:compare].downcase == "like" and _hash[key].to_i.to_s != _hash[key] #Concat, zusammengesetzte Werte, wie z.B. contacts.first_name + " " + "contacts.last_name" if key.split("|").size > 1 field = "LOWER(CONCAT(" + key.split("|").join(",").gsub(" ", "' '") + ")) " + options[:compare] + " ?" else field = "LOWER(" + key + ") " + options[:compare] + " ?" end value = "%" + _hash[key].downcase + "%" else #Integer-Wert, = wird in jedem fall genommen if _hash[key].to_i.to_s == _hash[key] field = key + " = ?" else field = key + " " + options[:compare] + " ?" end value = _hash[key] end if _hash[key] == "NULL" field = key + " IS NULL" value = "" end conditions[:fields] < < field conditions[:values] << value unless value.blank? end end end #addional-wert an conditions anfügen conditions[:fields] << options[:additional] unless options[:additional].blank? conditions[:fields] = conditions[:fields].join(" AND ") array = [] #conditions-array bilden array << conditions[:fields] conditions[:values].each do |value| array << value end return array end
Code:
1:
2:
3:
4:
5:
#params[:search_details] muss ein hash sein, dessen key jeweils dem tabellen-feldnamen entspricht (also z.B. <input name="search_details[table.fieldname]" type="text" /> conditions = hash2conditions params[:search_details], { :additional => "table.canceled &lt;&gt; 1", :compare =&gt; "LIKE"} ... @list = Model.find(:all, :conditions => conditions)
 

Geändert von Stex (04.04.2009 um 23:59:23 Uhr)
Stex ist offline   Mit Zitat antworten
Alt 01.06.2009, 13:57:10   #32
Fresh
PHP 'nd MySQL
Benutzerbild von Fresh

Reg: 02.07.2008
Beiträge: 15
Idee [PHP]Userinput vor Injectionen/HTML-Code schützen

Meine Variante zu dem Problem Antwort #7:
Um nicht jede Variable einzeln abzusichern benutze ich in meinen Scripten folgende Klasse.
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
class requestParser{
    
   
/**
   * Ersetzt "gefährliche" Zeichen eines Arrays
   * @param array $array
   * @return boolean
   */
    
public static function stripArray(&$array){
        if( 
is_array($array) )
          foreach(
$array as $name=>$value){
        if( 
is_array$array[$name] ) === false ){
              
$array[$name] = mysql_real_escape_stringhtmlspecialcharsstripslashes($value) ) );
        }else{
            
requestParser::stripArray$array[$name] );
        }
      }
      return 
true;
    }

    
/**
     * Streicht alle gefaerhlichen Zeichen aus Variablen, die vom User
     * veraendert werden koennen
     */
    
public static function stripRequests(){
        
requestParser::stripArray(&$_POST);
        
requestParser::stripArray(&$_GET);
        
requestParser::stripArray(&$_COOKIE);
        
requestParser::stripArray(&$_SESSION);
        
requestParser::stripArray(&$_SERVER);
    }

Einfach bei jedem Script am Kopf die Funktion stripRequests() ausführen:
requestParser::stripRequests();

Die Klasse geht bis in die verschachteten Arrays. D.h auch $_POST['user']['nickname'] z.B. werden abgesichert.
 

Geändert von Fresh (01.06.2009 um 21:20:30 Uhr)
Fresh ist offline   Mit Zitat antworten
Alt 30.09.2009, 15:01:57   #33
Stex
Zeta Sagittarii
Benutzerbild von Stex

ID: 54415
Lose senden

Stex eine Nachricht über ICQ schicken Stex eine Nachricht über Skype™ schicken
Reg: 11.05.2006
Beiträge: 1.225
Standard [RoR] Button zum zeigen/verbergen eines Elements erstellen (Scriptaculous)

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
  #displays a show/hide-button for a specific element. Requires script.aculo.us
  #state can be "closed" or "open", sets start state for button.
  #options:
  #  titles: ["Title for closed", "Title for open"]
  #  state: Default state. Can be "closed" or "open"
  #  images: ["path/to/image/when/closed.png", "path/to/image/when/open.png"]. Starts at "/images" as default
  #  style: "new: style-attributes"
  #  additional_text: "Text to show next to the button", default is ""
  #  additional_js_for_show: JS-Code which is executed when the element is shown.
  #  additional_js_for_close: JS-Code which is executed when the element is hidden.
  #  methods: ["method_to_open", "method_to_close"], default is ["BlindDown", "BlindUp"]
  
def blind_effect_button(elementoptions = {})
          
titles options[:titles]
          
state options[:state]
          
images options[:images]
          
additional_text options[:additional_text] || ""
          
style = ["cursor: pointer;"]
          
style << options[:style] if options[:style]
          
titles = ["Show""Hide"unless options[:titles]
          
state "closed" unless options[:state]
          
images = ["../stylesheets/img/arrow_show.png""../stylesheets/img/arrow_hide.png"unless options[:images]
          
methods options[:methods] || ["BlindDown""BlindUp"]
          
button_name element "_show_hide";
        
tag ""
        
tag << "if ($('" element +"').style.display == 'none') {"
        
tag << options[:additional_js_for_show] if options[:additional_js_for_show]
            
tag << "Effect." methods[0] + "('" element "');"
            
tag << "$('#{button_name}').src = '/images/" images[1] + "';";
            
tag << "$('#{button_name}').title = '#{titles[1]}';";
        
tag << "} else {";
            
tag << "Effect." methods[1] + "('" element "');"      
            
tag << "$('#{button_name}').src = '/images/" images[0] + "';" 
            
tag << "$('#{button_name}').title = '#{titles[0]}';";
            
tag << options[:additional_js_for_hide] if options[:additional_js_for_hide]
        
tag << "}"
          
image images[0] if state == "closed";
          
title titles[0] if state == "closed";
          
title titles[1] if state == "open";
          
image images[1] if state == "open"
        
button additional_text image_tag(image, :onClick => tag, :title => title, :style => style, :id => button_name)
        
button
  end 
Das ganze könnte man dann noch erweitern:

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  #Creates a Button which will show/hide an element and update its content
  #element: The update which is to be updated
  #options:
  #   keep_loaded_content: Do not load content if the element already contains something (default is true)
  #   other options: please have a look at "blind_effect_button"
  
def blind_effect_button_with_ajax_updater(elementoptions = {})
      
additional_javascript ajax_updater elementurl_for(options[:url])
      
options[:button_options] = {} if options[:button_options].nil?
      if 
options[:keep_loaded_content] == true
          additional_javascript 
"if ($('#{element}').innerHTML == '') {" additional_javascript " }"
      
end
      blind_effect_button element
options[:button_options].merge!({:additional_js_for_show => additional_javascript})
    
end 
Beispielaufruf:
PHP-Code:
1:
<%= blind_effect_button_with_ajax_updater("extended_information", :url => {:action => 'extended_information' }, :keep_loaded_content => true, :button_options => {:titles => ["Show extended information""Hide extended information"]}) %> 
 
Stex ist offline   Mit Zitat antworten
Alt 08.11.2009, 12:25:29   #34
klamm PREMIUM-UserVERIFIZIERTER User
Administrator
Benutzerbild von klamm

ID: 20876
Lose senden

Reg: 20.04.2006
Beiträge: 12.300
Standard [PHP] Leere HTML Tags entfernen

Diese Function entfernt leere HTML-Tags, beliebig tief verschachtelt.
Alle in Frage kommenden Tags müssen als Array übergeben werden.
"&nbsp;" gilt dabei auch als leer.

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
// leere HTML Tags entfernen
function remove_empty_tags ($string$tags) {
    
$p_o_tag '<('.implode('|'$tags).')(?:\s[^>]*[^\/])?';
    
$p_o_tag_short_tag '\/>';
    
$p_o_tag_long_tag '>';
    
$p_empty '(?:&nbsp;|\x00|\xa0|\s)*';
    
$p_cl_tag '<\/\\1>';
    
$pattern =
        
$p_o_tag
        
.'(?:'.$p_o_tag_short_tag
        
.'|'.$p_o_tag_long_tag.$p_empty.$p_cl_tag.')';
    while (
        
$string !=
            (
$val preg_replace('/'.$pattern.'/iS'''$string))
        && 
is_string($val)
    ) {
        
$string $val;
    }
    return 
$string;

Beispielaufruf
PHP-Code:
1:
2:
3:
4:
5:
$string "<p><p><b><strong> &nbsp;  <p></p><p />  </strong></b></p></p>";
$string "<div>&quot;{$string}&quot;</div>";
$tags = array('p''strong''b');
echo 
remove_empty_tags($string$tags)."\n";
// Ausgabe:  <div>&quot;&quot;</div> 
 

Geändert von B2T (05.12.2009 um 19:48:20 Uhr) Grund: preg_replace kann null zurückliefern, deshalb Prüfung hinzugefügt.
klamm ist offline   Mit Zitat antworten
Alt 11.11.2009, 01:04:46   #35
B2T PREMIUM-UserVERIFIZIERTER User
Schönen Dank auch...
Benutzerbild von B2T

ID: 247499
Lose senden

B2T eine Nachricht über ICQ schicken
Reg: 13.07.2006
Beiträge: 9.120
Standard [PHP] Nicht geschlossene Tags entfernen oder schließen

Zitat:
Zitat von Astrodan Beitrag anzeigen
Wie wäre es noch mit einer Funktion, um nicht geschlossene Tags auch zu entfernen?
Oder auch automatisch zu schließen, was ja auch nicht schlecht wäre. Das dürfte eventuell eine Lösung dazu sein, wobei per Parameter gesteuert wird, ob entfernt oder geschlossen wird.
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
// Nicht geschlossene Tags entfernen oder schließen
function handle_unclosed_tags ($string$close=false) {
    
$p_tag '<[^>]*[^\/]>';
    
$split =
        
preg_split('/('.$p_tag.')/'$string, -1,
            
PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE);
    
$p_id '[A-Za-z_\-][A-Za-z0-9_\-]*';
    
$p_o_long_tag '<('.$p_id.')(?:\s[^>]*[^\/])?>';
    
$p_cl_long_tag '<\/'.$p_id.'>';
    
$openTags = array();
    
$stringArray = array();
    foreach (
$split as $i => $elem) {
        
$stringArray[$i] = array($elemtrue);
        
$match = array();
        if (
preg_match('/'.$p_o_long_tag.'/AS'$elem$match)) {
            
$stringArray[$i] = array($elemfalse);
            
array_unshift($openTags, array('</'.$match[1].'>'$i));
        } elseif (
preg_match('/'.$p_cl_long_tag.'/AS'$elem)) {
            
$stringArray[$i] = array($elemfalse);
            
$saveOpenTags $openTags;
            
$closeTags "";
            for (
                
$openTag array_shift($openTags);
                isset(
$openTag[0]) && $elem != $openTag[0];
                
$openTag array_shift($openTags)
            ) {
                if (
$close) {
                    
$closeTags .= $openTag[0];
                    
$stringArray[$openTag[1]][1] = true;
                }
            }
            if (isset(
$openTag[0]) && $elem == $openTag[0]) {
                
$stringArray[$openTag[1]][1] = true;
                
$stringArray[$i] = array(
                    
$closeTags $elem,
                    
true
                
);
            } else { 
// invalid close tag, thence restore openTags
                
$openTags $saveOpenTags;
            }
        }
    }
    
$result "";
    foreach (
$stringArray as $stringElem) {
        if (
$stringElem[1]) {
            
$result .= $stringElem[0];
        }
    }
    return 
$result;

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
// Aufruf
$string "<p><b>Sofort gelöscht</p>";
echo 
"Bsp.: ".htmlspecialchars($string)."\n";
// Entfernen nicht-geschlossener Tags
echo handle_unclosed_tags($string)."\n";
// Automatisches Schließen nicht-geschlossener Tags
echo handle_unclosed_tags($stringtrue)."\n"

Geändert von B2T (20.12.2009 um 00:27:05 Uhr) Grund: Fehlerkorrektur: Bei invaliden Close-Tags wird der Stack der open Tags wieder restauriert
B2T ist offline   Mit Zitat antworten
Alt 20.04.2011, 16:09:10   #36
chrissel
Woohooo!
Benutzerbild von chrissel

ID: 211634
Lose senden

chrissel eine Nachricht über ICQ schicken
Reg: 20.04.2006
Beiträge: 4.495
Standard [PHP] Debugging: Eigenschaften sowie Methoden einer Klasse anzeigen

Ich habe gerade eine Funktion gebraucht, welche mir sauber die Eigenschaften sowie Methoden einer Klasse anzeigt.

Vielleicht hilft sie auch wem anders. Der Code ist, wie beim debuggen üblich, 'quick and dirty'.. aber funktioniert und gibt eine schöne Ausgabe wieder

Hierbei kann an die Funktion einfach der Klassenname oder eine Instanz (untested) dieser gegeben werden.
Am Ende gibt die Funktion direkt einen gehighlighteten Aufbau der Klasse aus (oder zurück: $return) mit den dort vorhandenen Eigenschaften sowie Methoden inklusive deren Parameter (und falls vorhanden Defaultvalues).

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
<?php
function showClass($c$return false) {
    
$output "";
    
$class = new ReflectionClass($c);
    
    if(
$class->isAbstract()) $output .= "abstract ";
    if(
$class->isFinal()) $output .= "final ";
    
    
$output .= "class " $class->getName();
    if(
$class->getParentClass() != null$output .= " extends " $class->getParentClass()->getName();
    
$output .= " {\n";
    
    
    
$output .= "\t// ------------------------------ //\n";
    
$output .= "\t// --------- PROPERTIES --------- //\n";
    
$output .= "\t// ------------------------------ //\n";
    
$properties $class->getProperties();
    
    foreach(
$properties as $p) {
        if(
$p->getDocComment() != false)
            
$output .= "\n\t" $p->getDocComment() . "\n";
        
$output .= "\t";
        
        if(
$p->isStatic()) $output .= "static ";
        if(
$p->isPrivate()) $output .= "private ";
        elseif(
$p->isProtected()) $output .= "protected ";
        elseif(
$p->isPublic()) $output .= "public ";
        
        
$output .= '$' $p->getName();
        
$output .= ";\n";
    }
    
    
$output .= "\n\n";
    
    
    
$output .= "\t// --------------------------- //\n";
    
$output .= "\t// --------- METHODS --------- //\n";
    
$output .= "\t// --------------------------- //\n";
    
$methods $class->getMethods();
    
    foreach(
$methods as $method) {
        
$parameters $method->getParameters();
        if(
$method->getDocComment() != false)
            
$output .= "\n\t" $method->getDocComment() . "\n";
        
$output .= "\tpublic function " $method->getName() . "(";
        
$oP '';
        foreach(
$parameters as $p) {
            
$oP .= '$' $p->getName();
            if(
$p->isDefaultValueAvailable()) $oP .= " = '" $p->getDefaultValue() . "'";
            
$oP .= ", ";
        }
        
$output .= substr($oP0strlen($oP)-2) . ");\n";
    }
    
    
$output .= "}\n";
    
    
    return 
highlight_string("<?php\n" $output "\n?>"$return);
}
?>

Geändert von chrissel (20.04.2011 um 18:03:17 Uhr)
chrissel ist offline   Mit Zitat antworten
Alt 19.05.2011, 15:39:59   #37
computexx
verrückter ATler
Benutzerbild von computexx

ID: 50493
Lose senden
Reallife

Reg: 22.05.2006
Beiträge: 752
Standard [JavaScript] Datum mit immer aktueller Uhrzeit

Oft schon hab ich so eine Uhr gesucht und dann mir doch selbst zusammengestellt.

Dieses Datum (zB Donnerstag, 19.05.2011 - 15:38:30) inklusive Uhrzeit ist Sekundenaktuell mit folgendem Code auf jeder Seite einsetzbar.

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
function uhr() {
var 
Jetzt = new Date();                 // holt das aktuelle Datum
var Tag Jetzt.getDate();                // holt den aktuellen Tag
var Monat Jetzt.getMonth() + 1;        // holt das aktuelle Monat + 1
var Jahr Jetzt.getFullYear();            // holt das aktuelle Jahr
var Stunde Jetzt.getHours();            // holt die aktuelle Stunde
var Minute Jetzt.getMinutes();        // holt die aktuelle Minute
var Sekunde Jetzt.getSeconds();        // holt die aktuelle Sekunde

var WochenTagAktuell Jetzt.getDay();    // holt sich den aktuellen Wochentag (als Zahl für Namen)
var ArrayTage = new Array
(
"Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); // Arrays für TagName

function TagText (Zahl) {
return 
ArrayTage[Zahl]; // Tagzahl ermitteln
}

var 
TagName TagText(WochenTagAktuell); // Tagzahl mit TagName versehen


if (Tag 10)
  
Tag "0" Tag;             // wenn Tag unter 10 ist dann +0 dazufügen
if (Monat 10)
  
Monat "0" Monat;        // wenn Monat unter 10 ist dann +0 dazufügen
if (Minute 10)
  
Minute "0" Minute;    // wenn Minute unter 10 ist dann +0 dazufügen
if (Sekunde 10)
  
Sekunde "0" Sekunde;    // wenn Sekunde unter 10 ist dann +0 dazufügen

// "uhrdiv" kann in einen beliebigen Namen geändert werden, jedoch muss der <div> oder wo auch immer 
// die Uhr angezeigt werden soll -> dieser Teil muss dann diesen ID-Namen tragen
document.getElementById("uhrdiv").innerHTML=(" " TagName ", " 
               
Tag "." Monat "." Jahr " - " Stunde ":" Minute ":" Sekunde +" "); 
               
// Ausgabe des Tages, Monats, Jahres und der Uhrzeit
}
// die Funktion Uhr soll alle 1000 Millisekunden neu aufgerufen werden, somit wird die Sekunde immer aktuell angezeigt
window.setInterval("uhr()"1000
Das Forum | Ein Forum zu unseren Projekten und für Gott und die Welt
Der Blog | Der Blog zum jedem Thema von A bis Z
Dein Shirt | ...mehr Community geht nicht!
Der Newsletter | Der Newsletter

Geändert von computexx (20.05.2011 um 20:03:52 Uhr)
computexx ist offline   Mit Zitat antworten
Alt 17.07.2011, 11:00:51   #38
DasGuru
ist maskulin
Benutzerbild von DasGuru

DasGuru eine Nachricht über ICQ schicken DasGuru eine Nachricht über Skype™ schicken
Reg: 16.08.2008
Beiträge: 1.899
Standard Maximale Upload-Größe bestimmen

folgendes gibt die Maximale Uploadgröße für den Formular/PHP Upload aus

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
     $postsiize 
str_replace('M'''ini_get('post_max_size'));
     
$uploadiize str_replace('M'''ini_get('upload_max_filesize'));
     if (
$postsiize <= $uploadiize) {
          
$maximalerupload $postsiize;
     } else {
          
$maximalerupload $uploadiize;
     }
          echo 
$maximalerupload.' MB';
     }
?>
*edit*
Vorrausgesetzt die Angaben in der PHP.ini sind alle in "M"
ansonsten müsste noch ein Workarraound geschrieben werden.
zu 99% reicht die Behandlung des Strings mit "M" aus
Do not argue with an idiot. He will drag you down to his level and beat you with experience
99%Refback für alle
| Novoline-Spiele | ich zahle meine Schulden |
3 mio Lose + Aktivitätsboni bei eBesucher
| eSig




Geändert von DasGuru (17.07.2011 um 11:42:28 Uhr)
DasGuru ist offline   Mit Zitat antworten
Alt 23.07.2011, 11:41:59   #39
DasGuru
ist maskulin
Benutzerbild von DasGuru

DasGuru eine Nachricht über ICQ schicken DasGuru eine Nachricht über Skype™ schicken
Reg: 16.08.2008
Beiträge: 1.899
Pfeil [PHP] debug() und debug_backtrace()

Entwickler kennen das,

schnell mal prüfen was eine Variable ausspuckt oder Testen wo der Hund begraben liegt

hier kann man einfach mit

PHP-Code:
1:
debug('Titel der Meldung''Detailierte Beschreibung'
Debugmeldungen ausgeben


PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
<?php
# (c)DasGuru 2011

#
## Debug an oder aus (TRUE oder FALSE)
###
define('DEBUG'TRUE);


#
## mit dieser Funktion kann eine Debug-Nachricht ausgegeben werden
###
function debug($title$msg) {
    
$_SESSION['debug'][] = array($title=>$msg);
}

#
## so können wir debug-nachrichten anweisen:
###
debug ('Achtung''hier ist der Hund begraben');

#
## Diese Funktion gibt alle mit debug() angewisenen Meldungen + dem debug_backtrace aus
###
function print_debug() {
    
$debugmeldungen '';
        
$debugmeldungen '
            <strong>DEBUG enabled:</strong><pre>'
;
        
$backtrace debug_backtrace();
        if (
is_array($backtrace && !empty($backtrace))) {
            
            foreach (
$backtrace as $k=>$val) {
                
$debugmeldungen .= '<strong>Debug-Backtrace '.($k+1).'</strong>';
                
                print 
'<blockquote>';
                    if (!isset(
$backtrace[$k]['type'])) {
                        
$debugmeldungen .=  'Type | Fehler in Funktion <br />';
                    }
                    
$debugmeldungen .=  'File | '.$backtrace[$k]['file'].'<br />';
                    
$debugmeldungen .=  'Line | '.$backtrace[$k]['line'].'<br />';
                    
$debugmeldungen .=  'Fucs | '.$backtrace[$k]['function'].'()<br />';
                    
$debugmeldungen .=  '<blockquote>';
                    foreach (
$backtrace[$k]['args'] as $argumentation) {
                        
$debugmeldungen .=  'Args |  | '.$argumentation.' </blockquote><br />';
                    }
                
$debugmeldungen .=  '</blockquote></blockquote>';    
            }

        }
        
$key 0;
        foreach(
$_SESSION['debug'] as $key=>$value){
            foreach(
$_SESSION['debug'][$key] as $title=>$val){
                if (
is_string($val) or is_numeric($val)) {
                    
$debugmeldungen .=  $title.' | '.$val.' <br />';
                    
$key++;
                } else
                if (
is_array($val) or is_object($val)) {
                    
$debugmeldungen .= '<blockquote>';
                    
#print_r($val);
                    
foreach ($val as $arkey=>$arval) {
                        
$debugmeldungen .= $arkey.' | '$arval'<br>';
                    }
                    
$debugmeldungen .= '</blockquote>';
                }
            }
        }
    return 
$debugmeldungen;
}

#
## Ausgabe der DebugInfos
###
print_debug();
Verbesserungsvorschläge erwünscht

*edit*
debug von Arrays nun möglich
Do not argue with an idiot. He will drag you down to his level and beat you with experience
99%Refback für alle
| Novoline-Spiele | ich zahle meine Schulden |
3 mio Lose + Aktivitätsboni bei eBesucher
| eSig




Geändert von DasGuru (24.07.2011 um 07:08:32 Uhr) Grund: wie im Diskussionthread vorgeschlagen, geändert
DasGuru ist offline   Mit Zitat antworten
Alt 02.08.2011, 18:36:03   #40
MrToiz
Erfahrener Benutzer

ID: 72115
Lose senden

Reg: 28.04.2006
Beiträge: 769
Standard

Zitat:
Zitat von ActionScripter Beitrag anzeigen
viele tabellen sehen für eine IP ein 15-stelliges varchar-feld vor. warum??

um eine ip-adresse in einer tabelle zu speichern benötigt man lediglich eine unsigned int(10)-spalte. diese füllt man man mit dem binären äquivalent der adresse. die funktion dafür heisst INET_ATON():
Leider ist diese Funktion nicht IPv6 kompatibel, darum hier ein Update (erfordert PHP 5 >= 5.1.0):

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
function ip2binary($ip)
{
    return 
str_pad(inet_pton($ip), 16chr(0), STR_PAD_LEFT);
}
function 
binary2ip($binary) {
    return 
inet_ntop($binary);

In der Datenbank wird dafür ein Feld vom Typ BINARY(16) benötigt.
Achtung: Unbedingt die Binärdaten vor dem Einfügen in die Datenbank mit mysql_real_escape_string() o.ä. bearbeiten!

In phpMyAdmin bekommt man lesbare IPs, wenn man folgende Funktion als phpMyAdmin/libraries/transformations/text_plain__binaryToIp.inc.php speichert:
PHP-Code:
1:
2:
3:
4:
function PMA_transformation_text_plain__binaryToIp($buffer$options = array(), $meta '') {
    
// phpMyAdmin liefert immer Hex-Daten, diese müssen erst umgewandelt werden
    
return inet_ntop(pack('H*'$buffer));

Jetzt kann man für die entsprechende Spalte als "Darstellungsumwandlung" den Wert "text/plain: binaryToIp" auswählen und bekommt eine schöne Anzeige.

Hinweis: Welche Auswirkungen hat das str_pad()?
Bei Anwendung mit IPv6-Adressen keine! IPv4-Adressen hingegen werden in IPv4-kompatible IPv6-Adressen der Form ::127.0.0.1 umgewandelt (siehe Wikipedia). Vor allem aber müsste man ohne dieses Padding in der Datenbank den Typ VARBINARY(16) wählen, der für jede Zeile ein Byte Overhead produziert. Ansonsten würde MySQL nämlich den Wert rechts mit Null-Bytes auffüllen, was dann beim Dekodieren zu falschen IPv6-Adressen führen würde:
Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
IPv4-Adresse: 127.0.0.1 Hexadezimal: 0x7f000001 MySQL speichert: 0x7f000001000000000000000000000000 Ergebnis von inet_ntop(): 7f00:1:: Besser: 0x0000000000000000000000007f000001 Ergebnis von inet_ntop(): ::127.0.0.1
 
MrToiz ist offline   Mit Zitat antworten
Alt 07.08.2011, 13:35:32   #41
DasGuru
ist maskulin
Benutzerbild von DasGuru

DasGuru eine Nachricht über ICQ schicken DasGuru eine Nachricht über Skype™ schicken
Reg: 16.08.2008
Beiträge: 1.899
Standard

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
/*
    * @ AUTHOR : DasGuru
    * @ COPY  : gecko-dev.de 2011
    * @ PARAM : $orginallose -> der umzuwandelnde Losebetrag
    * @ PARAM : Anzahl der Dezimalstellen für den Output
    * @ RETURN : formatierter string wie zb. "12 Mio" oder "Mrd" oder "1 k"
*/
function loseinflation($orginallose$dezimalstsellen 2) {
    
    if (!
is_int($orginallose)) settype($orginallose'int'); 
    
    if (
$orginallose >= 1000000000) { // 1 Mrd
        
$anzahl bcdiv($orginallose,1000000000$dezimalstsellen);
        
$output number_format($anzahl$dezimalstsellen',','.').' Mrd';
        return 
$output;
    }else
    if (
$orginallose >= 1000000) { // 1 Mio
        
$anzahl bcdiv($orginallose,1000000$dezimalstsellen);
        
$output number_format($anzahl$dezimalstsellen',','.').' Mio';
        return 
$output;
    }else
    if (
$orginallose >= 1000) { // 1 K
        
$anzahl bcdiv($orginallose,1000$dezimalstsellen); 
        
$output number_format($anzahl$dezimalstsellen',','.').' k';
        return 
$output;
    }else {
        return 
number_format($orginallose$dezimalstsellen',''.');
    }

Do not argue with an idiot. He will drag you down to his level and beat you with experience
99%Refback für alle
| Novoline-Spiele | ich zahle meine Schulden |
3 mio Lose + Aktivitätsboni bei eBesucher
| eSig




Geändert von DasGuru (07.08.2011 um 15:32:59 Uhr)
DasGuru ist offline   Mit Zitat antworten
Alt 26.09.2011, 22:57:19   #42
tleilax
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose senden

Reg: 20.04.2006
Beiträge: 2.428
Standard [PHP] Ein simples Templatesystem

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
<?php
/**
 * Renders a template from the templates-subfolders with an additional layout
 * 
 * Templates have to be stored in a subdir called "templates".
 * Absolutely nothing is validated so you better do that first.
 *
 * Have in mind that variables are passed from template to layout and the
 * variables from the function's signature cannot be used in a template
 * because they would break the function by overwriting vital information.
 *
 * Example usage:
 * <samp>
 *   $section = render('section', $variables = array(
 *     'title'      => 'Section #1',
 *     'content'    => 'Sample content',
 *     'page_title' => 'Example page',
 *   ));
 *   $html = render('section', $variables, 'layout');
 * </samp>
 * with "templates/section.php":
 * <code>
 *   <h1><?= $section ?></h1>
 *   <p><?= $content ?></p>
 * </code>
 * and "templates/layout.php":
 * <code>
 *   <html>
 *     <head><title><?= $title ?></title></head>
 *     <body><?= $CONTENT ?></body>
 *   </html>
 * </code>
 *
 * @param string $_template  the template to render (note: no extension)
 * @param array  $_variables the variables to be substituted
 * @param mixed  $_layout    an additional layout template
 * @param string $_content   name of content variable used in layout
 *
 * @return string the rendered template
 */
function render($_template$_variables = array(), $_layout false$_content 'CONTENT') {
    
ob_start();
    
extract($_variables);
    include 
'templates/'.$_template.'.php';
    $
$_content ob_get_clean();

    if (
$_layout) {
        
ob_start();
        include 
'templates/'.$_layout.'.php';
        $
$_content ob_get_clean();
    }

    return $
$_content;
}
 

Geändert von tleilax (27.09.2011 um 11:35:18 Uhr) Grund: Titel-Präfix dazu, dafür Signatur weg
tleilax ist offline Threadstarter   Mit Zitat antworten
Alt 16.11.2011, 08:08:13   #43
tleilax
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose senden

Reg: 20.04.2006
Beiträge: 2.428
Standard [PHP] Simpelstes Proxyerkennen

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function requested_via_proxy() {
    
$proxy_headers = array(
        
'HTTP_VIA''HTTP_X_FORWARDED_FOR''HTTP_FORWARDED_FOR',
        
'HTTP_V_FORWARDED''HTTP_FORWARDED''HTTP_CLIENT_IP',
        
'HTPP_FORWARDED_FOR_IP''VIA''X_FORWARDED_FOR',
        
'FORWARDED_FOR''X_FORWARDED''FORWARDED''CLIENT_IP',
        
'FORWARDED_FOR_IP''HTTP_PROXY_CONNECTION',
    );
    return (bool) 
count(array_intersect($proxy_headersarray_keys($_SERVER)));

 
tleilax ist offline Threadstarter   Mit Zitat antworten
Antwort

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Snippets - Diskussionsthread tleilax Programmierung 175 06.10.2014 21:43:27
[S] 2 Script-Snippets (JS) 250k je Script ! halbesbit Lose4Scripts 2 20.04.2008 18:02:27


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12:19 Uhr.