Modul: Debug Modul V1.0

Gesperrt
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Modul: Debug Modul V1.0

Beitrag von schlaucher »

Hi,

habe hier ein kleines Modul, welches mir die Entwicklung und vor allem die Fehlersuch in Modulen erleichtert. Es hat z.Z. folgende Funktionen:
  • Auflistung alle aktiven Variablen und deren Inhalt
    Hier werden sowohl alle _SERVER Variablen, die von Contenido genutzen Variablen und die in den Modulen selbst definierten Variablen ausgegeben.

    Eingabe eines SQL Select.
    Man kann z.B. den SQL Select Befehl aus einem Modul hinenkopieren und erhält als Ergebnis eine Liste der gefundenen Datensätze.
    Es ist nun möglich, Variablen aus dem aktiven Artikel zu benutzen z.B. CATLANG.idacat=$idcat. Das Problem mit den einfachen Anführungszeichen ist auch erledigt.

    Sicherheitscheck
    DAs Modul wird nur aktiv, wenn man als sysadmin angemeldet ist
Man bindet das Modul in eine vorhandenes Template ein. Am besten in den letzten Container.

Achtung !!!
Diese Modul ist mit Vorsicht einzusetzen. Durch das SQL Fenster kann jeder SQL Code auf der Datenbank ausgeführt werden!!! Fehlerhafte Abfragen können die Datenbank schrotten.
Ich übernehme keine Haftung bei falscher Handhabung!!!
:twisted:

Debug Modul - Output:

Code: Alles auswählen

<?php
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Debug Modul
* Version     :     1.0
* Author      :     schlaucher 
* Created     :     28-08-2006
* Modified    :     
************************************************/ 

echo '<p><hr><h1><center>Debug Modul - Start</center></h1><br><hr></p>';

if ($auth->auth["uname"] != "sysadmin"){
    echo '<a>'.mi18n("F&uuml;r das Debug-Modul m&uuml;ssen Sie als User: sysadmin angemeldet sein.").'</a><br>';
    die;
}

$MOD_DT_var_arr = get_defined_vars(); 
ksort ( $MOD_DT_var_arr );

echo ' 
<table border="1">
    <tr>
        <td><strong>Key</strong></td>
        <td><strong>Value</strong></td>
    </tr>';
    
foreach($MOD_DT_var_arr as $MOD_DT_var_key => $MOD_DT_var_value) 
   { 
   if ($MOD_DT_var_key != 'code' && $MOD_DT_var_key != 'contenido_password' && $MOD_DT_var_key != 'output' && $MOD_DT_var_key != 'finalEditButton' && $MOD_DT_var_key != 'finalSaveButton' && $MOD_DT_var_key != 'editbutton' && $MOD_DT_var_key != 'edit_preview') 
        { 
        echo '
        <tr>    
            <td><strong>'.$MOD_DT_var_key.'</strong></td>
            <td>'.$MOD_DT_var_value.'</td>
        </tr>'; 
        } 
    } 

echo '
</table>';

echo '<p><hr><h1><center>Debug Modul - SQL Test</center></h1><br><hr></p>'; 

function report_mysql_error(){ 
    if ( mysql_errno() ) { 
        echo $str . '<br>'; 
        echo '<p>mysql error :: '.mysql_errno().' : '. mysql_error() . '</p>'; 
    } 
} 

function show_field_names( $MOD_DT_result, $MOD_DT_num_fields ) { 
    echo '<tr>'; 
    for ( $MOD_DT_zaehler = 0; $MOD_DT_zaehler < $MOD_DT_num_fields; $MOD_DT_zaehler++ ) { 
        echo '<td valign="top">'.mysql_field_name( $MOD_DT_result, $MOD_DT_zaehler ).' &nbsp;</td>'; 
            report_mysql_error(); 
    } 
    echo '</tr>'; 
} 

