1

(11 Antworten, geschrieben in PHP)

Hi Basti,

Recht hast Du:

ich hätte Deinen Beitrag vernünftig lesen sollen!

Aber wie das nun mal so ist, brauche ich immer ein bisschen Zeit, um mir den Frust aufzubauen und dann noch ein bisschen Zeit, um ihn wieder loszuwerden:

Die schlechte Nachricht ist, dass die Funktion ini_set("session.gc_maxlifetime","3600") definitiv nicht funktioniert - da ich Windows habe und damit habe ich wieder ein Problem...

Die gute Nachricht ist, dass man mit abgelaufene session-ID’s  (egal ob über logout oder timout entstanden) nicht mehr auf die Dateien zugreifen kann - jedenfalls nicht mit meinen bescheidenen Künsten...

Ich weiß jetzt wenigstens - Dank Deines Einsatzes - den Weg und bastle erst mal an einer Windows-Lösung für’s timeout und an einer separaten logout-Datei.

etwas traurig, weil die session’s nun doch noch nicht zu den Akten gelegt werden können

grüßt Evelin

2

(8 Antworten, geschrieben in PHP)

hm.. MeineBeschreibungBeschreibung der Stimme...
Aber er setzts nicht als Value, sondern vorne dran.. Was kann ich machen?

hi,

wenn Du es nicht schon gepackt hast, den Wert in das input-Feld zu bekommen, dann versuch es mal damit:

 <i>Neue Eingaben</i><br>
 <?php
     //aus php-Handbuch: Funktion eval
     $string = 'Bierglas';
     $name = 'Binding-Lager';
     $str = 'Das ist mein $string, voll mit $name.<br>';
     echo $str;
     eval ("echo $str = "$str";");
     echo $str;
     //Deine alte Zeile
     //eval("echo $bez_$z;");
 ?>
 <?php
     $stimmen = 1;
 
     for ($z=0;$z!=$stimmen+1;$z++) 
     {
         echo "<p>begin for $z:";
         echo "<br>Beschreibung der Stimme <br><input type='Text' name='bez_$z' value='";                 
 ?>
 
 <?php             
         eval ("echo $str = "$str";"); 
 ?>
 
 <?php 
         echo "'><br>";
         echo "end for $z!";
     }//end for
 ?>
 

und nach dem ich jetzt Dein Skript gut kenne, würde mich interessieren, was denn nicht geht. Ich habe es auf meinem Rechner ausprobiert und kann vor lauter nicht initialisierten Variablen kaum das Ende finden. Jetzt habe ich ein paar Variablen expliziet jeweils einen Werte zugewiesen und konnte mich so durch Deinen - für mich: neuen - Programmierstil hindurch wühlen.

Kannst Du Dein noch evtl. vorhandenes code-Problem ein wenig einkreisen?

freundlich grüßt Evelin

3

(8 Antworten, geschrieben in PHP)

geht immer noch nicht..

Hi sometimes2,

