2013-10-28 70 views
0

我已經爲註冊創建了一個腳本。該表格有7個字段。 HTML代碼如下,

<input type="text" id="user_name" /> 
<input type="password" id="user_password" /> 
<input type="text" id="user_surname" /> 
<input type="email" id="user_email" />    
<input type="text" id="user_phone" /> 
<input type="text" id="user_address" /> 
<input type="text" id="user_pin" /> 
<input type="submit" value="Submit" /> 

相應的PHP代碼插入到語句是

$query="INSERT INTO register 
VALUES  (

     user_name = '$user_name', 
     user_password = '$pass', 
     user_surname = '$surname', 
     user_email = '$email', 
     user_phone = '$phone', 
     user_address = '$address', 
     user_pin = '$pin') "; 

$result = mysql_query($query,$con); 
if($result) 
{ 
echo "Details updated successfully"; 
} 

查詢工作正常。運行查詢後,我正在獲取詳細信息更新成功消息。但在我的TABLE中沒有任何更新正確。我的表中所有列中只有1個(數字1)被更新。請幫我解決這個問題。提前致謝。

+0

你做錯了。閱讀此:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php/60496#60496並相應地更新您的代碼,否則你是一個危險的每個人誰使用你的網站。或者每個使用你網站的人分別對你的服務器有危險。 –

+0

我希望你在輸入數據之前過濾輸入數據。或者你會 – 2013-10-28 10:38:09

+0

什麼是'DEFAULT'? – Anthony

回答

5

您需要給name屬性添加html元素。如果沒有name屬性,表單提交後將不會發布任何值。請嘗試如下所示。請記住您給出的任何名稱屬性,它們將是$ _POST的鍵array.So在表單提交後,在你的PHP中嘗試以下內容,看看通過你的表單提交的值是什麼。然後在必要的編碼之後插入查詢。

echo '<pre>'; 
print_r($_POST); 
die(); 
<form method="post" action=""> 
<div class="line"><label for="user_name">Username *: </label><input type="text" id="user_name" name="user_name" /></div> 
     <div class="line"><label for="user_password">Password *: </label><input type="password" id="user_password" name="user_password" /></div> 
     <div class="line"><label for="user_surname">Surname *: </label><input type="text" id="user_surname" /></div> 
     <div class="line"><label for="user_email">Email *: </label><input type="email" id="user_email" name="user_email" /></div>    
     <div class="line"><label for="user_phone">Telephone: </label><input type="text" id="user_phone" name="user_phone" /></div> 
     <div class="line"><label for="user_address">Address *: </label><input type="text" id="user_address" name="user_address" /></div> 
     <div class="line"><label for="user_pin">Post Code *: </label><input type="text" id="user_pin" name="user_pin"/></div> <br> 
     <div style="margin-left:50px;"><input type="submit" value="Submit" /></div> 
    </form> 

+1

'+ 1',但請詳細說明一下。 – samayo

+0

@Simon_eQ,我不認爲還有什麼要補充的。 – matewka

+0

我在評論你的答案之前評論過。但是,如果你想要的話,你可以告訴OP內聯樣式在語義上是不是正確的:) – samayo

1

爲了您的變量:你必須給輸入元素的名稱attribut,否則將無法在PHP可用。在PHP方面,它們不會以神奇的方式顯示爲變量(希望如果它們啓用了register_globals並且您有巨大的安全風險),它們將顯示在$_GET$_POST,具體取決於您的表單。

對於您的SQL:你是混合兩種語法,使用這樣的:

INSERT INTO register (user_name,user_password,user_surname,user_email,user_phone,user_address,user_pin) VALUES ('$user_name','$pass','$surname','$email','$phone','$address','$pin') 

INSERT INTO register SET user_name='$user_name',user_password='$pass',user_surname='$surname',user_email='$email',user_phone='$phone',user_address='$address',user_pin='$pin' 

注:我不知道那是什麼DEFAULT是應該做的/是。 mysql_*函數正在被棄用,請使用mysqli_*或PDO。看看準備好的語句,以防止MYSQL注入。

+0

謝謝..它爲我工作! – user2727874

2

使用以下

<?php 

$user_name = $_POST['user_name']; 
$pass = $_POST['user_password']; 
$surname = $_POST['user_surname']; 
$email = $_POST['user_email']; 
$phone = $_POST['user_phone']; 
$address = $_POST['user_address']; 
$pin = $_POST['user_pin']; 


$query="INSERT INTO register 
     (`user_name`,`user_password`,`user_surname`,`user_email`,`user_phone`,`user_address`,`user_pin`) values ('".$user_name."','".$pass."','".$surname."','".$email."','".$phone."','".$address."','".$pin."')"; 

$result = mysql_query($query,$con); 
if($result) 
{ 
echo "Details updated successfully"; 
} 
+0

'extract($ _ POST);'會比初始化變量並分配它們好得多。 –

+0

'extract()'是另一個注射門。我永遠不會在'$ _POST'或'$ _GET'上使用它。 –

+0

避免sql注入準備語句是最好的方法@GeraldSchneider –

0

您的問題,如已經指出的,是你沒有name屬性爲您的輸入,這意味着什麼都沒有張貼到您的形式設置服務器。一旦你修好了,你還應該修改你的後端mysql代碼來使用mysqli和prepared statements來提高安全性,因爲mysql_函數已被棄用。以下是您當前查詢的示例:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_database'); 

$stmt = $mysqli->prepare("INSERT INTO register 
(user_name,user_password,user_surname,user_email,user_phone,user_address,user_pin) 
VALUES (?,?,?,?,?,?,?)"); 

$stmt->bind_param('sssssss', 
    $post_user_name,$post_user_password,$post_user_surname,$post_user_email, 
    $post_user_phone,$post_user_address,$post_user_pin); 

// Quick and easy way to get all of your POST array values 
    // set to prefixed variables: 
extract($_POST, EXTR_PREFIX_ALL, "post"); 

// you can overwrite any of the variables before running the query, like: 

$post_user_password = password_hash($post_user_password, PASSWORD_DEFAULT); 

$stmt->execute(); 

if($stmt->affected_rows) { 
    echo "Details updated successfully"; 
} 
0

試試這個。

<?php 
$con=mysql_connect("db_server","$db_user","$db_pass");//Establishing Database connection 
mysql_select_db("$db_name",$con);//Selecting required database 
$user_name = $_POST['user_name']; 
$pass = $_POST['user_password']; 
$surname = $_POST['user_surname']; 
$email = $_POST['user_email']; 
$phone = $_POST['user_phone']; 
$address = $_POST['user_address']; 
$pin = $_POST['user_pin']; 


$query="INSERT INTO register 
     (`user_name`,`user_password`,`user_surname`,`user_email`,`user_phone`,`user_address`,`user_pin`) values ('".$user_name."','".$pass."','".$surname."','".$email."','".$phone."','".$address."','".$pin."')"; 

$result = mysql_query($query); 
if($result) 
{ 
echo "Record is inserted successfully!!"; 
} 
else 
{ 
echo "Record insertion failed"; 
} 
?>