Seite 1 von 1

Modul: Debug Modul V1.0

Verfasst: Fr 25. Aug 2006, 12:42
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

Verfasst: Fr 25. Aug 2006, 15:27
von MyAccount
Hallo Schlaucher,

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

Gruß MyAccount

Verfasst: Sa 26. Aug 2006, 08:37
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

Verfasst: Sa 26. Aug 2006, 08:44
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...

Verfasst: Sa 26. Aug 2006, 08:47
von schlaucher
danke, werd ich machen.

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

Gruß
schlaucher

Verfasst: Sa 26. Aug 2006, 09:08
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

Verfasst: Sa 26. Aug 2006, 09:18
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 ;-)

Verfasst: Sa 26. Aug 2006, 09:25
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

Verfasst: Mo 28. Aug 2006, 09:54
von schlaucher
Neue, überarbeitete Version V1.0 verfügbar.

Gruß
schlaucher