2015-10-09 56 views
-2

我在這裏有一個非常奇怪的問題,我的if else語句只是在我提交表單並輸入所有值或不輸入數據庫後被忽略。PHP忽略如果語句

首先,我預先填寫註冊期間提交的信息的所有字段,然後用戶可以編輯和更改他們的信息 - 這工作正常,但我決定添加它,因爲我不知道它是否可能在這個神祕錯誤中有一隻手。

這裏是我的代碼來檢索細節,保存檢索值的變量被回顯在窗體的相應字段中。

<?php 
include("connect.php"); 
$results = $conn->query("SELECT username, first_name,last_name, email,phone,address FROM users WHERE email='$user_logged'"); 


while ($row = $results->fetch_assoc()) { 
    $u_name = $row['username']; 
    $f_name = $row['first_name']; 
    $l_name = $row['last_name']; 
    $email = $row['email']; 
    $phone = $row['phone']; 
    $address = $row['address']; 
} 

$results->free(); 

$conn->close(); 
?> 

它不檢查空白字段。功能test_inputpreg_match不起作用alsko。剛纔提交的表單和數據庫被更新。

我花了2天的時間去尋找錯誤可能在哪裏,但我無法檢測到它。

<?php 
$user_logged = $_SESSION['logged_in']; 
if (isset($_POST['btnUpdate'])) { 
    include("connect.php"); 
    $phoneErr = $f_nameErr = $l_nameErr = ""; 
    $user_email = $first_name = $last_name = $phone_upadate = $address_updated = ""; 


    if (empty($_POST["fname"])) { 
     $f_nameErr = "First Name is required"; 
    } else { 
     $first_name = test_input($_POST["fname"]); 
     if (!preg_match("/^[a-zA-Z ]*$/", $first_name)) { 
      $f_nameErr = "Only letters and white space allowed"; 
     } 
    } 

    if (empty($_POST["lname"])) { 
     $l_nameErr = "Last Name is required"; 
    } else { 
     $last_name = test_input($_POST["lname"]); 
     if (!preg_match("/^[a-zA-Z ]*$/", $last_name)) { 
      $l_nameErr = "Only letters and white space allowed"; 
     } 
    } 

    if (empty($_POST["phone"])) { 
     $phoneErr = "Phone No is required"; 
    } else { 
     $phone_upadate = test_input($_POST['phone']); 
     if (!preg_match("/^[0-9]{0,18}$/", $phone_upadate)) { 
      $phoneErr = "Only numbers and white space allowed"; 
     } 

    } 
    $user_email  = $_POST['email']; 
    $address_updated = $_POST['txtaddress']; 

    $results = $conn->query("UPDATE users SET 
     first_name='$first_name',last_name='$last_name', 
     email='$user_email',phone='$phone_upadate', 
     address='$address_updated' 
     WHERE email='$user_logged'"); 

    if ($results) { 

     header("Location: edit-info.php"); 
    } else { 
     print 'Error : (' . $conn->errno . ') ' . $conn->error; 
    } 

} 

function test_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
?> 

這裏是我的html代碼

<form action="edit-info.php" method="POST"> 
 
    <?php $username_error="can't be changed"; ?> 
 
    <p>Username</p> 
 
    <p><input type="text" name="username" id="txtuser" value="<?php echo $u_name; ?>" readonly></input><span id="error"><?php echo $username_error?></span></p> 
 
    <p>First Name</p> 
 
    <p><input type="text" name="fname" id="txtuser" value="<?php echo $f_name; ?>"></input><span id="error"><?php echo $f_nameErr;?></span></p> 
 
    <p>Last Name</p> 
 
    <p><input type="text" name="lname" id="txtuser" value="<?php echo $l_name; ?>" ></input><span id="error"><?php echo $l_nameErr;?></span></p> 
 
    <p>Email</p> 
 
    <p> <input type="text" name="email" id="txtuser" value="<?php echo $email; ?>" readonly></input><span id="error"><?php echo $f_nameErr;?></span></p> 
 
    <p>Phone</p> 
 
    <p><input type="text" name="phone" id="txtuser" value="<?php echo $phone; ?> " ></input></p> 
 
    <span id="error"><?php echo $phoneErr;?></span> 
 
    <p>Address</p> 
 
    <p><textarea id="txtaddress" name="txtaddress" cols="40" rows="10" ><?php echo $address; ?></textarea></p> 
 
    <p><input type="submit" name="btnUpdate" value="UPDATE" /></p> 
 
</form>

+5

這是很難閱讀沒有縮進,你能糾正它嗎?此外,您是否嘗試添加日誌,查看執行行的位置,以及php_error.log中是否有任何內容? – Random

+0

這是我第一次在這裏問一個問題,沒有得到正確的縮進,我編輯了我的帖子 –

回答

0

您需要檢查$ phoneErr,$ f_nameErr,$ l_nameErr的值在繼續UPDATE這樣

if(empty($phoneErr) && empty($f_nameErr) && empty($l_nameErr)){ 
    $results = $conn->query("UPDATE users SET  first_name='$first_name',last_name='$last_name', email='$user_email',phone='$phone_upadate',address='$address_updated' WHERE email='$user_logged'"); 
} 

之前,因爲當你有任何空驗證錯誤或的preg_match要更新這些值。沒有檢查這些$ phoneErr,$ f_nameErr,$ l_nameErr變量,你正在進行更新

+0

你的幫助是正確的!非常感謝 ! –

0

你可以嘗試用

"/^[a-zA-Z ]+$/" 
更換

"/^[a-zA-Z ]*$/" 

請注意,我們將用summation sign替換multiplication sign