2012-10-24 45 views
0

在我的代码中,我试图用来自表单中可修改文本字段的值更新我的数据库。但是,当查询运行时,它会擦除​​与用户正试图编辑的记录相关的所有字段(将它们变为“”)。任何人都可以看到为什么呢?使用PHP将信息更新到MySQL数据库中

<?php 
$dbuser = 'test'; 
$dbpass = 'test'; 
$host = '127.0.0.1'; 
$db = 'test'; 
mysql_connect($host, $dbuser, $dbpass) or die(mysql_error()); 
mysql_select_db($db) or die(mysql_error()); 

$result = mysql_query("SELECT * from characters"); 
$id = $_REQUEST['combo']; 
while($row = mysql_fetch_array($result)) 
{ 
    if($id == $row['_Key']) 
    { 
     echo "<form action=\"webpagetests.php\" method=\'post\'>"; 
     echo "<strong>Player ID:</strong> " . $row['_Key'] . "</br>"; 
     echo "<strong>Steam Name:</strong> " . $row['_SteamName'] . "</br>"; 
     echo "<strong>Steam ID:</strong>  " . $row['_SteamID'] . "</br></br>"; 

     echo "Name: </br><input name = \"name\" type=\"text\" size=\"25\" value=\"" . $row['_Name'] . "\"></br></br>"; 
     echo "Cash: </br><input name = \"cash\" type=\"text\" size=\"25\" value=\"" . $row['_Cash'] . "\"></br></br>"; 
     echo "Flags: </br><input name = \"flags\" type=\"text\" size=\"25\" value=\"" . $row['_Flags'] . "\"></br></br>"; 
     echo "Gender:</br> <input name = \"gender\" type=\"text\" size=\"25\" value=\"" . $row['_Gender'] . "\"></br></br>"; 
     echo "Model:</br> <input name = \"model\" type=\"text\" size=\"50\" value=\"" . $row['_Model'] . "\"></br></br>"; 
     echo "Faction: </br><input name = \"faction\" type=\"text\" size=\"25\" value=\"" . $row['_Faction'] . "\"></br></br></br>"; 
     echo "Recognised Names: </br><input name = \"names\" type=\"text\" size=\"50\" value=\"" . $row['_RecognisedNames'] . "\"</br>"; 
     echo "<input name=\"submit2\" type=\"submit\" value=\"Update\" />"; 
     echo "</form>"; 
    } 
} 
if (isset($_POST['submit2'])) 
{ 
    //$name = mysql_real_escape_string(htmlspecialchars($_POST['name'])); 
    $name = "Test"; 
    $cash = (int)$_POST['cash']; 
    $flags = mysql_real_escape_string(htmlspecialchars($_POST['flags'])); 
    $gender = mysql_real_escape_string(htmlspecialchars($_POST['gender'])); 
    $model = mysql_real_escape_string(htmlspecialchars($_POST['model'])); 
    $faction = mysql_real_escape_string(htmlspecialchars($_POST['faction'])); 
    $names = mysql_real_escape_string(htmlspecialchars($_POST['names'])); 

    mysql_query("UPDATE `test`.`characters` SET `_Name` = '$name', 
    `_Cash` = '$cash', 
    `_Model` = '$model', 
    `_Flags` = '$flags', 
    `_Gender` = '$gender', 
    `_Faction` = '$faction', 
    `_RecognisedNames` = '$names' 
    WHERE `characters`.`_Key` ='$id'") or die(mysql_error()); 
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL=webpagetest.php">'; 
}?> 
+1

不要使用'mysql _ *()'函数 - http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-function-in-php - 这不是你的问题情况,但应该指出。此外,包括您用来发布数据的实​​际HTML表单将有所帮助。 – Crontab

+0

您是否检查变量是否实际填充了预期值?这样你就可以知道这是你的表单/表单处理还是查询的问题。 – mboldt

+0

你没有设置变量$ id ... – superUntitled

回答

0

1)你有没有在那里你的SELECT语句子句,所以整个表从数据库转移到你的PHP脚本。地址:

$id = mysql_real_escape_string($id); 
$result = mysql_query("select * from characters where _Key = '$id'"); 

以提高性能和带宽利用率。更好的是,使用mysqli,您可以在其中使用预准备语句。

2)我没有看到在哪里设置了$id,当表单返回时,所以这可能也是一个问题。

+1

请不要发布暴露初学者到SQL注入的代码片段!向他们展示如何通过将他们引导到最新的解决方案,如[PDO](http://www.php.net/manual/en/intro.pdo.php)或[mysqli _ *](http: //ch2.php.net/manual/en/intro.mysqli.php)。 – CodeZombie

+0

@ ZombieHunter感谢您指出。 –