meinst Du ungefähr so:

 
 <html>
 <body>
 <?
 $user='user';
 $pwd='user';
 print_r($_GET["do"]);
 
 ?>
 <script src="scripte/admin.js"></script>
 <table width="100%" height="100%" cellspacing="0" cellpadding="0" border="1">
 <tr height="25" bgcolor="#FF7F00"><td align="center">Andis Voter System</td></tr>
 <?
     echo '<tr height="20" bgcolor="#FFBF00"><td align="left">
          <a href="?do=makevote&password='.$password.'&username='.$username.'">
          <img src="images/create.bmp" alt="Vote erstellen" border="0"></a> 
          <a href="?do=showvotes&password='.$password.'&username='.$username.'">
          <img src="images/show.bmp" alt="Votes anzeigen" border="0"></a>';
 
     if ($do=="openfile") 
     {
         echo '<a href="?do=openvote&votenr='.$votenr.'&password='.$password.'&username='.$username.'">
              <img src="images/top.bmp" alt="Dateien anzeigen" border="0"></a>';
         echo '<a href=javascript:speichern("'.$username.'","'.$password.'")>
              <img src="images/save.bmp" alt="Speichern" border="0"></a>';
     }
 ?>
 
 </td></tr>
 <tr><td valign="top" bgcolor="#C0C0C0">
 
 
 <?
     if ($username==$user && $password==$pwd) 
     {
         echo '<input type="HIDDEN" name="username" value="'.$username.'" size="" maxlength="">';
         echo '<input type="HIDDEN" name="password" value="'.$password.'" size="" maxlength="">';
 
         if ($do=="votevisibility") 
         {
             echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">
                   <tr align="right" bgcolor="#FFDF00"><td><b>Sichtbarkeit - Votenr '.$votenr.'</b><
                   /td></tr><tr><td>';
             if (file_exists("votes/".$votenr."/isvote.dat")) 
             { //das voting existiert.
                 if ($pi==null) 
                 {
                     echo 'Wollen Sie den Vote '.$votenr.' wirklich unsichtbar machen?';
                     echo '<br><a href="?votenr='.$votenr.'&do='.$do.'&pi=yes&password='.$password.
                           '&username='.$username.'">
                           Ja</a> | <a href="?votenr='.$votenr.'&do='.$do.'&pi=no&password='.$password.
                           '&username='.$username.'">Nein</a>';
                 }
             
                 if ($pi=="yes") 
                 {
                     unlink ('votes/'.$votenr.'/isvote.dat');
                     echo 'Der Vote '.$votenr.' wurde unsichtbar gemacht.';
                     echo '<br><a href="?do=showvotes&password='.$password.'&username='.$username.'">
                           Zur Übersicht</a>';
                 }
             
                 if ($pi=="no") 
                 {
                     echo 'Aktion abgebrochen..';
                     echo '<br><a href="?do=showvotes&password='.$password.'&username='.$username.'">
                            Zur Übersicht</a>';
                 }
             }
             else 
             {
                 if ($pi==null) 
                 {
                     echo 'Wollen Sie den Vote '.$votenr.' wirklich sichtbar machen?';
                     echo '<br><a href="?votenr='.$votenr.'&do='.$do.'&pi=yes&password='.$password.
                           '&username='.$username.'">Ja</a> | 
                           <a href="?votenr='.$votenr.'&do='.$do.'&pi=no&password='.$password.
                           '&username='.$username.'">Nein</a>';
                 }
             
                 if ($pi=="yes") 
                 {
                     $datei=fopen("votes/".$votenr."/isvote.dat","w+");
                     fwrite($datei,'');
                     fclose($datei);
                     echo 'Der Vote '.$votenr.' wurde sichtbar gemacht.';
                     echo '<br><a href="?do=showvotes">Zur Übersicht</a>';
                 }
             
                 if ($parai=="no") 
                 {
                     echo 'Aktion abgebrochen..';
                     echo '<br><a href="?do=showvotes&password='.$password.'&username='.$username.'">Zur Übersicht</a>';
                 }
             }
             echo '</td></tr></table>';
         }
     
     
         if ($do=="openfile") 
         {
             $sti=fopen("votes/".$votenr."/".$datei,"r");
             $dateiinhalt=fgets($sti,filesize("votes/".$votenr."/".$datei)+1);
             fclose($sti);
 ?>
 <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr align="right" bgcolor="#FFDF00"><td><b>Dateiinhalt - Datei <? echo $datei; ?></b></td></tr><tr><td>
 <form action="?do=schreiben" name="eingabe">
 <?
             echo '<input type="HIDDEN" name="username" value="'.$username.'" size="" maxlength="">';
             echo '<input type="HIDDEN" name="password" value="'.$password.'" size="" maxlength="">';
 ?>
 
 <input type="HIDDEN" name="do" value="schreiben" size="" maxlength="">
 Datei <input type="Text" name="datei" value="<? echo $datei; ?>" size="" maxlength=""><br>
 Votenr <input type="Text" name="votenr" value="<? echo $votenr; ?>" size="" maxlength=""><br>
 Inhalt <br><textarea name="inhalt" cols="20" rows="20"><? echo $dateiinhalt; ?></textarea><br>
 <input style="position:relative;" type="Submit" value="Speichern" id="save" name="save">
 </form>
 </td></tr></table>
 <?
         }
     
         if ($do=="schreiben") 
         {
             $sti=fopen("votes/".$votenr."/".$datei,"w+");
             fwrite($sti,$inhalt);
             fclose($sti);
             echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">
                   <tr align="right" bgcolor="#FFDF00"><td><b>Änderung für Vote '.$datei.
                   ' erfolgreich</b></td></tr><tr><td>';
             echo 'Änderungen erfolgreich.';
             echo '<br><a href="?do=showvotes&password='.$password.'&username='.$username.
                   '">Zur Übersicht</a>';
             echo '</td></tr></table>';
         }
 
 
         if ($do=="openvote") 
         {
             $votes_online='';
             $verz=opendir('votes/'.$votenr.'/');
             $votes_online=$votes_online.'
             <a href="?do=votevisibility&votenr='.$votenr.'&password='.$password.
             '&username='.$username.'">Sichtbarkeit</a><br><br>';
         
             while ($res=readdir($verz)) 
             {
                 $ok=0;
                 if ($res!=null && $res!=".." && $res!="." && $res!="./") 
                 {
                     if ($res=="sys.dat") 
                     {
                         $votes_online=$votes_online.'
                         <img src="images/right.bmp" alt="" border="0"> 
                         <ahref="?do=openfile&votenr='.$votenr.'&datei='.$res.'&password='.$password.
                         '&username='.$username.'">Stimmenanzahl</a><br>';
                         $ok=1;
                     }
                 
                     if (strpos($res,"bez") && $res!="bez.dat") 
                     {
                         $votes_online=$votes_online.'<img src="images/right.bmp" alt="" border="0"> 
                         <a href="?do=openfile&votenr='.$votenr.'&datei='.$res.'&password='.$password.
                         '&username='.$username.'">Beschreibung der Stimme ('.$res.')</a><br>';
                         $ok=1;
                     }
                 
                     if ($res=="bez.dat") 
                     {
                         $votes_online=$votes_online.'
                         <img src="images/right.bmp" alt="" border="0"> 
                         <a href="?do=openfile&votenr='.$votenr.'&datei='.$res.'&password='.$password.
                         '&username='.$username.'">Beschreibung des Votes</a><br>';
                         $ok=1;
                     }
                 
                     if ($res=="isvote.dat") 
                     {
                         $ok=1;
                     }
                 
                     if ($ok==0) 
                     {
                         $votes_online=$votes_online.'
                         <img src="images/right.bmp" alt="" border="0"> 
                         <a href="?do=openfile&votenr='.$votenr.'&datei='.$res.'&password='.$password.
                         '&username='.$username.'">Votes für Stimme ('.$res.')</a><br>';
                     }
                     $ok=0;
                 }
             }
         
             echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">
                   <tr align="right" bgcolor="#FFDF00"><td><b>Votes online</b></td></tr><tr><td>';
             echo $votes_online;
             echo '</td></tr></table>';
         }
 
         if ($do=="showvotes") 
         {
             $votes_online='';
             $verz=opendir('votes/');
             while ($res=readdir($verz)) 
             {
                 if ($res!=null && $res!=".." && $res!="." && $res!="./") 
                 {
                     $votes_online=$votes_online.'
                     <img src="images/right.bmp" alt="" border="0"> 
                     <a href="?do=openvote&votenr='.$res.'&password='.$password.
                     '&username='.$username.'">Votenr. '.$res.'</a><br>';
                 }
             }
         
             echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">
                   <tr align="right" bgcolor="#FFDF00"><td><b>Votes online</b></td></tr><tr><td>';
             echo $votes_online;
             echo '</td></tr></table>';
         }
 
         if ($do=="makevote") 
         {
 ?>
 <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr align="right" bgcolor="#FFDF00"><td><b>Vote erstellen - Schritt 1 von 3</b></td></tr><tr><td>
 <form name="eingabe" action="?do=makevoteb">
 <?
             echo '<input type="HIDDEN" name="username" value="'.$username.'" size="" maxlength="">';
             echo '<input type="HIDDEN" name="password" value="'.$password.'" size="" maxlength="">';
 ?>
 <input type="HIDDEN" name="do" value="makevoteb" size="" maxlength="">
 Votenr <input type="Text" name="votenr" value="" size="" maxlength=""><br>
 Anzahl der Stimmen (0+)<br><input type="Text" name="stimmen" value="1" size="" maxlength=""> <a href="javascript:dazu ()"><img src="images/create.bmp" alt="" border="0"></a> <a href="javascript:weg ()"><img src="images/delete.bmp" alt="" border="0"></a><br>
 Beschreibung <br><textarea name="inhalt" cols="20" rows="20"></textarea><br>
 <input type="Submit" value="Weiter">
 </form>
 </td></tr></table>
 <?
         }
     
         if ($do=="makevoteb" && $stimmen>=1) 
         {
 ?>
 <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr align="right" bgcolor="#FFDF00"><td><b>Vote erstellen - Schritt 2 von 3</b></td></tr><tr><td>
 <form action="?do=makevotec">
 <input type="HIDDEN" name="do" value="makevotec" size="" maxlength="">
 
 <?
             echo '<input type="HIDDEN" name="username" value="'.$username.'" size="" maxlength="">';
             echo '<input type="HIDDEN" name="password" value="'.$password.'" size="" maxlength="">';
 ?>
 
 
 <i>Bisherige Eingaben</i><br>
 Votenr <input type="Text" name="votenr" value="<? echo $votenr; ?>" size="" maxlength=""><br>
 Anzahl der Stimmen <br><input type="Text" name="stimmen" value="<? echo $stimmen; ?>" size="" maxlength="" readonly="yes"><br>
 Beschreibung <br><textarea name="inhalt" cols="20" rows="20"><? echo $inhalt; ?></textarea><br>
 <hr>
 <i>Neue Eingaben</i><br>
 <?
             for ($z=0;$z!=$stimmen+1;$z++) 
             {
                 echo 'Beschreibung der Stimme <br>
                       <input type="Text" name="bez_'.$z.'" value="" size="" maxlength=""><br>';
                 echo 'Votes für die Stimme <br><input type="Text" name="startzahl_'.$z.'" 
                       value="0" size="" maxlength=""><br>';
             }
 ?>
 <input type="Submit" value="Weiter">
 </form>
 </td></tr></table>
 <?
         }
     
         if ($do=="makevoteb" && $stimmen<1) 
         {
             echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">
                   <tr align="right" bgcolor="#FFDF00"><td><b>Vote erstellen - Schritt 2 von 3
                   </b></td></tr><tr><td>';
             echo '<i>Fehler:</i> Es müssen mindestens 2 Stimmmöglichkeiten vorhanden sein. (0,1) 
                   <br><i>Hinweis:</i> Der Computer fängt bei 0 an zu zählen, und nicht erst ab 1!';
             echo '</td></tr></table>';
         }
     
         if ($do=="makevotec") 
         {
 ?>
 <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr align="right" bgcolor="#FFDF00"><td><b>Vote erstellen - Schritt 3 von 3</b></td></tr><tr><td>
 <? 
             echo 'Bitte kontrollieren Sie nocheinmal ihre Eingaben.<br>
                   Falls Sie einen Fehler bemerkt haben,<br> klicken Sie bitte auf Zurück.'; ?>
 <form action="?do=makevoted">
 <?
             echo '<input type="HIDDEN" name="username" value="'.$username.'" size="" maxlength="">';
             echo '<input type="HIDDEN" name="password" value="'.$password.'" size="" maxlength="">';
 ?>
 <input type="HIDDEN" name="do" value="makevoted" size="" maxlength="">
 <i>Bisherige Eingaben</i><br>
 Votenr <input type="Text" name="votenr" value="<? echo $votenr; ?>" size="" maxlength=""><br>
 Anzahl der Stimmen <br><input type="Text" name="stimmen" value="<? echo $stimmen; ?>" size="" maxlength="" readonly="yes"><br>
 Beschreibung <br><textarea name="inhalt" cols="20" rows="20"><? echo $inhalt; ?></textarea><br>
 <hr>
 <i>Neue Eingaben</i><br>
 <?
             for ($z=0;$z!=$stimmen+1;$z++) 
             {
                 echo 'Beschreibung der Stimme <br><input type="Text" name="bez_'.$z.'" 
                       value="'.eval("echo $bez_$z;").'" size="" maxlength=""><br>';
                 echo 'Votes für die Stimme <br><input type="Text" name="startzahl_'.$z.'" 
                       value="'.eval("echo $startzahl_$z;").'" size="" maxlength=""><br>';
             }
 ?>
 <input type="Submit" value="Speichern">
 </form>
 </td></tr></table>
 <?
         }
     
         function schreiben($was,$inhaltb) 
         {
             $sti=fopen("votes/".$votenr."/".$was,"w+");
             fwrite($sti,$inhaltb);
             fclose($sti);
         }
     
         if ($do=="makevoted") 
         {
             mkdir('votes/'.$votenr.'/');
 
             $sti=fopen("votes/".$votenr."/sys.dat","w+");
             fwrite($sti,$stimmen);
             fclose($sti);
             $sti=fopen("votes/".$votenr."/bez.dat","w+");
             fwrite($sti,$inhalt);
             fclose($sti);
 
             for ($z=0;$z!=$stimmen+1;$z++) 
             {
                 $sti=fopen("votes/".$votenr."/".$z.".dat","w+");
                 fwrite($sti,eval("echo $startzahl_$z;"));
                 fclose($sti);
                 $sti=fopen("votes/".$votenr."/bez_".$z.".dat","w+");
                 fwrite($sti,eval("echo $bez_$z;"));
                 fclose($sti);
             }
         
             $sti=fopen("votes/".$votenr."/isvote.dat","w+");
             fwrite($sti,'');
             fclose($sti);
 
 ?>
 <table border="0" cellspacing="0" cellpadding="0" width="100%"><tr align="right" bgcolor="#FFDF00"><td><b>Vote erstellen - fertig</b></td></tr><tr><td>
 Der Vote wurde aktiviert. <br>
 <? 
             echo '<a href="?do=showvotes&password='.$password.'&username='.$username.'">
                   Zurück zur Übersicht</a>'; ?>
 </td></tr></table>
 <?
         }
     
         if ($do==null) 
         {
             echo '<table border="0" cellspacing="0" cellpadding="0" width="100%">
                   <tr align="right" bgcolor="#FFDF00"><td><b>Votes online</b></td></tr><tr><td>';
             echo 'Wilkommen bei Voter-Admin.<br>Folgende Optionen stehen zur Auswahl:';
             echo '<br><a href="?do=showvotes&password='.$password.'&username='.$username.'">
                   Anzeigen der Votes</a>';
             echo '<br><a href="?do=makevote&password='.$password.'&username='.$username.'">
                   ErstellenVotes</a>';
             echo '</td></tr></table>';
         }
     }
     else 
     {
         if ($_GET["do"]==null) 
         {
             echo 'Sie müssen sich einloggen<br><a href="?do=login">Login</a>';
         }
         else 
         {
             if ($_GET["do"]==login) 
             {
 ?>
 <form action="admin.php" method="post">
 Name <input type="Text" name="username" value="" size="" maxlength=""><br>
 Passwort <input type="Password" name="password" value="" size="" maxlength=""><br>
 <input type="Submit" name="" value="Login">
 
 </form>
 
 <?
             }
             else 
             {
                 echo 'Fehler: Login Daten sind nicht korrekt!<br><a href="?do=login">Login</a>';
             }
         }
 
     }
 ?> </td></tr></table> 
 </body></html>
 
 

