Autor Beitrag
JungerIslaender
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: So 30.08.09 23:14 
Warum funktioniert das hier:
ausblenden Quelltext
1:
2:
3:
  session_start();
  session_register('username');
        $username = $_POST['username'];


das hier aber nicht:

ausblenden Quelltext
1:
2:
3:
4:
  session_start();
  session_register('useremail');
  $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'";
  $useremail = mysql_query($abfrage);


Moderiert von user profile iconNarses: Titel geändert, war: "Wo ist der Fehler(2)??? php".
Moderiert von user profile iconChristian S.: Topic aus Off Topic verschoben am Mo 31.08.2009 um 20:20
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 30.08.09 23:47 
Schau mal genau hin ...

Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt?

Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Mo 31.08.09 15:55 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal genau hin ...

Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt?

Wie mache ich das??


user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:

Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen.


Die brauche ich doch nur wenn der user eine Eingabe macht oder die Abfrage verändern kann. Wie soll er das machen wenns nur von mir im Quelltext benutzt wird.

Ich finde den Fehler einfach nicht. Wenn ich es wüsste hätte ich diesen für einen Menschen der sich mit php gut auskennt lächerlichen code, nicht gepostet.


Zuletzt bearbeitet von JungerIslaender am Mo 31.08.09 15:58, insgesamt 1-mal bearbeitet
andras
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 460

Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
BeitragVerfasst: Mo 31.08.09 17:42 
user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Warum funktioniert das hier:

ausblenden Quelltext
1:
2:
3:
4:
  session_start();
  session_register('useremail');
  $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'";
  $useremail = mysql_query($abfrage);


Weil deine Variable im string steht und somit nicht der Wert der Variable genommen wird sondern der Name, aber ganz sicher bin ich mir da nicht...
Hätte das ganze so gelöst:
ausblenden Quelltext
1:
2:
3:
4:
  session_start();
  session_register('useremail');
  $abfrage = "SELECT email FROM konten WHERE user LIKE ".$username;
  $useremail = mysql_query($abfrage);
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 31.08.09 18:53 
user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal genau hin ...

Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt?

Wie mache ich das??

php.net/error_reporting

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:

Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen.


Die brauche ich doch nur wenn der user eine Eingabe macht oder die Abfrage verändern kann. Wie soll er das machen wenns nur von mir im Quelltext benutzt wird.

Wird er auch ... und der Benutzer hat Einfluss darauf ...

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Ich finde den Fehler einfach nicht. Wenn ich es wüsste hätte ich diesen für einen Menschen der sich mit php gut auskennt lächerlichen code, nicht gepostet.

hmmm, War das bei "PHP in 14 Tagen" im Vorwort oder der Einleitung schon behandelt??? Oder fällt das unter Esotherische Programmierweise, weil dann würde ich Sprachen wie Whitespace empfehlen - dann sieht wenigstens keiner den Code. ;-)

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Warum funktioniert das hier:

ausblenden Quelltext
1:
2:
3:
4:
  session_start(); //Starte eine Session, oder nehme die aktuelle wieder auf
  session_register('useremail'); //Registriere die Variable $username in der Session (IIRC)
  $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'"; //Greife auf die undefinierte Variable $username zu
  $useremail = mysql_query($abfrage);
//Führe eine Abfrage nach einem leeren Username durch


Tut doch, was du ihm gesagt hast ...

Ich empfehle hier mal den vollständigen Verzicht auf die Nutzung von RegisterGlobals-Magic, oder anderen PHP-Convenience-Funktionen; die reißen mehr Probleme, als sie beheben ... $_SESSION ist hier die Antwort. Dann kann übrigens auch das session_register wegfallen.

user profile iconandras hat folgendes geschrieben Zum zitierten Posting springen:
Weil deine Variable im string steht und somit nicht der Wert der Variable genommen wird sondern der Name, aber ganz sicher bin ich mir da nicht...

Ach die Variable $username wird schon ausgewertet ... die ist nur undefiniert, weil RegisterGlobals auf ordentlich konfigurierten Servern abgeschlatet ist und damit die Session nicht automatisch entpackt wird.

user profile iconandras hat folgendes geschrieben Zum zitierten Posting springen:
Hätte das ganze so gelöst:
ausblenden Quelltext
1:
2:
3:
4:
  session_start();
  session_register('useremail');
  $abfrage = "SELECT email FROM konten WHERE user LIKE ".$username;
  $useremail = mysql_query($abfrage);

xkcd.com/327/

Mal abgesehen davon, dass das so auch nicht gehen wird ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian V.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 311

Win Xp Prof
Turbo Delphi 2005
BeitragVerfasst: Mo 31.08.09 20:33 
ausblenden Quelltext
1:
$useremail = mysql_query($abfrage);					


ist vermutlich auch nicht was du willst...

php.net/mysql_query

Moderiert von user profile iconKlabautermann: Code- und Url-Tags hinzugefügt

_________________
Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
jcp
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 24.10.09 19:23 
ausblenden Quelltext
1:
session_register('useremail');					

ist veraltet und sollte nicht mehr genutzt werden!

ausblenden Quelltext
1:
2:
3:
4:
5:
session_start();
global $useremail = false;
if (isset($_SESSION['useremail'])){
    $useremail = $_SESSION['useremail'];
}


