2010-12-20 89 views
1

當我嘗試從我已增加了一個新的項目,我可以看到從phpMyAdmin的,但我用一個簡單的表格,收集9周的Fileds發佈的更新跨越我的PHP腳本輸入空白信息到MySQL數據庫!

不調等細節表單中輸入的數據.PHP。以下是我在update.php

<?php 
$realname = $_POST['realname']; 
$age = $_POST['age']; 
$country = $_POST['country']; 
$gamename = $_POST['gamename']; 
$gamelevel = $_POST['gamelevel']; 
$itemlevel = $_POST['itemlevel']; 
$class = $_POST['class']; 
$played = $_POST['played']; 
$support = $_POST['support']; 

mysql_connect ("localhost", "mydb_userid", "MYPASSWORD") or die ('Error: ' . mysql_error()); 
mysql_select_db ("mydb_recruitment"); 

$query="INSERT INTO applicants (ID, realname, age, country, gamename, gamelevel, itemlevel, class, played, support)VALUES ('NULL','".$realname."','".$age."','".$country."','".$gamename."','".$gamelevel."','".$itemlevel."','".$class."','".$played."','".$support."')"; 

mysql_query($query) or die ('Error updating DB'); 

echo "You have sucessfully sent an application. Your details will be reviewed and someone will get back to you"; 

?> 

希望有人能幫助,搜索網似乎sugest一些關於全局變量 - 但我不知道如果我有,作爲其一個託管網站的控制。

這是註冊表單:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Candidate Registration</title> 
</head> 

<body> 

<form medthod="post" action="update.php"> 

Real Name:<br /> 
<input type="text" name="realname" size="50" /><br /> 

Age:<br /> 
<input type="text" name="age" size="10" /><br /> 

Country:<br /> 
<input type="text" name="country" size="20" /><br /> 

In Game Name:<br /> 
<input type="text" name="gamename" size="30" /><br /> 

In Game Level:<br /> 
<input type="text" name="gamelevel" size="10" /><br /> 

In Game Item Level:<br /> 
<input type="text" name="itemlevel" size="10" /><br /> 

Class Played:<br /> 
<input type="text" name="class" size="30" /><br /> 

How long have you played wow?:<br /> 
<input type="text" name="played" size="10" /><br /> 

Please enter a brief statement of why you want to join:<br /> 
<input type="text" name="support" size="5000" /><br /> 
<br /> 
<input type="submit" value="Update DB" /> 

</form> 
</body> 
</html> 

這是update.php形式

<?php 
$realname = $_POST['realname']; 
$age = $_POST['age']; 
$country = $_POST['country']; 
$gamename = $_POST['gamename']; 
$gamelevel = $_POST['gamelevel']; 
$itemlevel = $_POST['itemlevel']; 
$class = $_POST['class']; 
$played = $_POST['played']; 
$support = $_POST['support']; 

mysql_connect ("localhost", "mydb_daniel", "mypwd") or die ('Error: ' . mysql_error()); 
mysql_select_db ("mydb_recruitment"); 

$query="INSERT INTO applicants (ID, realname, age, country, gamename, gamelevel, itemlevel, class, played, support)VALUES ('NULL','".$realname."','".$age."','".$country."','".$gamename."','".$gamelevel."','".$itemlevel."','".$class."','".$played."','".$support."')"; 

mysql_query($query) or die ('Error updating DB'); 

echo "You have sucessfully sent an application. Your details will be reviewed and someone will get back to you"; 

?> 

我瞭解sercurity人民的擔憂,但請了解周圍這只是爲我很亂,爲我的公會產生一個基本的註冊表格,我不會請求信用卡詳細信息:)

+0

您是否指定了html表單元素的名稱屬性,例如'' – systemovich 2010-12-20 23:11:49

+0

你拼寫錯誤的方法,請更新並重試 – robjmills 2010-12-20 23:19:11

回答

1

您的表單方法是否設置爲POST? - 除非你已明確添加這個變量將是$_GET超全局所以你的變量中會是這樣的:

$realname = $_GET['realname']; 

如果它被設置爲開機自檢 - 請在你的腳本的頂部做一個var_dump($_POST),看看任何變量都將它傳遞給腳本。

我以前見過的其他東西是當人們將.htaccess從domain.com重定向到www.domain.com時發生的,他們將腳本顯式發送到domain.com/script.php,然後腳本重定向到www.domain.com/script.php,這將清空POST。

編輯

你拼寫錯誤method在你的表單標籤 - 如果你更新這個那麼它應該工作作爲你的拼寫錯誤會導致該變量被作爲GET瓦爾發送。

可以解決您的安全問題,在這樣的基本途徑:

$realname = mysql_real_escape_string($_POST['realname']); 
$age = mysql_real_escape_string($_POST['age']); 
$country = mysql_real_escape_string($_POST['country']); 
$gamename = mysql_real_escape_string($_POST['gamename']); 
$gamelevel = mysql_real_escape_string($_POST['gamelevel']); 
$itemlevel = mysql_real_escape_string($_POST['itemlevel']); 
$class = mysql_real_escape_string($_POST['class']); 
$played = mysql_real_escape_string($_POST['played']); 
$support = mysql_real_escape_string($_POST['support']); 
+0

是的,它設置爲 – Daniel 2010-12-20 22:48:41

+0

基督,方式點豬。編輯你的答案,包括答案,編輯包含我的建議,實際上要求提問者選擇你的答案。真?你的正直人在哪裏?請注意,在您完全無奈之後,我在評論中詢問了我的意見。 – 2010-12-20 23:39:35

+0

@ Zeph haha​​。我編輯了我的答案,以包含*我*回答的問題的答案。我添加了mysql_real_escape_string來回答他關於安全性的進一步問題,我不知道你發明了這種技術!我並沒有試圖讓自己滿意,但是當新的海報不理解他們需要接受答案時,這令人沮喪。我會很高興你有一個接受的答案,你真的回答了他問的問題 - 如果你記住 - 實際上不是關於安全性,而是爲什麼他的表單不工作 – robjmills 2010-12-20 23:44:18

1

哇,慢下來。你甚至沒有逃過這些數據!

$realname = mysql_real_escape_string($_POST['realname']); 

或者逃避這一切:

$_POST = array_map('mysql_real_escape_string', $_POST); 

注意第二種解決方案是並不完全可靠。會產生一些奇怪的結果。通常通過函數/類運行這些輸入以進行驗證和清理通常會更好。

在你的鬼的問題,試試這個,注意表格後提交響應(擺正在頂部):

var_dump($_POST); 
exit; 

你拼寫方法屬性錯在你的查詢,這就是爲什麼它不工作。

+0

是真的,但一次只能做一件事:) – robjmills 2010-12-20 22:56:08

+1

一點都不,應該同時完成!這種事情應該是必需的。開發人員只有在他們傾聽的人(如你)不斷向他們重複時纔會轉變他們的想法:安全第一! – 2010-12-20 22:58:39

+0

我同意你的看法 - array_map建議並不是一個好的開端,因爲它真的忽略了基礎知識,只有在你能夠理解它會導致的正面和負面問題時才應該考慮。 – robjmills 2010-12-20 23:00:10