4

(11 Antworten, geschrieben in PHP)

Hi Basti,

nun wird es doch noch mal für mich interessant:

Ich habe den Server durchlaufen lassen. Die session-Dateien sind abgelaufen und befinden sich immer noch im entsprechenden Verzeichnis! Passwort und Benutzername habe ich nicht verschlüsselt in der session-Datei abgelegt und sind entsprechend auch lesbar.


Da wundert sich der Laie (feminin: die Laiin??) doch ganz heftig! Zumal ich die sessions von gestern nicht über log-out (mit session_destroy()) verlassen habe.

Kann es sein, dass der apache-Server entsprechend konfiguriert werden muss oder bin ich doch dafür verantwortlich, die Dateien bei ausbleibenden log-out zu löschen?

Sicher keine alles entscheidende Frage, da eine Abfrage mit entsprechend notwendigen Handlungsschritten schnell erstellt ist (denke ich jedenfalls), aber wissen würde ich schon ganz gern, wie viel ich dem Server-Betreiber überlassen kann.

neugierig grüßt Evelin

zum PS:
Irgendwie musste ich ja die durch das Thema session ergrauten Haare kaschieren  <img src="/forum/images/graemlins/smile.gif" alt="" />

5

(11 Antworten, geschrieben in PHP)

Hi Basti,

