Мой PHP-скрипт вводит пустую информацию в MySQL DB! - PullRequest
1 голос
/ 21 декабря 2010

Когда я пытаюсь ввести данные из формы, которую я сделал, она добавляет новую запись, как я вижу из phpmyadmin, но не передает другие детали через

Я использую простую форму, которая собирает 9 полевых записейэто обновить.Вот что я имею в 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";

?>

Надеюсь, кто-то может помочь, поиск в сети, кажется, что-то подсказывает о глобальных переменных - но я не знаю, контролирую ли я это как размещенный на нем сайт.

это форма регистрации:

<!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";

?>

Я понимаю озабоченность людей по поводу безопасности, но, пожалуйста, понимайте это только длясо мной возиться и создать базовую форму регистрации для моей гильдии, я не буду запрашивать данные кредитной карты:)

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Вау, помедленнее. Вы даже не избежали этих данных!

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

Или чтобы избежать всего этого:

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

Обратите внимание, что второе решение не совсем надежно. Может привести к некоторым странным результатам. Как правило, эти входные данные лучше выполнять через функцию / класс для проверки и очистки.

При возникновении проблемы с призраком попробуйте это и запишите ответ после отправки формы (поместите справа вверху):

var_dump($_POST);
exit;

Вы неправильно указали атрибут метода в своем запросе, поэтому он не работает.

1 голос
/ 21 декабря 2010

Ваш метод формы установлен в POST? - если вы не добавили это явно, переменные будут внутри суперглобального $_GET, поэтому ваши переменные будут выглядеть так:

$realname = $_GET['realname'];

Если он установлен в POST - пожалуйста, сделайте var_dump($_POST) в верхней части вашего скрипта и посмотрите, есть ли какие-либо переменные, вносящие его в ваш скрипт.

Что-то еще, что я видел раньше, вызывается, когда люди перенаправляют в .htaccess с domain.com на www.domain.com, и они публикуют подробный сценарий на domain.com/script.php, а затем сценарий перенаправляет на www.domain.com/script.php, и это очищает POST.

EDIT

Вы неправильно написали 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']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...