2016-09-17 11 views
0

私はログインしたユーザーの詳細をフォームに表示し、その詳細を編集する必要のある編集フォームを用意しています。実際のページ自体にコードを使用しても問題はありませんが、関数内にすべてを入れていて、フォーム内の変数を使用することはできません。グローバルを使わずにこれを行うにはどうすればいいですか?グローバルを使用せずに関数の外のページに変数をエコーする方法

機能:

function updateProfile($link){ 



    $sql = "SELECT user_firstname, user_lastname, user_email 
      FROM `users` 
      WHERE user_username = '{$_SESSION['username']}'"; 
    $result = $link->query($sql); 
    if($result->num_rows === 1){ 
     while($row = $result->fetch_assoc()){ 

      $db_firstname = htmlentities($row['user_firstname']); 
      $db_lastname = htmlentities($row['user_lastname']); 
      $db_username = htmlentities($_SESSION['username']); 
      $db_email = htmlentities($row['user_email']); 
      $db_userid = $row['user_id']; 
     } 
    } 


    $message = ""; 

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

     if(empty($_POST['user_firstname'])) { 

      $message .= "First name required<br>"; 
     } 

     if(empty($_POST['user_lastname'])) { 

      $message .= "Last name is required<br>"; 
     } 

     if(empty($_POST['user_username'])) { 

      $message .= "Username is required<br>"; 
     } 

     if(empty($_POST['user_email'])) { 

      $message .= "Email address required"; 
     } 

     if(!filter_var($_POST['user_email'], FILTER_VALIDATE_EMAIL)) { 

      $message .= "Email address invalid"; 
     } 

     if(!empty($_POST['someinput'])) { 

       $message .= "Be gone spam bot!"; 
      } 

     if ($message) { 

      $message = "<div class='alert alert-danger'><strong>There were errors in your form:<br></strong>" .$message. "</div>"; 

     } else { 

      $user_firstname = $link->real_escape_string($_POST['user_firstname']); 
      $user_lastname = $link->real_escape_string($_POST['user_lastname']); 
      $user_username = $link->real_escape_string($_POST['user_username']); 
      $user_email = $link->real_escape_string($_POST['user_email']); 


      $update_profile = "UPDATE `users` 
           SET user_firstname = '$user_firstname', 
            user_lastname = '$user_lastname', 
            user_username = '$user_username', 
            user_email = '$user_email' 
           WHERE user_id = '$db_userid'"; 

      if($result = $link->query($update_profile) === TRUE){ 

       $message = "<div class='alert alert-success>User profile updated</div>"; 
      } 

     } 

    } 

    return $message; 


} 

形式:

<form action="" method="post" enctype="multipart/form-data"> 
    <div class="form-group"> 
     <label for="firstname">First name</label> 
     <input type="text" class="form-control" name="user_firstname" value="<?php echo $db_firstname;?>"> </div> 
    <div class="form-group"> 
     <label for="lastname">Last Name</label> 
     <input type="text" class="form-control" name="user_lastname" value="<?php echo $db_lastname;?>"> </div> 
    <div class="form-group"> 
     <label for="Username">Username</label> 
     <input type="text" class="form-control" name="user_username" value="<?php echo $db_username;?>"> </div> 
    <div class="form-group"> 
     <label for="form-group">Email</label> 
     <input type="email" class="form-control" name="user_email" value="<?php echo $db_email;?>"> </div> 
    <div class="form-group"> 
     <label for="form-group">Password</label> 
     <input type="password" class="form-control" name="user_password"> </div> 
    <div class="form-group"> 
     <label for="form-group">Repeat password</label> 
     <input type="password" class="form-control" name="password_repeat"> </div> 
    <div class="form-group"> 
     <input type="text" style="display:none" name="someinput"> </div> 
    <div class="form-group"> 
     <input class="btn btn-primary" type="submit" name="updateprofile" value="Update details"> </div> 
    <div> 
     <?php echo updateProfile($link);?> 
    </div> 
</form> 
+0

あなたのスクリプトは[SQL Injection Attack]の危険にさらされています(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 何が起こったかを見てください[Little Bobby Tables](http://bobby-tables.com/)でも [あなたが入力をエスケープしている場合、その安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that -gets-around-mysql-real-escape-string) [準備済みパラメータ付きステートメント](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

ありがとう、ありがとう – Jonathan

答えて

0

あなたはそれらの値を変更する必要があるかどうかについて:

A)あなたの関数外の値がない場合変更できる必要があります

定義する定数:

if(!defined('CONSTANT')) { 
    DEFINE('CONSTANT', 20); 
} 

盗ん:

if(defined('CONSTANT_NAME')) $value = CONSTANT_NAME; 

B)自分の価値観を変更できるようにする必要がある場合:あなたが得るので、

がクラスにあなたの関数をラップ方法updateProfile($link)はこのようになります:

class YourClass { 

    private $myVariable = 10; 

    function updateProfile($link) { 

     ... 

    } 

    function anotherFunction() { 

     ... 
     // access your property 

     $variable = $this->myVariable; 

    } 
} 

または唯一の方法は、お勧めの通りglobalを使用することですが、それはまったく安全ではありません。

関連する問題