2012-01-18 2 views
1

Я пытаюсь собрать форму, в которой пользователи могут обновлять свои «адреса электронной почты» и «пароль».If & AND Statement В PHP Script

Я пытаюсь включить следующие сценарии:

  • Если пользователь изменяет свой адрес электронной почты, то я хочу, существующий «пароль», «подсказку пароля», и солевые поля, чтобы их оставили с их текущие значения.
  • Если пользователь меняет свой пароль, мне нужно создать новое значение «соли», добавленное в поле пароля и зашифрованное с помощью sha1
  • Наконец, если пользователь меняет все поля, то «адреса электронной почты», пароль "," пароль "и" соль "все необходимо обновить.

Это код, который я пытался поставить вместе:

if (isset($_POST["amendyourdetails"])) 
    { 

$password = $_POST["password"];} 
$confirmpassword = $_POST["confirmpassword"]; 
$passwordhint = $_POST["passwordhint"]; 
if ($password >=0){ 
$salt = uniqid(mt_rand()); 
$encrypted = sha1($password . $salt); 
if ($emailaddress >=0){ 
$emailaddress = $_POST['emailaddress']; 
      mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress',`password` = '$encrypted', `passwordhint` = '$passwordhint', `salt` = '$salt' WHERE `userid` = 1"); 
      $msg = "Your password has been successfully reset."; 
      } 
      } 
      else if ($password == 0){ 
      if (emailaddress > 0){ 
      mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress' WHERE `userid` = 1"); 
      $msg = "Your password has been successfully reset."; 
      } 
      } 
      } 
