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>
あなたのスクリプトは[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
ありがとう、ありがとう – Jonathan