Нет ошибок в этом скрипте PHP, но не заполняет базу данных SQL - PullRequest
0 голосов
/ 20 января 2012

Я действительно не знаю, что с этим происходит, я ломал голову над этим два часа подряд. Все, что я пытаюсь сделать, это получить информацию из двух полей в форме и вставить ее в базу данных. Я знаю, что мой сценарий очень простой и небезопасный, но я только учусь ... он не будет использоваться на рабочем сайте. Он позволяет мне отправлять данные и выводит «Спасибо, вы зарегистрировались ...», но никогда не вставляет их в базу данных. Я дважды проверил все настройки подключения и т. Д. Я не знаю.

Мой код указан ниже:

<?php 
 mysql_connect("localhost", "USERNAME", "PASSWORD") or die(mysql_error()); 
 mysql_select_db("DATABASE_NAME") or die(mysql_error()); 
 if (isset($_POST['submit'])) { 
 mysql_query("INSERT INTO members (username, password) VALUES ('".$_POST['myusername']."', '".$_POST['mypassword']."')") or die(mysql_error());
}
?>

<html>
<body> 
<h1>Registered</h1>
<p>Thank you, you have registered - you may now login</a>.</p>
</body>
</html>

EDIT:

А вот код формы:

<table id="mytable" cellspacing="0">
<FORM name="form1" ACTION="register.php" METHOD=get>
<tr>
<th scope="col" class="ttopl">User Name:</th>
<th scope="col" class="ttopl"><input name="myusername" type="text" size"20"></input>      </th>
</tr>
<tr>
<th scope="col" class="ttopl">Password:</th>
<th scope="col" class="ttopl"><input name="mypassword" type="text" size"20"></input>    </hd>
</tr>
<tr>
<th scope="col" class="ttopl"></th>
<th scope="col" class="ttopl"><input type="submit" value="Register" class="loginButton">

Ответы [ 5 ]

1 голос
/ 20 января 2012

Вы используете неправильный метод в вашей форме:

<FORM name="form1" ACTION="register.php" METHOD=get>

Измените это на:

<FORM name="form1" ACTION="register.php" METHOD="POST">

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

  1. хэширование / соляция пароля
  2. с использованием PDO с подготовленными инструкциями, чтобы избежать внедрения SQL *

Редактировать: Вытакже отсутствует атрибут name в вашей HTML-форме, и вы проверяете его в файле php.Вам нужно изменить кнопку отправки на:

<input type="submit" name="submit" value="Register" class="loginButton">

Но более надежный способ проверить POST в php - это:

if ($_SERVER['REQUEST_METHOD'] === 'POST')
1 голос
/ 20 января 2012

Я предполагаю, что if (isset($_POST['submit'])) не вызывает, удостоверяется, что это атрибут имени, а не идентификатор.Публикация кода формы будет очень полезна.

0 голосов
/ 20 января 2012

В дополнение к ответу Зака ​​ваша кнопка «Отправить» вообще не имеет названия.Из-за этого isset($_POST['submit']) всегда будет ложным, а ваш запрос никогда не будет выполняться.

Поскольку вы только знакомитесь с PHP, вы легко можете отладить ситуации, подобные этой, - использовать var_dump() или print_r() для проверки ваших переменных.Если вы посмотрите на $ _POST и увидите, что в нем нет ключа с именем submit, вы поймете, что ваш тест на отправку некорректен.

0 голосов
/ 20 января 2012

Единственная возможная вещь, которая может пойти не так, как надо, - это выражение if, если значение равно false.Если что-то пойдет не так, вы получите сообщение об ошибке SQL, а не страницу «Спасибо».

Итак, сначала проверьте, является ли 'submit' фактическим именем элемента формы, а также проверьте, установлен ли он.Также проверьте, используете ли вы метод POST для отправки формы.

0 голосов
/ 20 января 2012

Прежде всего, этот запрос подготовлен для инъекционной атаки, я настоятельно рекомендую вам взглянуть на подготовленные операторы.

вернуться к вашей ситуации ...

add

var_dump( mysql_error() );

сразу после запроса, и он должен сообщить вам, что случилось с запросом ...

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