?> 
<html> 
<head> 
<title>Amend Your Details</title> 
<style type="text/css"> 
<!-- 
.style1 {font-family: Calibri 
} 
.style9 { font-family: Calibri; 
    font-size: 24px; 
    background-color: #78AFC5; 
} 
.style7 { 
    font-family: Calibri; 
    font-size: 16px; 
    background-color: #FFFFFF; 
} 
.style10 {color: #FF0000} 
--> 
</style> 
<script src="gen_validatorv4.js" type="text/javascript"></script> 
</head> 
<body> 
<div align="center"><span class="style9">Amend Your Details </span></div> 
<p class="style7"><span class="style10"> 
    <?php 
if (isset($msg)) // this is special section for 
// outputing message 
{ 
?> 
</span> 
<p class="style7"> 
    <span class="style10"> 
    <?=$msg?> 
    </span> 
    <p class="style7"><span class="style10"> 
    <?php 
} 
?> 
    </span> 
    <form name="amendyourdetails" id="amendyourdetails" action="amendyourdetails.php" method="post"> 
    <table width="418" border="1"> 
    <tr> 
     <td width="195"><span class="style1">Email Address:</span></td> 
     <td width="220"><span class="style1"> 
     <input name="emailaddress" type="email" value="<?php echo $emailaddress;?>" size="25"/> 
     </span></td> 
    </tr> 
    <tr> 
     <td><span class="style1">New Password:</span></td> 
     <td><span class="style1"> 
     <input name="password" id="password" type="password" size="30"/> 
     </span></td> 
    </tr> 
    <tr> 
     <td><span class="style1">Confirm New Password:</span></td> 
     <td><span class="style1"> 
     <input name="confirmpassword" id="confirmpassword" type="password" size="30"/> 
     </span></td> 
    </tr> 
    <tr> 
     <td><span class="style1">New Password Hint:</span></td> 
     <td><span class="style1"> 
     <input name="passwordhint" id="passwordhint" type="text" size="30"/> 
     </span></td> 
    </tr> 
    </table> 
    <p> 
    <input name="amendyourdetails" type="submit" value="Amend Your Details"> 
</p> 
</form> 
<script language="JavaScript" type="text/javascript"> 
var frmvalidator = new Validator("amendyourdetails"); 
           frmvalidator.addValidation("emailaddress","email","Please enter a valid email address"); 
          // frmvalidator.addValidation("password","minlen=6", "Minimum length for a password is 6 characters"); 
           frmvalidator.addValidation("confirmpassword","eqelmnt=password", "The confirmed password is not the same as the password"); 
          // frmvalidator.addValidation("passwordhint","req","Please provide a hint for your password"); 
          </script> 
</body> 
</html> 

Самая большая проблема у меня в том, что как только страница запускается, «обновление» действие происходит, но значения из моих полей «email address» и «passwordhint» были удалены, и я не уверен, почему.

ОБНОВЛЕНО КОД

if (isset($_POST["amendyourdetails"])) 
{ 

$emailaddress = $_POST['emailaddress']; 
$password = $_POST["password"];} 
$confirmpassword = $_POST["confirmpassword"]; 
$passwordhint = $_POST["passwordhint"]; 
if ($_POST["password"] isset() 
{ 
$salt = uniqid(mt_rand()); 
$encrypted = sha1($password . $salt); 
mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress',`password` = '$encrypted', `passwordhint` = '$passwordhint', `salt` = '$salt' WHERE `userid` = 1"); 
$msg = "Your password has been successfully reset."; 
} 
} 
+1

Если вы можете отступать от кода, это упростит его чтение и поможет вам – xbonez

+1

Пожалуйста, прочтите [parsing user input] (http://stackoverflow.com/questions/60174/best-way-to -stop-sql-injection-in-php), ради ваших пользователей. – fredley

+2

Где вы объявляете '$ emailaddress'? Edit: Кажется, вы используете его, прежде чем объявлять его. – Znarkus

ответ

0

Вы обнаружения, если $ пароль больше или равно 0. Это будет оценивать истинно, если оно не определено. Вы хотите проверить, существует ли $ _POST ["пароль"] isset().

+0

Привет, многие thnaks за то, что нашли время ответить на мой пост. Я попытался реализовать ваше предложение. Очевидно, что я не сделал что-то правильно, потому что получаю следующую ошибку: 'Ошибка анализа: ошибка синтаксиса, неожиданный T_ISSET в /homepages/2/d333603417/htdocs/development/amendyourdetails.php в строке 19' У меня есть обновил мой оригинальный пост с помощью нового кода. Не могли бы вы, пожалуйста, взгляните на это и сообщите мне, где я ошибся. Большое спасибо – IRHM

+1

в строке 'if ($ _POST [" password "] isset()' it должно быть 'if (isset ($ _ POST [" password "]))' – Ilion

+0

Привет, огромное спасибо за помощь в этом. Я не мог заставить код работать, используя обновленное предложение, которое вы опубликовали. Но, принимая во внимание то, что вы и другие говорили об атаках SQL-инъекций, я ушел и переписал свой код, и теперь он работает так, как должен. Большое спасибо – IRHM

1

Вы имеете в виду if (strlen ($ password)> = 0) {?? Или isset ??

Безотносительно, попробуйте следующее:

$password = $_POST['password']; 
$confirmpassword = $_POST['confirmpassword']; 
$passwordhint = $_POST['passwordhint']; 

if(strlen($password) > 0) { 
    $salt = uniqid(mt_rand()); 

    $encrypted = sha1($password.$salt); 
} 

$emailaddress = $_POST['emailaddress']; 

mysql_query("UPDATE `userdetails` SET `emailaddress` = ".((strlen($emailaddress) > 0) ? "'$emailaddress'" : "emailaddress").", `password` = 
     ".((strlen($password) > 0) ? "'$encrypted', `passwordhint` = '$passwordhint', `salt` = '$salt'" : "password")." WHERE `userid` = 1"); 

Но: Никогда не думал о SQL инъекциях?

Btw: Извините за мой плохой английский.

+0

SQL-инъекция - это определенная проблема с написанным кодом. – Ilion

+1

Я знаю, но я просто сделал это как код выше. Возможно, он делает что-то вроде $ _POST ['emailadress'] = mysql_real_escape_string ($ _ Po ...); извлечение кода. –

+0

О да, я имел в виду код выше, не обвиняя вас. – Ilion