damit bin ich durch die sessions, glaube ich jedenfalls vorläufig, durch!

Coole Sache!!

Ich bedanke mich für die Antreiberei - hat’s wirklich gebracht!!!

nun geht’s zu den Vorbereitungen zum Aschermittwoch-Auskehr-Ball

Grüße an alle Pappnasen und wer jetzt noch arbeiten muss:

Evelins Bedauern ist mit Euch


PS: ROT!!

6

(11 Antworten, geschrieben in PHP)

Hi tink,

hi Basti,

ich habe Eure Beiträge verstanden, zumal im Forum auch noch mehr dazu stand. Aber entweder habe ich es überlesen oder es ist tatsächlich noch nicht gefragt worden:

Was ist, wenn sich der User nicht über den logout aus dem Programm verabschiedet?

Ich habe bis jetzt über eine logout-Taste die session explizit gelöscht (das hatte ich bis dato nicht gemacht und daher stammte auch der Datenmüll).  Werden dann trotzdem die session-Daten nach Ablauf des Zeitlimits gelöscht?

Es mag vielleicht etwas primitiv klingen, aber um das auszuprobieren werde ich den Server mal einfach durchlaufen lassen. Denn, wenn mein lokaler Server am nächsten Tag wieder gestartet wird, sind die session-Daten jetzt definitiv gelöscht.
Nur ist ein Provider-Server prinzipiell auch so nett, über ein time-out die Daten zu löschen (sicher doch, was will er mit dem so angehäuften Datenmüll?! Hier könnte eine Routine des Server-Betreibers evlt. so, wie sie Basti darstellt, greifen: aber kann ich mich darauf verlassen?) und stellt das Ablegen der Daten im Nein-Fall ein Sicherheitsrisiko dar?

Dann sollte ich vielleicht nach Alternativen zum Löschen der session-Datei - auch ohne logout - suchen?

Die Fragen zusammengefasst klingt dann etwa so:

Ist es Aufgabe des Programmierers, die sessions explizit zu löschen, egal ob über time-out oder logout, oder „kümmert“ sich der Fremdserver implizit darum?

freundlich grüßt Evelin

7

(11 Antworten, geschrieben in PHP)

Hi,

nun vielleicht noch einen Tipp von Euch, wie ich die session-Dateien wieder los werde???

Meine Frage noch mal zur Erinnerung:

Außerdem habe ich durch das Ausprobieren meines Login-Scripts bereits eine stattliche Sammlung an session-Dateien, die ich doch auch irgend wie wieder loswerden sollte. Ich habe mir die Funktion destroy() von Basti's session-class angeschaut und werde nicht so recht schlau daraus:

In welchen Fällen ist denn eine Zerstörung der session unbedingt(!!) vorzusehen! Beim Logout sicher, aber wann noch! Mir fehlen da einfach ein paar Monate Erfahrung.

besorgt um den Daten-Müll grüßt Evelin

8

(7 Antworten, geschrieben in PHP)

Hi,

Thema ist erledigt!!

Wie immer hattet Ihr Recht! Ich habe require 'session.inc.php'; an den Anfang des Script's kopiert und die Warnung ist weg!

Danke und ein bisschen glücklicher melde ich mich mit dem zweiten Teil der Frage gleich wieder...

Grüße von Evelin

PS: Es wird Zeit für's Wochenende...

9

(7 Antworten, geschrieben in PHP)

Hi Mamphil, hi tink,

