Seite 1 von 1

e-mail als freiwillige Angabe funktioniert nicht vollständig

Verfasst: 25.07.2005 13:59
von Claudi
Hallo,

ich habe schon im Forum nach Beiträgen zu diesem Thema gesucht und auch einiges dazu gefunden.

Dank dieser Beiträge habe ich folgendes in der usercp_register.php verändert:

Code: Alles auswählen

if ( empty($username) || empty($new_password) || empty($password_confirm) || empty($email) )
habe ich durch

Code: Alles auswählen

if ( empty($username) || empty($new_password) || empty($password_confirm))
ersetzt und

Code: Alles auswählen

if ( $email != $userdata['user_email'] || $mode == 'register' )
	{
		$result = validate_email($email);
		if ( $result['error'] )
		{
			$email = $userdata['user_email'];

			$error = TRUE;
			$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
		}
habe ich ganz gelöscht.

Es geht auch soweit alles. Aber ein Problem gibt es:
Wenn ein User sein Profil verändern möchte, erscheint folgene Fehlermeldung:
Could not update users table

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' user_aim = '', user_yim = '', user_msnm = '', user_attachsig =

UPDATE phpbb_users SET user_email = '', user_icq = '', user_website = '', user_occ = '', user_from = '', user_interests = '', user_sig = '', user_sig_bbcode_uid = '', user_viewemail = , user_aim = '', user_yim = '', user_msnm = '', user_attachsig = , user_allowsmile = , user_allowhtml = , user_allowbbcode = , user_allow_viewonline = , user_notify = , user_notify_pm = , user_popup_pm = , user_timezone = , user_dateformat = '', user_lang = '', user_style = , user_active = 1, user_actkey = '' WHERE user_id =

Line : 513
File : usercp_register.php
Was muss ich anders machen, damit dieser Fehler nicht mehr auftritt?

Danke im Voraus

Claudi

Re: e-mail als freiwillige Angabe funktioniert nicht vollstä

Verfasst: 25.07.2005 18:42
von QCO
Claudi hat geschrieben:

Code: Alles auswählen

if ( $email != $userdata['user_email'] || $mode == 'register' )
	{
		$result = validate_email($email);
		if ( $result['error'] )
		{
			$email = $userdata['user_email'];

			$error = TRUE;
			$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
		}
habe ich ganz gelöscht.
Wer hat dir das geraten? Damit handelst du dir jede Menge Ärger ein, weil du eine öffnende Klammer löschst, aber die zugehörige schließende stehen lässt. Das hat scheinbar fatale Folgen, denn in dem SQL-Query, der da nicht funktioniert, fehlt die Hälfte.
Überall, wo dort xxx= , steht, müsste hinter dem = eine Zahl oder eine Zeichenkette kommen.

Verfasst: 26.07.2005 11:13
von Claudi
Alles, was ich geändert bzw. gelöscht habe, habe ich aus diesem Forum.

Ich habe jetzt im Code
if ( $email != $userdata['user_email'] || $mode == 'register' )
{
$result = validate_email($email);
if ( $result['error'] )
{
$email = $userdata['user_email'];

$error = TRUE;
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
}
folgenden Absatz gelöscht:
$error = TRUE;
$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
Es funktioniert jedenfalls.

Ist das korrekt, was ich gelöscht habe?
Oder gibt es eine bessere Lösung?

Danke
Claudi

Verfasst: 26.07.2005 16:23
von QCO
Claudi hat geschrieben:Es funktioniert jedenfalls.

Ist das korrekt, was ich gelöscht habe?
Oder gibt es eine bessere Lösung?
Wenn es funktioniert, ist es schonmal nicht falsch :D . Das ist ok so.
Ich wollte gestern Abend eingentlich noch Informationen nachschieben, nachdem ich das lokal auf meinem Testserver ausprobiert hatte, aber just da war phpbb.de nicht zu erreichen.

Ich wollte folgendes vorschlagen:
den Abschnitt

Code: Alles auswählen

      $result = validate_email($email);
      if ( $result['error'] )
      {
         $email = $userdata['user_email'];

         $error = TRUE;
         $error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
      }
ersetzen durch

Code: Alles auswählen

		if ( !empty($email) )
		{
			$result = validate_email($email);
			if ( $result['error'] )
			{
				$email = $userdata['user_email'];
	
				$error = TRUE;
				$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
			}
		}
Dadurch wird, falls man eine E-Mailadresse angibt, diese auf Gültigkeit überprüft, bei einer leeren Mailadresse aber keine Fehlermeldung ausgegeben.

Verfasst: 27.07.2005 13:25
von Claudi
Vielen Dank für die Hilfe!

Werde wohl deine bessere Lösung benutzen.

Claudi