Почему я получаю неопределенную ошибку индекса? - PullRequest
1 голос
/ 27 июля 2011

Я добавил поле blob, чтобы добавить изображение в базу данных MYSQL через форму php, и теперь я получаю сообщение об ошибке Undefined Error в строке, содержащей новое поле, и файл для этого поля не был загружен, но все текстовые поля были добавлены в базу данных.

Вот моя форма:

    <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);

Это как-то связано с тем, что новое поле является двоичным? Файл, который я загружаю в это поле, имеет размер 11 КБ.

Ответы [ 3 ]

1 голос
/ 27 июля 2011

У вас нет полей ввода для "game_category", "game_type", "game_console" и т. Д., Поэтому их нет в $ _POST, и предупреждения PHP, вероятно, включены (неопределенный индекс является предупреждением).И вы НИКОГДА не должны вставлять $ _POST прямо в базу данных, по крайней мере, используйте функцию mysql_real_escape_string, прежде чем вставлять их.Читайте о внедрении SQL, и вы поймете, почему.

1 голос
/ 27 июля 2011

Вы получаете неопределенную ошибку индекса, потому что $ _POST не содержит game_category, game_type и game_console.(или любое поле оставлено пустым)

Также:

  • Я думаю, что сохранение в файле такой базы данных не работает.(Пример здесь )
  • Помещение переменных $ _POST (или любого пользовательского ввода) непосредственно в SQL-запрос - плохая идея, лучше избегать значений перед вставкой.смотрите mysql_real_escape_string
1 голос
/ 27 июля 2011

Прежде всего, вам нужно экранировать все эти $_POST переменные, когда вы помещаете их в MySQL, читать об уязвимостях SQL-инъекций и mysql_read_escape_string();

Ваша ошибка вызывается при вставке $_POST['game_type'] и $_POST['console'], но у вас нет поля формы для них.

EDIT

В вашем $_POST отсутствует поле 'cover', так как это загрузка файла, и, следовательно, вместо этого вы увидите переменную $_FILES, с которой вам придется читать загрузку файлов с помощью PHP так как вы полностью упускаете этот бит логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...