webForumDet fria alternativet

unexpected $end

4 svar · 333 visningar · startad av webzonen

webzonenMedlem sedan feb. 2001370 inlägg
#1

Har kollat igenom detta felra gånger, men jag hittar inte felet. får undexpected $end som felmeddelande:

if (($HTTP_POST_VARS['command'] == 'forgot') && strlen($_POST['email'] <= 50)) {

 $as_email = addslashes($_POST['email']);
 $query = "SELECT id FROM anvandare WHERE mail = '$as_email'";
 $result=mysql_query($query);
 $is_user = mysql_num_rows($result);

          if ($is_user == 1) {
          $alphanum = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z','1','2','3','4','5','6','7','8','9');
          $chars = sizeof($alphanum);
          $a = time();
          mt_srand($a);
              for ($i=0; $i < 7; $i++)
              {
               $randnum = intval(mt_rand(0,56));
               $pwd .= $alphanum[$randnum];
              }
          $enc_pass = md5($pwd);
          
          $query = "UPDATE anvandare SET losen = '$enc_pass' WHERE mail = '$as_email'";
          $result = mysql_query($query) or die ('Det gick inte att uppdatera databasen med det nya lösenordet');
          
          $to = $_POST['email'];
          $subject = "Nytt lösenord för sidan";
          $msg = <<<EOMSG
          Här kommer ditt nya lösenord för ditt konto.
          Vi uppmanar dig att byta till ett personligare lösenord så fort du loggat in med detta.

          Ditt nya lösenord är: $pwd
          
          För att ändra lösenord, kika under din profil på sidan.
          
          EOMSG;
          
          mail($to, $subject, $msg, 'From: email');
          
          header("Location: index.php");
          }

          else {
                // hhh
                Echo "wrong";
          }
}
henkeMedlem sedan dec. 1999271 inlägg
#2

Testa att skriva så här istället:

$msg = "Här kommer ditt nya lösenord för ditt konto.
Vi uppmanar dig att byta till ett personligare lösenord så fort du loggat in med detta.

Ditt nya lösenord är: $pwd

För att ändra lösenord, kika under din profil på sidan.";
webzonenMedlem sedan feb. 2001370 inlägg
#3

Fungerade. Tack! :)

henkeMedlem sedan dec. 1999271 inlägg
#4

En annan sak... du åker förmodligen på dubbla escapes i och med detta:

$as_email = addslashes($_POST['email']);

Från php-manualen under addlashes:

The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping. The function get_magic_quotes_gpc() may come in handy for checking this.

Istället kan du använda mysql_real_escape_string och den här funktionen som är hämtad från php-manualen under just mysql_real_escape_string:

<?php
// Quote variable to make safe
function quote_smart($value)
{
   // Stripslashes
   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }
   // Quote if not integer
   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value) . "'";
   }
   return $value;
}

// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
   OR die(mysql_error());

// Make a safe query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
           quote_smart($_POST['username']),
           quote_smart($_POST['password']));

mysql_query($query);
?>
webzonenMedlem sedan feb. 2001370 inlägg
#5

Oj, det missade jag när jag läste igenom addslashes igår. Var nog lite för trött kanske. Tack, ska börja använda den istället!

Genererad på 370 ms · cache AV · v20260730165559-full.f96bc7eb