2010-04-06 2 views
0

username을 사용할 수 있는지 확인하고 사용자가 내가 수행 한 계정 설정을 확인할 때이를 표시하려고합니다. 사용자가 다른 필드를 작성하려고 할 때PHP 제출 문제

하지만 나는 때문에 사용자 username 이미 팝업해서는 안 Your username is unavailable!를 얻을. 어떻게하면 사용자가 계정 설정을 볼 때마다 사용자 이름이 표시되고 사용자가 추가 정보를 제출할 때 문제가 발생하지 않도록 PHP를 사용하여이 문제를 해결할 수 있는지 알고 싶습니다.

다음은 PHP 코드입니다.

if (isset($_POST['submitted'])) { 

    require_once '../htmlpurifier/library/HTMLPurifier.auto.php'; 

    $config = HTMLPurifier_Config::createDefault(); 
    $config->set('Core.Encoding', 'UTF-8'); 
    $config->set('HTML.Doctype', 'XHTML 1.0 Strict'); 
    $config->set('HTML.TidyLevel', 'heavy'); 
    $config->set('HTML.SafeObject', true); 
    $config->set('HTML.SafeEmbed', true); 
    $purifier = new HTMLPurifier($config); 

    $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"SELECT users.* 
           FROM users 
           WHERE user_id=3"); 

    $first_name = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['first_name'])))); 
    $username = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['username'])))); 


    if($_POST['username']) { 
     $u = "SELECT user_id 
       FROM users 
       WHERE username = '$username'"; 
     $r = mysqli_query ($mysqli, $u) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($mysqli)); 

     if (mysqli_num_rows($r) == TRUE) { 
      $username = NULL; 
      echo '<p class="error">Your username is unavailable!</p>'; 
     } else if(mysqli_num_rows($r) == 0) { 
      $username = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['username'])))); 



    if ($_POST['password1'] == $_POST['password2']) { 
     $sha512 = hash('sha512', $_POST['password1']); 
     $password = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($sha512))); 
    } else { 
     $password = NULL; 
    } 

    if($password == NULL) { 
     echo '<p class="error">Your password did not match the confirmed password!</p>'; 
    } else { 


     if (mysqli_num_rows($dbc) == 0) { 
       $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
       $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, first_name, username, password) 
              VALUES ('$user_id', '$first_name', '$username', '$password')"); 
     } 


     if ($dbc == TRUE) { 
       $dbc = mysqli_query($mysqli,"UPDATE users 
              SET first_name = '$first_name', username = '$username', password = '$password' 
              WHERE user_id = '$user_id'"); 

       echo '<p class="changes-saved">Your changes have been saved!</p>'; 

     } 

     if (!$dbc) { 
       print mysqli_error($mysqli); 
       return; 
     } 

    } 

     } 

    } 
} 

다음은 html 양식입니다.

<form method="post" action="index.php"> 
    <fieldset> 
     <ul> 
      <li><label for="first_name">First Name: </label><input type="text" name="first_name" id="first_name" size="25" class="input-size" value="<?php if (isset($_POST['first_name'])) { echo stripslashes(htmlentities(strip_tags($_POST['first_name']))); } else if(!empty($first_name)) { echo stripslashes(htmlentities(strip_tags($first_name))); } ?>" /></li> 
      <li><label for="username">UserName: </label><input type="text" name="username" id="username" size="25" class="input-size" value="<?php if (isset($_POST['username'])) { echo stripslashes(htmlentities(strip_tags($_POST['username']))); } else if(!empty($username)) { echo stripslashes(htmlentities(strip_tags($username))); } ?>" /><br /><span>(ex: CSSKing, butterball)</span></li> 
      <li><label for="password1">Password: </label><input type="password" name="password1" id="password1" size="25" class="input-size" value="<?php if (isset($_POST['password1'])) { echo stripslashes(htmlentities(strip_tags($_POST['password1']))); } ?>" /></li> 
      <li><label for="password2">Confirm Password: </label><input type="password" name="password2" id="password2" size="25" class="input-size" value="<?php if (isset($_POST['password2'])) { echo stripslashes(htmlentities(strip_tags($_POST['password2']))); } ?>" /></li> 

      <li><input type="submit" name="submit" value="Save Changes" class="save-button" /> 
       <input type="hidden" name="submitted" value="true" /> 
      <input type="submit" name="submit" value="Preview Changes" class="preview-changes-button" /></li> 
      </ul> 
    </fieldset> 

</form> 

답변

1

당신은이 라인에 제출 된 양식을 검사 할 때 :

$u = "SELECT user_id 
      FROM users 
      WHERE username = '$username' 
      AND user_id <> 3"; 

입니다 :

if($_POST['username']) { 
    $u = "SELECT user_id 
      FROM users 
      WHERE username = '$username'"; 
당신은 방지 할 수있는 사용자의 ID를 넣어해야

가 동일한 레코드에 고정하기

현재 사용자를 제외한 다른 모든 사용자의 사용자 이름 필드에서 검사를 수행해야하기 때문에 :

희망이 도움이!

+0

Dang. 나를 때려 눕히고 ... 물론, 이것은 여전히 ​​내가 user_id가 그렇게 하드 코딩되어 있는지 궁금하게 만든다. –

+0

heh heh ... 나는 그가 세션에서 user_id를 얻을 것이라고 생각합니다. –

+0

이것이 작동하지만, 이것이 의미하는 것은 무엇입니까? – TaG