if ($MOD_DT_query) { 
    
    // ggf. ' entfernen
    $MOD_DT_query = str_replace("\'", "", $MOD_DT_query);
    
    // $Variablen ersetzen
    $MOD_DT_findvar = strpos($MOD_DT_query, "$");
    if ($MOD_DT_findvar) { // 
       $MOD_DT_array_query = explode(" ", $MOD_DT_query);
       foreach ($MOD_DT_array_query as $MOD_DT_array_value) {
            $MOD_DT_findvar2 = strpos($MOD_DT_array_value, "$");
            if (strlen($MOD_DT_findvar2) == 1) { //
                if (isset($MOD_DT_array_value)) { // prüfen, ob Variable einen Wert hat
                    $MOD_DT_query = str_replace($MOD_DT_array_value, ${substr($MOD_DT_array_value,1)}, $MOD_DT_query);
                }
            }
        }
    }
    
    $MOD_DT_result = mysql_query( $MOD_DT_query ); 
        report_mysql_error(); 
    $MOD_DT_num_rows = mysql_num_rows( $MOD_DT_result ); 
        report_mysql_error(); 
    $MOD_DT_num_fields = mysql_num_fields( $MOD_DT_result ); 
        report_mysql_error(); 

    $MOD_DT_fieldnames_zaehler = 1; 
    echo '<p>'.$MOD_DT_query .'</p><hr noshade>'; 
    echo '<p>Anzahl der Datens&auml;tze: '.$MOD_DT_num_rows.'<br>Anzahl der Felder pro Datensatz: '.$MOD_DT_num_fields.'</p>'; 

    echo '<table border="1" cellspacing="0" cellpadding="3">'; 

    while ( $MOD_DT_num_rows > 0 ) { 
        if ($MOD_DT_fieldnames_zaehler == 1) { 
            show_field_names( $MOD_DT_result, $MOD_DT_num_fields ); 
            $MOD_DT_fieldnames_zaehler = $MOD_DT_show_fieldnames; 
            } 
        elseif ($MOD_DT_fieldnames_zaehler > 1) { 
            $MOD_DT_fieldnames_zaehler--; 
            } 
        $row = mysql_fetch_array( $MOD_DT_result ); 
        if (($MOD_DT_num_rows % 2) == 1) { 
            echo '<tr bgcolor="#cccccc">'; 
            } 
        else { 
            echo '<tr>'; 
            } 
        for ( $MOD_DT_zaehler = 0; $MOD_DT_zaehler < $MOD_DT_num_fields; $MOD_DT_zaehler++ ) { 
            echo '<td valign="top" class="normaal">'.$row[$MOD_DT_zaehler].'&nbsp;</td>'; 
            } 
        echo '</tr>'; 
        $MOD_DT_num_rows--; 
        } 
  
    echo '</table>'; 
    } 
else { 
echo ' 
     <form method="post"> 
        <table> 
            <tr> 
                <td>'.mi18n("SQL Code eingeben").'</td>
            </tr>
            <tr>            
                <td><textarea name="MOD_DT_query" rows="15" cols="100"></textarea></td> 
            </tr>    
            <tr> 
                <td><input type="submit" name="action" value="'.mi18n("SQL abschicken").'"></td> 
            </tr> 
        </table> 
    </form>'; 
    } 

echo '<p><hr><h1><center>Debug Modul - Ende</center></h1><br><hr></p>'; 

?>
Gruß
schlaucher
Zuletzt geändert von schlaucher am Mo 28. Aug 2006, 09:52, insgesamt 2-mal geändert.
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Hallo Schlaucher,

hab jetzt leider keine Zeit, dass zu testen, aber die Idee ist super. Prima. Weiter so!

Gruß MyAccount
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher »

Um das Modul ein wenig sicherer zu machen, kann man folgenden Code am Anfang einfügen:

Code: Alles auswählen

if ($auth->auth["uname"] != "sysadmin"){
    echo '<a>'.mi18n("F&uuml;r das Debug-Modul m&uuml;ssen Sie als User: sysadmin angemeldet sein.").'</a><br>';
    die;
}
Dadurch wird das Modul nur aktiv, wenn man als sysadmin angemeldet ist.

Gruß
schlaucher
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

verwend doch folgendes

Code: Alles auswählen

if ($perm->have_perm()){
dann sollte jeder user mit sysadmin oder admin berechtigung das debug modul sehen, unabhängig vom benutzernamen...
*** make your own tools (wishlist :: thx)
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher »

danke, werd ich machen.

Frage:
schläfst auch auch mal? Oder bist Du wirklich 24 Stunden im Forum online? :lol:

Gruß
schlaucher
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher »

Hi emergence,
emergence hat geschrieben:verwend doch folgendes

Code: Alles auswählen

if ($perm->have_perm()){
habe den Code mal getauscht, aber das funktioniert nicht. Das Modul wird dann auch aktiv, wenn man nicht angemeldet ist!

Gruß
schlaucher
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

komisch ich verwend das die meiste zeit ohne probleme in meinen projekten... (aber eigentlich nur backend bereich...)

könnt sein das es da nen bug gibt...

schlafen ? dafür hab ich keine zeit ;-)
*** make your own tools (wishlist :: thx)
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher »

emergence hat geschrieben:komisch ich verwend das die meiste zeit ohne probleme in meinen projekten... (aber eigentlich nur backend bereich...)
Ich habs unter einer 4.6.4-mr Version getestet. Da war das Modul im Frontend sichtbar.

Gruß
schlaucher
schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher »

Neue, überarbeitete Version V1.0 verfügbar.

Gruß
schlaucher
Gesperrt