2014-11-05 129 views
0

我想知道哪一個是錯誤的。我試圖檢查MySQL並沒有插入到我的數據庫中。PHP動作插入表單無法正常工作

首先,我的HTML代碼都是這樣

<form action="registerAction" method="POST"> 
     <p class="titleRegister"> Login Details </p> 
     <!-- login details --> 
     <p> <label for="emailAddress" class="inputField" > Email Address : </label> </p> 
     <p> <input id="emailAddress" class="registerField" name="ename" required="required" type="text" placeholder="Your email address"/> </p> 

     <p> <label for="password" class="inputField" > Password : </label> </p> 
     <p> <input id="password" class="registerField" name="pwd" required="required" type="password" placeholder="Your password"/> </p> 

     <p> <label for="password" class="inputField" > Confirmation Password : </label> </p> 
     <p> <input id="password" class="registerField" name="mpwd" required="required" type="password" placeholder="Confirmation password" onBlur="pwdCompare()"/> </p> 

     <!-- personal details --> 
     <p class="titleRegister"> Personal Details </p> 

     <!-- hidden to insert db --> 
     <input name="registerID" type="hidden"/> 
     <input name="pic" type="hidden"/> 

     <p> 
      <label for="socialTitle" class="inputField" > Title : </label> 
      <div class="radio"> 
       <input type="radio" name="sTitle" value="mr"> Mr 
       <input type="radio" name="sTitle" value="mrs"> Mrs 
       <input type="radio" name="sTitle" value="ms"> Ms 
      </div> 
     </p> 

     <p> <label for="firstName" class="inputField" > First Name : </label> </p> 
     <p> <input id="firstName" class="registerField" name="fname" required="required" type="text" placeholder="Your first name"/> </p> 

     <p> <label for="lastName" class="inputField" > Last Name : </label> </p> 
     <p> <input id="lastName" class="registerField" name="lname" required="required" type="text" placeholder="Your last name"/></p> 

     <p> <label for="mainAddress" class="inputField" > Main Address : </label> </p> 
     <p> <input id="mainAddress" class="registerField" name="address" required="required" type="text" placeholder="Your main address"/> </p> 

     <p> <label for="countryName" class="inputField" > Country : </label> </p> 
     <?php 
     include 'dbconnect.php'; 
     echo "<select class=\"selectCSS\" name=\"country\">"; 
     $country = "SELECT DISTINCT * FROM geo_country ORDER BY country"; 
     $showCountry = mysqli_query($mysqli, $country); 
     while($countryRow = mysqli_fetch_assoc($showCountry)) 
     { 
      $country = htmlspecialchars ($countryRow['country']); 
      $countryCode = $countryRow['countryCode']; 
      echo "<option value=\"$country\">$country</option>\n"; 
     } 
     echo "</select>"; 
     ?> 

     <p> <label for="cityName" class="inputField" > City : </label> </p> 
     <?php 
     include 'dbconnect.php'; 
     echo "<select class=\"selectCSS\" name=\"city\">"; 
     $city = "SELECT DISTINCT * FROM geo_country INNER JOIN geo_city ORDER BY city WHERE geo_country.countryCode = geo_city.countryCode"; 
     $showCities = mysqli_query($mysqli, $city); 
     while($cityRow = mysqli_fetch_assoc($showCities)) 
     { 
      $city = htmlspecialchars ($cityRow['city']); 
      $countryCode = $cityRow['countryCode']; 
      echo "<option value=\"$city\">$city</option>\n"; 
     } 
     echo "</select>"; 
     ?> 

     <p> <label for="postalCode" class="inputField" > Postal Code : </label> </p> 
     <p> <input id="postalCode" class="registerField" name="pcode" required="required" type="text" placeholder="Your postal code"/> </p> 

     <p> <input class="registerButton" type="submit" value="REGISTER"> </p> 
    </form> 

和我的PHP動作來這裏:

<?php 

include 'dbconnect.php'; 

if ($_POST['pwd']!= $_POST['mpwd']) { 
    echo("Oops! Password did not match! Try again. "); 
} 