Ihr seit Euch ja ziemlich einig! Nur ich bin noch etwas begriffsstutzig!

 
 <?php
 // login.php
 // Keine Cookies
 ini_set("session.use_cookies",   "0");
  
 // Überprüfung der Benutzerdaten
 if( isset($_POST["go"]) )
 {
     $lnn = $_POST["nn"];
     $lpw = $_POST["pwd"];     
 
     if( $lnn == "" )//kein Login-Name
     {
         // login nicht ok
         Header("Location: http://localhost/test/navi.php?gescheitert=true");  
     }
     else
     {
          if( $lpw == "" )//kein Login-Passwort
         {
             // login nicht ok
         Header("Location: http://localhost/test/navi.php?gescheitert=true");  
         }
         else
         {
         //Funktionen einbinden 
         require 'DOM2/functionen.inc.php';
         $a = "localhost";
         $b = $lnn;
         $c = $lpw;
         //Verbindung aufbauen
         $link = con($a,$b,$c);
         //ist die Verbindung zustande gekommen?
         if( $link )
         {
             // login ok - session starten  
                 session_name('DOM');
             session_start();
     
                 // Usernamen speichern
                 $_SESSION["user"]=$_POST["nn"];
     
                 // Session verifizieren
                 $_SESSION["VERIFIED"]=true;
 
                 // Benutzer-IP speichern
                 $_SESSION["REMOTE_ADDR"] = $_SERVER["REMOTE_ADDR"];
 
                 Header("Location: http://localhost/test/inside/navi.php?DOM=".session_id());
          } 
         else 
         {
                 // login nicht ok
                 Header("Location: http://localhost/test/navi.php?gescheitert=true");    
             }//Ende $link                 
     }//Ende if kein Login-Passwort
 }//Ende if kein Login_Name
 ?>
 

login.php steht für sich allein. Vor login.php sind index.ph mit Umleitung zum frame. In frame links ist das Login-Formular. Ist das Formular abgeschickt, wird diese login.php aufgerufen, die session angelegt und erst dann in der navi-Leiste des benutzer-frames die session begonnen. Ich denke mir, dass ich doch erst dann die session-Datei anlegen sollte, wenn ich die Login-Daten des Benutzers habe und die können doch nur von einem Formular mit HTML-Code kommen. Wie viel frame-Code da noch dazwischen kommen macht dann auch nichts mehr, HTML wird auf jeden Fall vor dem Start der session stehen! Oder soll ich die session starten, bevor index.php das frame für die Eingabe der Zugangsdaten startet? Dann habe ich doch aber eine „leere“ session gestartet?! ...Wie bereits geschrieben, ich bin etwas begriffsstutzig!

??Verwirrung auf der ganzen Linie bei Evelin??

10

(7 Antworten, geschrieben in PHP)

Hi tink,

ich gebe mal den Weg an, den ich zusammengestellt habe:

index.php (nur Header-Umleitung auf)
->frame.php (rechts: Kunden-homepage ||| links: login-Formular mit Test auf Gültigkeit in)
-> login.php (if Name, PW ausgefüllt -> ja
-> if Name,PW in user-DB von mysql -> ja
-> session_start() mit Anlegen der session-Variablen in der session-Datei
->Umleitung zum Benutzer-frame
-> links: Benutzer begrüßen session_start()
->echo "<p>Hallo, {$_SESSION["user"]}";
sonst
Umleitung zum frame mit Benutzer-Login nach jedem if sowie eine Fehlermeldung, wenn session nicht zustande kommt.

Die Warnung wird oberhalb der Begrüßung ausgegeben! Dann läuft das Script normal weiter, begrüßt den „richtig“ ermittelten user und bietet auch die zum user gehörenden Links korrekt an!
Und da bin ich mit meinem Latein am Ende, weil ich nicht verstehe, was die Warnung mir einzureden versucht! Ein echo oder print vor session_start() findet nicht statt! Ich habe nicht mal einen Ansatz von Idee, wo ich suchen könnte....

eine etwas betreten dreinschauende Evelin

11

(7 Antworten, geschrieben in PHP)

Hi Jungs,

Ein Mangel an Fehlermeldungen scheint bei meinen Scripten einfach nicht auftreten zu wollen:

Warning: Cannot send session cache limiter - headers already sent (output started at C:Programme…

Einstellung in der php.ini:    session.cache_limiter = nocache

 
  // Zeit festlegen: ( 60sec*60 )
  ini_set("session.gc_maxlifetime","3600");
  
  // trans-sid aktivieren 
  ini_set("session.use_trans_sid", "1");
  
  // kein cookie
  ini_set("session.use_cookies",   "0");
  
  // Name der session  
  session_name("DOM");
  session_start();
 

Bei session_start() kommt die oben beschriebene Warnung. Jetzt brauche ich den Rat eines Spezialisten, besser noch jemand, der mir den Zusammenhange nahe bringt oder mir wenigstens einen Link für mein Problem zur Verfügung stellen kann.

Außerdem habe ich durch das Ausprobieren meines Login-Scripts bereits eine stattliche Sammlung an session-Dateien, die ich doch auch irgend wie wieder loswerden sollte. Ich habe mir die  Funktion destroy() von Basti's session-class angeschaut und werde nicht so recht schlau daraus:

In welchen Fällen ist denn eine Zerstörung der session unbedingt(!!) vorzusehen! Beim Logout sicher, aber wann noch! Mir fehlen da einfach ein paar Monate Erfahrung.

Vergesst nicht: heute ist Freitag!!

dankbar für jede Hilfe grüßt Evelin

PS: an Basti

Hi Basti,

Glückwunsch und symbolisch einen Blumenstrauß zum 1000. Beitrag!

Bleib weiter so kritisch und hilfsbereit (nicht ganz uneigennützig für mich)...

12

(10 Antworten, geschrieben in PHP)

Hi Basti,

Du hast gewonnen:
Ich setze mich jetzt an die verhassten sessions und melde mich in ein paar Jahren, dann wahrscheinlich als alte grauhaarige Frau, an dieser Stelle wieder, um mit meinem Erfolg anzugeben.
Bis dahin hoffe ich weiterhin auf Eure tatkräftige Unterstützung nun zum Thema session...

liebe Grüße von Evelin

13

(10 Antworten, geschrieben in PHP)

Hi,

Euren Kommentaren nach zu urteilen scheint das Problem lösbar zu sein. Das freut mich erst einmal...
Nun war ich auch nicht faul und habe ein bisschen rumprobiert:

Vorerst verstecke ich die Zugangsvariablen in <input type= ‚hidden’ ....> - Feldern und schicke diese Werte per Button auf die Reise zum rechten frame mit dem Ergebnis, dass sich das frameset als eine Art Flaschenhals betätigt. Ich habe bei Mamphils Lösungsansatz gesehen, dass er die Variablen an die Datei anhängt – oder irre ich mich da gewaltig??
Wenn ich mich nicht irre, so wäre das ja evtl. ein gangbarer Weg, bei einem erfolgreichen Zugang die Variablen so durch diesen Flaschenhals zu bekommen – oder??
Die Seitenanordnung wäre dann:

Index-> frameset mit Navigationsleiste für den Zugang links und eine Startseite als Hauptframe rechts

Erfolgloser Zugang:
frameset wird neu gestartet
Erfolgreicher Zugang:
ein weiteres frameset wird gestartet (der oben beschriebene Engpass) und wenn ich da die Zugangsvariablen durchbekommen könnte wählt das Programm an Hand der Benutzerdaten die zugehörige Navigationsleiste(bzw. deren Links) aus.

Da ich aber diese Daten bisher nicht ohne <form... übergeben kann sitze ich hier erst einmal ziemlich ratlos herum.

 
 <frame src="verweise.htm<?php 
 
 if (isset($variable1) && isset($variable2)) 
 
   echo "?variable1=$variable1&variable2=$variable2"; ?>" name="Navigation">
 
 

Könnte mir jemand erklären, was nach der if-Abfrage mit der Datenquelle passiert oder vielleicht habt Ihr einen Link, wo das erklärt wird?

Wenn es so ist, wie ich hoffe, dann könnte ich mir meine bisherigen Verrenkungen (der Benutzer muss ständig Buttons betätigen, um mir meine Variablen durch die Scripte zu transportieren) in Zukunft sparen.

erwertungsfroh grüßt Evelin

14

(10 Antworten, geschrieben in PHP)

Hi Memphil,

ich probiere es aus, aber was wird dann aus meinen Benutzer- ,Passwort- und Buttonvariablen, die ich ja zumindest im rechten frame brauche, um den Zugang auch zu prüfen. Kann man dann nicht vom rechten frame aus, bei korrekten Zugangsdaten natürlich, links die zum Benutzer zugehörige Navigationsleiste starten?? – oder ist das ganz abwegig?!

Ich lausche auch bei Dir auf Antwort

Grüße von Evelin

15

(10 Antworten, geschrieben in PHP)

Hi tink,

schön, dass Du so schnell antwortest.
Bevor ich mich aber auf Deine Antwort einlasse habe ich noch zwei Nachfragen:
1.
Findet JavaScript nicht immer! auf der Client-Seite statt oder bin ich da etwas daneben? Wenn es so sein sollte, habe ich dann nicht ein Problem mit meinen reinen php-Seiten?
2.
Dein PS macht mich neugierig!  Wie kann ich denn den Sinn von framesets durch php ersetzen?? Das ist mir völlig schleierhaft!

Ich lausche auf Antwort

Grüße von Evelin

16

(10 Antworten, geschrieben in PHP)

Hi,

ich stelle mal eine Frage, von der ich nicht unbedingt überzeugt bin, dass ich sie auch richtig stelle!

Doch zuerst die Situation:

In einem  vertikalen frameset befindet sich links die Navigationsleiste mit dem Benutzer-Login. Rechts werden die Aktionen der Links der Navigationsleiste angezeigt. Wenn ich nun links im frame die richtige Benutzerkennung eingegeben habe, so erscheinen rechts im frame ordnungsgemäß die Seiten, welche der Benutzer bearbeiten darf (das ist zwar noch nicht ganz nach meinen Vorstellungen, aber da frage ich später evtl. noch was nach).  Links bleibt momentan noch der Benutzer-Login stehen, da ich ja die Zugangsdaten des Login-Formulars im linken frame in den rechten frame zur Auswertung schicke.
Nun soll aber nach dem erfolgreichen Login der Benutzer eine benutzerdefinierte Navigationsleiste angeboten bekommen. Darauf befinden sich u.a. der Logout sowie weitere Links.

Nun meine Frage:

Gibt es eine Möglichkeit, die Button-Variable in der frame-Seite rechts und links abzufragen, um dann im linken frame die benutzerdefinierte Navigationsleiste anzeigen zu können?

Muster:

http://www40.gmx.net/de/cgi/home?LANG=de

in Erwartung guter Ratschläge

grüßt freundlich Evelin

17

(6 Antworten, geschrieben in PHP)

Hi Basti,

ich habe seeehr schlecht Gründe, mich erst heute für Deine code-Verbesserung zu bedanken!

Ich konnte 2 volle Tage lang einen Datensatz nicht updaten, weil ich das einfache Hochkomma im $query vergessen hatte!!!!!!!
Ich glaube, ich bin damit bestraft genug...

Hinzu kamen 3 volle Tage mysql-Rechte verwalten (wird wohl mein Stechenpferd?!).

Nun habe ich die Suche abgeschlossen und kann Dir bestätigen, dass Dein Lösungsangebot um Ellen einfacher ist.

Ich bedanke mich dafür und hoffe, Du bleibst so unerbittlich kritisch, wie bis her!

Auch bei Dir, tink, bedanke ich mich für die Unterstützung!

Trotz miesen Wetters grüßt eine

gutgelaunte Evelin

18

(5 Antworten, geschrieben in System)

Hi,

ich bin jetzt genau an der Stelle, wo Senior_Mitglied SeleCTor bereits am 01.03.2002 mit seinem Beitrag  Re: abgespeichertes password() auslesen angelangt war. Leider hatte er (der Beitrag d.R.) ein zu schnelles Ende.

Nun ist ja eine lange Zeit seit dem vergangen und vielleicht hat jemand doch eine Lösung parat!?
In meinem Fall geht es jedoch um den eingeschränkten Zugriff auf Datenbanken.

Nach einigen rumprobieren ist es mir gelungen, den Zugriff auf die DB mysql für Nutzer „Evelin“ völlig zu unterbinden und den Zugriff auf die DB test zu erlauben. Nach dem ich phpMyAdmin komplett mit dieser Einschränkung in den Ordner (sagen wir mal einfach: Nutzer) auf den Server kopiert habe, zeigt die index.php-Datei von phpMyAdmin die DB mysql auch tatsächlich nicht mehr an. Die DB test hingegen wird angezeigt. Das ist auch alles so gewollt!!

Wenn also phpMyAdmin über die Nutzerkennung ([localhost],[evelin],passwort[eva]) an die Rechte rankommt, so muss es also auch eine Möglichkeit geben, das Passwort auszulesen!
Nun passiert beim Nutzer „Evelin“ aber erst einmal folgendes:
Das Passwort eva in der md5-Verschlüsselung in der DB mysql Tabelle user abgespeichert lautet: 14bd76e02198410c
Das Passwort eva in der md5-Verschlüsselung im Aufruf der Verbindung zum mysql-Server
(
$pw = md5(„eva“);
$con=@mysql_pconnect(...,...,$pw); 
print_r($pw);
)
lautet: 14bd76e02198410c078ab65227ea0794
Es ist also nicht die selbe Verschlüsselung, sondern es wird 078ab65227ea0794 „angehängt“!! Demzufolge kommt auch keine Verbindung zu stande, denke ich - oder gibt es noch andere Möglichkeiten???

Jetzt zu meiner Frage:

Wie setzt man unter Berücksichtigung der Zugriffsrechte folgenden code ein:

Eingabe Username => $nn;        z.B. Evelin
Eingabe Passwort  => $pw;        z.B. eva

[code]

$host = „localhost“;
$username = $nn;
$pwd = md5($pw);

$con=@mysql_pconnect($host,$username,$pw); 

[code]

um die DB’en anzuzeigen, auf die tatsächlich Zugriff besteht. Ich hätte gern eine globale Kennung zustande gebracht. Aber der „geordnete“ Zugang wird wegen des „falschen“ Passwortes verwehrt.

Ich weiß jetzt nicht, ob ich mit meiner Frage hier richtig bin. Was mysql anbelangt, so hoffe ich auf eine Antwort zur „richtigen“ Anmeldung auf dem mysql-Server und wie ich die Kennungsdaten zum Weiterbenutzen auslesen kann.
Wegen des php-Teils würde ich dann das Zimmer wechseln, aber vielleicht geht auch beides hier.

freundliche Grüße von Evelin

19

(6 Antworten, geschrieben in PHP)

Hi tink,

mysql_data_seek habe ich genommen, weil diese Funktion automatisch vor die Zeile „springt“, wo der von mir gesuchte Datensatz sich befindet und mit mysql_fetch_row wird auf den nächst folgenden datensatz zugegriffen. Ich fand es genial (von den php-Machern), dass man nicht per while-Schleife (die ja auch Zeit kostet) die DB-Tabelle durchläuft. Ein Test mit 10 000 Werten könnte Vor- und/oder Nachteile herausfinden. Definitiv ist ja aber der gesuchte Wert auch gefunden, mit while oder mit mysql_data_seek! Soweit ist auch alles in Ordnung – denke ich.

Durch die Zuweisung $zeile = $zeilealt; werden die Werte der linken Tabelle(Formular) auch ordnungsgemäß in die rechte Tabelle(Formular) übernommen. In der rechten Tabelle kann der Nutzer jetzt seine Änderungen vornehmen. Diese Änderungen befinden sich nun in $zeile. Dort, wo keine Änderungen vorgenommen wurden hat $zeile noch den Wert von $zeilealt.
Und jetzt beginnt das Mysterium:
Hat der Nutzer $zeile geändert, so wird der Wert von $zeilealt NICHT!! überschrieben, sondern das array $zeile erhält den Wert von $zeilealt und wird um den aktuellen Wert von $zeile verlängert. Das habe ich dann mit print_r($zeile), feststellen müssen. Da ich aber nur den aktuellen Wert und! vor allem den index des array  $zeile zum Ändern in der Tabelle(mysql) brauche, darf das array nicht verlängert werden. Es soll zum Beispiel der index-Wert [2] in $zeilealt von 8 auf 10 verändert werden. Der eigentlich dazugehörende index-Wert [2] in $zeile ist aber Holger. Ich habe mir in der Zwischenzeit so geholfen, dass ich die Feldnamen als Sortierkriterium mitnehme und so funktioniert es dann auch.

Aber normal ist das ja sicher nicht, oder??

freundlich güßt Evelin

20

(6 Antworten, geschrieben in PHP)

Hi tink,

bei den Template’s bin ich voll dabei!  Und ich denke, sie halten, was sie versprechen. Danke dafür... ich probier ’s demnächst!
Nun zur Frage:

 //Datensaetze ermitteln
 $res = mysql_select_db($dbname);
 $query = "SELECT * FROM $tabname";
 $result = mysql_query ($query) or die ("Anfrage fehlgeschlagen");
 // holen der Zeile
 mysql_data_seek($result,$zaehler);
 $zeilealt = mysql_fetch_row($result);
 

Das stammt aus einem anderen Quelltext, der mit require in den Hauptquelltext eingebunden wird und auch funktioniert.
Die Tabellen werden auch mit require in das Hauptformular geholt. Da ich auf Benutzereingaben reagiere, schicke ich nach jeder Betätigung eines Button und/oder einer Auswahl das Formular an das Hauptformular. Alles, was ich an Variablen brauche schicke ich mit input-Feldern mit(u.a. mit input-‚hidden’-Feldern durch method=’POST’). So zum Beispiel den Inhalt der Tabelle der Datenbank aus $zeilealt. $zeilealt brauche ich dann, um den Datensatz wiederzufinden, wenn er in der Tabelle von mysql geändert werden soll. Im Hauptquelltext frage ich den Button/die Auswahl ab und hole den Datensatz(require ‚update.inc.php’;), der zu $zeilealt passt. Im Moment versuche ich den neuen Datensatz in die mysql-Tabelle einzufügen. Natürlich wird erst einmal die zu ändernde Datensatzspalte gleich für die ganze zugehörige mysql-Tabellen-Spalte geändert. Der Kummer hört nicht auf...
Die Übersendung der Variablen mit POST (wie oben beschrieben) ist die einzige Möglichkeit, die ich momentan kenne.
Also ich bin in Anbetracht der sehr weit fortgeschrittenen Zeit nicht abgeneigt, eine bessere Strategie zu erlernen.

Wobei ich bei meiner Frage eigentlich wissen wollte, warum der Nutzer zwar $zeile überschreibt, aber der überschriebene Wert an die ursprünglich in $zeile stehenden Werte angehängt wird??

vergesst nicht! Der Freitag ist fast gelaufen...

liebe Grüße von Evelin

21

(6 Antworten, geschrieben in PHP)

Hi,

das mich die arrays so schnell nicht loslassen habe ich schon befürchtet!
Zuerst der Quellcode:

     //Liste der Felder der aktive Tabelle
     $fdresult = mysql_list_fields($dbname,$tabname);
     //Anzahl der Felder
     $numfds = mysql_num_fields($fdresult);
     echo "<table border='0' width='100%'><tr>";
     echo "<td><table border='0'>";
     //Schleife ueber alle Felder
     for($i=0;$i<$numfds;$i=$i+1)
     {
         $fdname = mysql_field_name($fdresult,$i);
         
         echo "<tr><td bgcolor = '#DDDDFF'>$fdname   ";
         echo "</td><td><input type='hidden' name='zeilealt[]' value=$zeilealt[$i]>$zeilealt[$i]</td>";        
         $zeile[$i] = $zeilealt[$i];
     }  
     echo "</tr></table></td><td>";
     echo "<table border='0'>";
     //Schleife ueber alle Felder
     for($i=0;$i<$numfds;$i=$i+1)
     {
         $fdname = mysql_field_name($fdresult,$i);
         
         echo "<tr><td bgcolor = '#DDDDFF'>$fdname   ";
         echo "</td><td><input type='hidden' name='zeile[]' value=$zeile[$i]><input type='text' name='zeile[]' value=$zeile[$i]></td>";        
     }  
     echo "</tr></table>";
     echo "</td></tr></table><p><p>";
 

und die Ausgabe mit print_r($variable) nach der Weiterverarbeitung:

$zeile
Array ( [0] => Münzer [1] => Münzer [2] => Holger [3] => Holger [4] => 8 [5] => 10 )
$zeilealt
Array ( [0] => Münzer [1] => Holger [2] => 8 )

Ich glaube, der Fachmann sieht schon mein Problem:

Im array $zeile schleppe ich, aus für mich nicht erkennbaren Gründen, die Werte aus dem ehemaligen array $zeilealt mit!
Das ist ja auch so gewollt, bis zu dem Zeitpunkt, wo der Benutzer das array $zeilealt  im Formular überschreibt. Bei der von mir angewendeten Technik werden dem  array $zeilealt die neuen Eingaben angehängt und nicht die alten Eingaben überschrieben. Nun ist es ja recht fein, schon fast eine verkettete Liste zu haben und obendrein auch noch die richtigen Werte an der richtigen Stelle. Das war aber nicht das Ziel!

Wenn Ihr eine einfache Lösung für das Dilemma habt, so schreibt an eine

unwissende Evelin

22

(14 Antworten, geschrieben in PHP)

hi tink,

zu a) ich kann Dir keine Antwort zukommen lassen! Du bist bei devshare unbekannt!?
         Kannst Du mir mal per Mail Deine Adresse zukommen lassen? Und wieso hast Du
         MEINE??????????????
zu b) danke für den Mutmacher, aber so wie ich es sehe bin ich doch noch weit davon
         entfernt... , aber verzweifelt bin ich nicht, seit ich weiß, wo ich Hilfe her bekomme!

ich warte auf Nachricht

Grüße von Evelin

23

(14 Antworten, geschrieben in PHP)

Hi tink,
hi Basti,
danke für die Antworten, auch wenn es nicht so aussieht, Ihr habt mir sehr geholfen! Ich habe auf Grund der von Euch gegebenen Hinweise die Rechteverwaltung fast komplett in php umgesetzt. Ein paar Hacken und Ösen gibt es noch - aber es sieht trotzdem schon mal ganz gut aus!!

für Basti:
Bitte nicht böse sein, dass ich mich etwas zu schwammig ausgedrückt habe. Mein allgemeines Gefasel hatte nur den einen(!!) Sinn: wiederverwendbare Skripte zu schreiben. Dabei versuche ich, sich permanent wiederholende Schreib- und Denkarbeit zu vermeiden (ich habe mal gehört, dass Programmierer seeehr faul sein sollen). Es ging also darum, die sich anbietenden Varianten einer Passwortabfrage auf ihre Tauglichkeit zu checken und unter vorläufiger Vermeidung von sessions trotzdem eine ausreichende Sicherheit bieten zu können.
Wie tink aber auch richtig schreibt, so gehört das Thema wohl in’s Security-Forum.

Verzweifelt also nicht, ich habe immer noch ein dickes A wie Anfänger auf dem Rücken!!

Und das Ihr mir auch glaubt, dass Ihr Euch nicht um sonst eingesetzt habt:

Ich stürze mich jetzt auf den völlig neuen „Begriff“ https...

Viele liebe Grüße an alle gestressten php-Schreiblinge

Evelin

24

(14 Antworten, geschrieben in PHP)

Hi tink,
das sehe ich auch ein, aber wenn es viele gute Gründe gibt, die Datenbank bei einem Provider zu mieten (und damit auch sicherheitsrelevante Daten in fremde Hände zu geben), dann gibt es auch mindestens genauso viel gute Gründe, apache und MySQL firmenintern zu installieren und den Zugang wie oben beschrieben einzurichten. Die Frage ist nur, wenn ich nicht zuviel nerve, ob ich das auch als „sicher“ verkaufen kann??
Und eine ungenierte Frage gleich noch hinterher:
Wie geht eigentlich devshare mit dem Passwort etc. um, oder ist das geheim?

Hi Basti,
Euer beider selbstloser Einsatz sei hier mal ausdrücklich gelobt und was die Session’s anbelangt, werde ich mich bestimmt zu gegebener Zeit mit Euch beraten – wenn Ihr dann noch genug Nerven habt...
Also danke auch für die vermeintlichen "Randinformationen".
Mein Vorhaben -  wie oben beschrieben - geht in die Richtung, dass, wenn es als sicher von Euch „eingestuft“ wird, ich dem Kunden empfehle, den zur Zeit besten Sicherheitsstandard durch apache und MySQL im eigenen Hause zu erreichen und konsequent (auch physikalisch) sich vom Rest der Welt zu trennen. Ich denke, dass dies nicht nur eine preiswerte Lösung ist, sondern auch ein eventueller Übeltäter oder sein Helfershelfer in den eigenen Reihen zu suchen ist. Das dürfte sogar größere Pessimisten überzeugen, als ich es im Moment bin.

ich wünsche vorerst einen schönen Abend

Evelin

25

(14 Antworten, geschrieben in PHP)

Hi Basti,
vielen Dank für den Auszug aus Ratschiller und Gerken. Ich habe die Bedenken verstanden und werde sie beachten. Dazu muss ich mich aber erst in apache besser einarbeiten...
Aber ich habe nicht schlecht gestaunt, als ich bei der Anwendung von .htaccess einen gewissen Wiedererkennungseffekt verspürt habe: mein Zugang zu meinem „persönlichen Büro“ an der Uni sieht genauso aus!! Da scheint man nicht abgeneigt zu sein, sicherheitsrelevante Daten so zu schützen. Allerdings ist der Hostname eingeschränkt (weiter unten dazu mehr?!). Leider werde ich sicher keine Antwort auf eine Anfrage beim zuständigen Admin bekommen. Erst recht nicht über die dahinter liegenden Sicherheitsmaßnahmen.
zu MySQL:
Die Rechteverwaltung funktioniert im Prinzip so, wie Du sie beschreibst. Aber ich brauche mir nicht extra ein php-Skript auszudenken. Die Rechtevergabe ist Bestandteil von MySQL und ich habe sie nach kurzer Zeit ebenfalls verstanden. Ich habe deshalb für den als Administrator angemeldeten Benutzer eine graphische Benutzerberfläche zusammengebastelt, die nach dem Prinzip des MySQL-Monitors, aber im Gegensatz dazu durch Auswahl der gewünschten Berechtigung in einer Checkbox, funktioniert. Dazu biete ich Hilfe in einem extra frameset für jeden relevanten Administrationsschritt an.
Du schreibst, ich soll mich etwas genauer ausdrücken:

Ich habe vor,  (vorerst!) die Benutzerrechtevergabe von MySQL zu benutzen. Das sieht dann in Kurzform so aus (soweit, wie ich es grob vereinfacht darstellen kann):
Es sind fünf hierarchisch angeordnete Tabellen in der DB(!!) mysql vorhanden.  In der Tabelle user erhält der Admin alle oder fast alle Berechtigungen und in der Tabelle db die Berechtigung auf die Tabelle user. Er kann also nicht auf die Datenbanken, Tabellen und Tabelleninhalte von noch anzulegenden Benutzern zugreifen.  Wie ich das sperre weiß ich noch nicht genau. Der einfache Benutzer erhält in der Tabelle user keine Rechte, ihm wird in der Tabelle db „seine DB“ mit den notwendigen Rechten zugewiesen (evtl. ebenfalls keine) und in „seiner“ Tabelle wird die Feinabstimmung der Berechtigungen bis hin zur einzelnen Zeile/Spalte vorgenommen.
Die Anmeldung erfolgt über den festzulegenden „host“, den Zugangsnamen und das Zugangspasswort. Stimmen alle drei Einträge überein, so ist der Benutzer angemeldet. „host lässt sich dabei z.B. auf  eine firmeninterne IP-Adresse oder einen Klarnamen beschränken. Hat der Admin sich in der Firma angemeldet, so besitzt er z.B. alle Rechte. Ist im „host“-Eintrag auch der Platzhalter „%“zugelassen, so ist eine Anmeldung von ausserhalb möglich. Hier lege ich dann für diesen Spezialfall die Zugriffsrechte für die admin-Tabelle user auf nicht erteilt und verhindere den Zugriff auf die DB user durch einen entsprechenden Eintrag in der Tabelle db. Es kann sich also der Admin, wenn er sich von außerhalb anmeldet mysql nicht administrieren.

Zwischenfrage:
Kann es sein, dass sich das Programm phpMyAdmin x.y.z über den Platzhalter „%“ oder  „localhost“ oder von MySQL bereits eingetragene Kennung den Zugang zu den einzelnen Datenbanken verschafft? Wenn ja, dann ist es sicher sinnvoll, diese Einträge in der Tabelle user zu entfernen. Wenn nein, welchen Weg benutzt das Programm dann?

Die Einteilung in Gruppen erschwert dabei meiner Auffassung nach die starke Differenzierung der Zuordnung von Rechten.  Aber wenn es ein Bedarf an Gruppenrechten gibt, so können sich ja alle Gruppenteilnehmer z.B. über einen, an die firmeninterne Struktur angepassten Abteilungs-Benutzer anmelden.

Ich hoffe, ich habe jetzt niemanden gelangweilt und wenn es eine professionelle Einschätzung dieses Konzeptes von MySQL gibt, so wäre ich für eine Nachricht dankbar.

Es ist auch schon mal das Stichwort „Session“ gefallen. Dazu habe ich ein noch etwas zwiespältiges Verhältnis. Der Grund ist einfach erklärt: ich habe als ersten Schritt in der für mich neuen Sprache php ein Session-Skript abgeschrieben und ausprobiert. Natürlich bin ich kläglich gescheitert (nicht lachen...!) und habe mich etwas frustriert an den Autor gewandt. Der ließ mich mit der Bemerkung sitzen, dass sein Skript bei ihm ganz toll funktioniert.
In zwischen muss ich aber zu seiner Rechtfertigung schreiben, dass ich mich wohl auch wie ein Landei benommen habe...
Und so habe ich das erst einmal verschoben (ich werde erst die bereits erschienenen Beiträge durchforsten) und versuche mich in die Grundlagen einzuarbeiten.

Die von Dir gestellten Fragen an tink sind sehr interessant und so bin auch ich auf die Antworten gespannt

freundlichst grüßt
Evelin