为什么我收到未定义的索引错误?

时间:2011-07-27 19:16:06

标签: php mysql database blob

我添加了一个blob字段,通过php表单将图像添加到我的MYSQL数据库,现在我在包含新字段的行上收到一条未定义的错误消息,并且该字段的文件没有上传,但所有文本字段已添加到数据库中。

这是我的表格:

    <form action="http://www.yeahthatrocks.com/update.php" method="post" enctype="multipart/form-data">
    Game Name:  <input name="game_name" type="text" size="25" maxlength="255" /><br></br>
    Release Date:  <input name="release_date" type="text" size="25" /><p></p>

    Cover Image: <input type="file" name="cover" id="cover"><br><br>
<p>Console:
  <select name="game_console">
    <option value="PS3">PS3</option>
    <option value="Xbox 360">Xbox 360</option>
    <option value="Both">Both</option>
  </select>

  Game Category:  
  <select name="game_category">
    <option value="Retail">Retail</option>
    <option value="PSN">PSN</option>
    <option value="Arcade">Arcade</option>
    <option value="DLC">DLC</option>
  </select>

  Game Type:  
  <select name="game_type">
    <option value="Action">Action</option>
    <option value="Action RPG">Action RPG</option>
    <option value="Adventure">Adventure</option>
    <option value="Board">Board</option>
    <option value="Card">Card</option>
    <option value="Casino">Casino</option>
    <option value="Educational">Educational</option>
    <option value="Fighting">Fighting</option>
    <option value="Flight">Flight</option>
    <option value="Game Show">Game Show</option>
    <option value="Hunting">Hunting</option>
    <option value="Music">Music</option>
    <option value="Other">Other</option>
    <option value="Pinball">Pinball</option>
    <option value="Platformer">Platformer</option>
    <option value="Puzzle">Puzzle</option>
    <option value="Racing">Racing</option>
    <option value="RPG">RPG</option>
    <option value="Shooter">Shooter</option>
    <option value="Sports">Sports</option>
    <option value="Strategy">Strategy</option>
    <option value="Virtual Pet">Virtual Pet</option>
  </select>


 </p> 

    <input name="submit" type="submit" value="upload" />
    </form>

这是update.php的相关部分:

$sql="INSERT INTO games (game_name, release_date, game_category, game_type, game_console, cover)
VALUES
('$_POST[game_name]','$_POST[release_date]','$_POST[game_category]','$_POST[game_type]','$_POST[game_console]','$_POST[cover]')";

mysql_query($sql);

它与新字段是二进制有关吗?我上传到该字段的文件是11kb。

3 个答案:

答案 0 :(得分:1)

首先,您需要在将它们放入MySQL时转义所有这些$_POST变量,阅读SQL注入漏洞和mysql_read_escape_string();

您在插入$_POST['game_type']$_POST['console']时触发了错误,但您没有表单字段。

修改

您的$_POST缺少'封面'字段,因为它是文件上传,因此会以$_FILES变量形式出现,您必须在uploading files with PHP上阅读该变量因为你完全错过了这一点逻辑。

答案 1 :(得分:1)

您没有“game_category”“game_type”,“game_console”等的输入字段,因此$ _POST中不存在这些字段,并且可能会启用PHP警告(未定义的索引是警告)。并且你永远不应该将$ _POST直接插入数据库,至少在插入之前使用mysql_real_escape_string函数。阅读SQL注入,您将了解原因。

答案 2 :(得分:1)

您收到一个未定义的索引错误,因为$ _POST不包含game_category和game_type以及game_console。 (或任何字段留空)

此外:

  • 我认为将文件存储到这样的数据库中是行不通的。 (示例here
  • 将$ _POST(或任何用户输入)变量直接放入sql查询是个坏主意,最好在插入之前转义值。见mysql_real_escape_string