<?php # Script 9.3 - edit_user.php
$page_title = 'Edit a User';
include ('includes/header.html');
echo '<h1>Edit a User</h1>';
// 이전 페이지에서 받은 id 변수를 검증한다
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) {
$id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (isset($_POST['id'])) ) {
$id = $_POST['id'];
} else {
echo '<p class="error">This page has been accessed in error.</p>';
include ('includes/footer.html');
exit();
}
require_once('../mysqli_connect.php');
if (isset($_POST['submitted'])) { // 제출된 데이터를 처리하는 조건절 시작
$errors = array();
if (empty($_POST['first_name'])) {
$errors[] = 'You forgot to enter your first name.';
} else {
$fn = mysqli_real_escape_string($dbc, trim($_POST['first_name']));
}
if (empty($_POST['last_name'])) {
$errors[] = 'You forgot to enter your last name.';
} else {
$ln = mysqli_real_escape_string($dbc, trim($_POST['last_name']));
}
if (empty($_POST['email'])) {
$errors[] = 'You forgot to enter your email address.';
} else {
$e = mysqli_real_escape_string($dbc, trim($_POST['email']));
}
if (empty($errors)) { // 앞서 행한 변수 검증에서 에러가 발생했는지를 검증한다
$q = "SELECT user_id FROM users WHERE email='$e' AND user_id != $id"; // 다른 유저에게 이미 등록된 email 주소인지 확인해보는 쿼리문
$r = @mysqli_query($dbc, $q);
if(mysqli_num_rows($r) == 0) {
$q = "UPDATE users SET first_name='$fn', last_name='$ln', email='$e' WHERE user_id=$id LIMIT 1";
$r = @mysqli_query($dbc, $q);
if (mysqli_affected_rows($dbc) == 1) {
echo '<p>The user has been edited.</p>';
} else {
echo '<p class="error">The user could not be edited due to a system error. We apologize for any inconvenience.</p>';
echo '<p>' . mysqli_error($dbc) . '<br />Query: ' . $q . '</p>';
}
} else {
echo '<p class="error">The email address has already been registered.</p>';
}
} else {
echo '<p class="error">The following error(s) occurred:<br />';
foreach ($errors as $msg) {
echo " - $msg<br />\n";
}
echo '</p><p>Please try again.</p>';
}
}
// edit 페이지. submit 하기 전의 페이지 모습이다
$q = "SELECT first_name, last_name, email FROM users WHERE user_id=$id";
$r = @mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) {
$row = mysqli_fetch_array($r, MYSQLI_NUM);
echo '<form action="edit_user.php" method="post">
<p>First Name: <input type="text" name="first_name" size="15" maxlength="15" value="' . $row[0] . '" /></p>
<p>Last Name: <input type="text" name="last_name" size="15" maxlength="30" value="' . $row[1] . '" /></p>
<p>Eamil Address: <input type="text" name="email" size="20" maxlength="40" value="' . $row[2] . '" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
<input type="hidden" name="submitted" value="TRUE" />
<input type="hidden" name="id" value="'. $id . '" />
</form>';
} else {
echo '<p class="error">This page has been accessed in error.</p>';
}
mysqli_close($dbc);
include ('includes/footer.html');
?>
#Error Comment
작동을 테스트하는 과정에서 공백인 상태로 submit을 해보았는데,
에러 발생없이 쿼리문까지 작동하는 현상을 보였다.
각 데이터를 검증하는 if문이 잘못 코딩된 것으로 생각하고 살펴보았으나,
이렇다할 오류를 찾지 못하였다.
하지만 실제 오류를 발생한 부분은 바로 여기다.
if(empty($errors)) {
코딩 과정에서 오타가 발생하여 if(empty($erros)) { 로 입력되었다.
empty($erros)은 $erros 라는 변수가 생성되고 그곳에 null값이 들어있었을 것이므로
리턴값은 True가 되었을 것이다. 그 결과 if문을 통과하여 쿼리문이 수행된 것이다.
'공부 이야기 > PHP6' 카테고리의 다른 글
Chapter09. 일반적인 프로그래밍 테크닉 - 5 ('10.10.23) (0) | 2010.10.23 |
---|---|
Chapter09. 일반적인 프로그래밍 테크닉 - 4 ('10.10.23) (0) | 2010.10.23 |
Chapter09. 일반적인 프로그래밍 테크닉 - 2 ('10.10.22) (0) | 2010.10.22 |
Chapter09. 일반적인 프로그래밍 테크닉 - 1 ('10.10.22) (0) | 2010.10.22 |