$register_ID = $_POST['registerID']; 
$socialTitle = $_POST['sTitle']; 
$firstName = ucfirst(strtoupper($_POST['fname'])); 
$lastName = ucfirst(strtoupper($_POST['lname'])); 
$emailAddress = htmlspecialchars($_POST['ename']); 
$mainAddress = htmlspecialchars($_POST['address']); 
$registerCity = $_POST['city']; 
$registerCountry = $_POST['country']; 
$postalCode = htmlspecialchars($_POST['pcode']); 
$profilePic = $_POST['pic']; 
$registerPassword = $_POST['pwd']; 

$check = "SELECT * FROM register_user where emailAddress = '$emailAddress'"; 
$checkTitle = mysqli_query($mysqli,$check); 

if (mysqli_num_rows($checkTitle) > 0) { 
    header("Location: register?error=The name of email has already been taken"); 
    } else { 
     $insertSQL = 
     "INSERT INTO register_user ('registerID', 'socialTitle', 'firstName', 'lastName', 'emailAddress', 'mainAddress', 'registerCity', 'registerCountry', 'postalCode', 'profilePic', 'registerPassword') 
     VALUES ('$register_ID', '$socialTitle', '$firstName', '$lastName', '$emailAddress', '$mainAddress', '$registerCity', '$registerCountry', '$postalCode', '$profilePic', '$registerPassword')"; 
     $queryResult = mysqli_query($mysqli,$insertSQL); 
     if($queryResult) { 
      echo "SUCCESS"; 

       echo "<p> Name : $emailAddress </p>"; 
       echo "<p> Detail : $fname </p>"; 

      echo "<p> <a href=\"index\"> BACK </a> </p>"; 
     } 
    } 
?> 

的結果是什麼新的HTML頁面上走出來,無論是在DB 。你能檢查一下嗎?謝謝。

+0

您不檢查錯誤。檢查'mysqli_error()'來查看mysql報告並在這裏發佈,如果你不明白的話。 – 2014-11-05 02:25:12

+0

改變你的動作並追加'.php'就像這樣:'

' – Rizier123 2014-11-05 02:27:11

+0

@ Rizier123我已經用htaccess文件刪除了擴展名,所以不用擔心這個。 – Anthosiast 2014-11-05 02:28:48

回答

1

您使用您的列錯誤identifiers,是(單)報價'

('registerID', 'socialTitle', 'firstName', 'lastName', 'emailAddress', 'mainAddress', 'registerCity', 'registerCountry', 'postalCode', 'profilePic', 'registerPassword') 

變化,爲:

(registerID, socialTitle, firstName, lastName, emailAddress, mainAddress, registerCity, registerCountry, postalCode, profilePic, registerPassword) 

或使用反引號。

(`registerID`, `socialTitle`, `firstName`, `lastName`, `emailAddress`, `mainAddress`, `registerCity`, `registerCountry`, `postalCode`, `profilePic`, `registerPassword`) 

使用or die(mysqli_error($mysqli))mysqli_query()會顯示你的錯誤。

另外,除非表單動作是一個文件夾名爲registerAction索引文件或國防部重寫:

這將需要

<form action="registerAction.php" method="POST"> 

因此,檢查。只是一個見解。


我還想指出,你現在的代碼是開放的SQL injection

使用prepared statementsPDO with prepared statements,他們更安全

+0

這工作!難怪我曾經使用過的像列引用的公式是錯誤的:/謝謝! – Anthosiast 2014-11-05 02:38:28

+0

@Anthosiast不客氣。 – 2014-11-05 02:38:59

0

不是100%確定它,但嘗試更改您的html。

此:

<form action="registerAction" method="POST"> 

要:

<form action="registerAction.php" method="POST"> 

假設registerAction是你的名字PHP文件..

+0

我用過htaccess的。不要擔心這一點。謝謝! – Anthosiast 2014-11-05 02:35:43

+0

Gotcha。 (對不起,我的PHP技能不是太尖銳) – 2014-11-05 02:37:13

+0

不,不,你只是在小心:) – Anthosiast 2014-11-05 02:40:19