Moderiert von user profile iconKlabautermann: Code-Tags hinzugefügt.
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Mi 28.10.09 23:09 
Cool Danke werd ich sofort ausprobieren.
jcp
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 29.10.09 12:55 
Hidiho,
ein Tip möchte ich Dir noch geben. Du solltest niemals in deinen Quelltexten $_POST, $_GET, $_SESSION oder $_SERVER verwenden. Stattdessen solltest Du gegen Schnittstellen programmieren. Ich habe für Dich hier meine Session Klassen vereinfacht als eine Klasse dargestellt, vielleicht kannste damit was anfangen und weiter ausbauen, viel Glück!

ausblenden volle Höhe Quelltext
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:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
    // session temp path
    //ini_set('seesion.save_path', "n;/temp");

    // session no hang on URLs
    ini_set('seesion.use_trans_sid', "0");

    // sesion use only cookies
    ini_set('seesion.use_only_cookies', "0");
    ini_set('seesion.use_cookies', "1");

    // session no autostart
    ini_set('seesion.auto_start', "0");

    // session trash leeren ca. aller 100 Aufrufe
    //ini_set('session.gc_probability', "1");
    //ini_set('session.gc_divisor', "100");
  
class jcp_session
{

  static $expires = 120;
  private $crypt;
  private $session;
  private $userexpires;
  private $session_name;


  public function __construct( $name = false, $time = false, $crypt = null )
  {
    $this->session_name = $name;
    $this->userexpires  = $time;
    $this->crypt        = $crypt; 
    
    $this->session = array();

        if ($this->session_name){
            session_name( $this->session_name );
        }
        session_start();

    if (is_array($_SESSION) && !empty($_SESSION) && isset($_SESSION['verfall'])){

      if ($this->check()){
        $this->session = $_SESSION;
        $this->session['verfall'] = time();
        $_SESSION = array();
      }
    }

  }

  public function save()
    {
    $_SESSION = $this->session;
    return true;
  }

  public function add( $var, $value)
  {
    if ( ! is_string( $var )){
      return false;
    }
    $this->_add($var, $value);
    return true;
  }

  public function get( $offset )
  {
    if ( is_string( $offset )){
      return $this->_get($offset);
    }

    if (!is_array($offset) || empty( $offset )){
      return null;
    }

    $values = array();
    foreach ( $offset as $index){
      $values[$index] = $this->_get($index);
    }

    if ( empty($values)){
      return null;
    }

    return $values;
  }

  public function delete( $offset = null )
  {
    if ( is_null( $offset )){
      return $this->_delete();
    }
    elseif (is_string($offset)) {
      return $this->_del( $offset );
    }
    else {
      return false;
    }
  }

  private function _del( $offset )
  {
    if ( isset( $this->session[$offset] )){
      unset($this->session[$offset]);
    }
    return true;
  }

  private function _delete()
  {
    $_SESSION = array();
    $this->session = array();
        @setcookie(session_name(), '', 0, "/");
    session_destroy();
    return true;
  }

  private function _get( $offset )
  {
    if ( isset( $this->session[$offset] )){
      if (!is_null($this->crypt)){
        return $this->crypt->encrypt($this->session[$offset]);
      }
      return $this->session[$offset];
    }
    return null;
  }

  private function _add( $varname, $value )
  {
    if (!is_null($this->crypt)){
      $value = $this->crypt->encrypt($value);
    }
    $this->session['verfall'] = time();
    $this->session[$varname] = $value;
  }

  private function check()
  {
    $zeit_old = $_SESSION['verfall'];
    if ($this->userexpires){
      $zeit_new = strtotime( '-'.$this->userexpires.' minutes');
    } else {
      $zeit_new = strtotime( '-'.self::$expires.' minutes');
    }


    if ( $zeit_new < $zeit_old ) {
      return true;
    }
    else {
      $this->_delete();
      if ($this->session_name){
        session_name( $this->session_name );
      }
      session_start();
      session_regenerate_id(true);
            
      return false;
    }
  }

}// Class End


ausblenden volle Höhe Quelltext
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:
inferface jcp_crypt_interface 
{
  protected function encrypt( $plaintext );
  protected function decrypt( $crypttext );
}
class jcp_crypt implements jcp_crypt_interface
{
  static $cypher = 'blowfish';
  static $mode   = 'cfb';
  static $key    = 'JCP-Nice_27985_GirlsInBikiniOnMyPrivateBeach';

  protected function encrypt( $plaintext )
  {
    $td = mcrypt_module_open(self::$cypher, '', self::$mode, '');
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    mcrypt_generic_init($td, self::$key, $iv);
    $crypttext = mcrypt_generic($td, $plaintext);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return $iv.$crypttext;
  }

  protected function decrypt( $crypttext )
  {
    $td = mcrypt_module_open(self::$cypher, '', self::$mode, '');
    $ivsze = mcrypt_enc_get_iv_size($td);
    $iv = substr($crypttext,0,$ivsze);
    $crypttext = substr($crypttext, $ivsze);
    $plaintext = '';
    if ($iv){
      mcrypt_generic_init($td, self::$key, $iv);
      $plaintext = mdecrypt_generic($td,$crypttext);
      mcrypt_generic_deinit($td);
    }
    mcrypt_module_close($td);
    return $plaintext;
  }

} //Class End


Aufruf
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
$session = new jcp_session('my_session',7900, new jcp_crypt());  
//hinzufügen
$session->add('var_a','mama');
$session->add('var_b','papa');

//auslesen
$var_a = $sesion->get('var_a');
$var_b = $sesion->get('var_b');

//löschen
$session->delete('var_a');
$session->delete('var_b');

//alle löschen
$session->delete();

//session am ende zurück schreiben
$session->save();