Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Не заносит данные в таблицу
vq_set  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 31024
На форуме: 5 лет, 12 дней
Карма:




Сделал простенькую регистрацию, ничего лишнего:

<?php
include "config.php";

$ip = $_SERVER['REMOTE_ADDR'];

$name=$_POST['name'];
$pass=$_POST['pass'];
$mail=$_POST['mail'];

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

mysql_query ("INSERT INTO users (name, pass, ip, mail) values('".$_POST ["name"]."','".md5($_POST ["pass"])."','".$ip."','".addslashes($_POST ["mail"])."')") or die("Invalid query: " . mysql_error());
?>

<html>
<
body>
<
form method="POST" action="index.php">
Логин: <input type="text" name="name">
Пароль: <input type="text" name="pass">
E-mail: <input type="text" name="mail">
<
input type="submit" value="Отправить">
</
form>
</
body>
</
html>


Регистрирует, но, заполняю поля: testuser, testpass, test@test.com
Пароль заносит вроде нормально, ip обрезанный какой-то, а имени и почты вообще нет:

user posted image


Все поля нормальные name char(16), pass char(32), mail char(32), ip char(16)

В чем дело?



Спустя 27 минут, 15 секунд (14.01.2012 - 16:21) Placido написал(а):
Цитата (vq_set @ 14.01.2012 - 14:54)
...pass char(16)...

Ну, вообще-то, md5() возвращает "хэш в виде 32-символьного шестнадцатеричного числа. " http://www.php.net/manual/ru/function.md5.php

Спустя 2 минуты, 49 секунд (14.01.2012 - 16:24) vq_set написал(а):
Хы, спасибо, исправим! А как быть с остальными?

Спустя 8 минут, 16 секунд (14.01.2012 - 16:32) rooor написал(а):
А где условие для записи? о_О
Юзер только открыл страницу, а в базу уже пишется пустой запрос...

Спустя 4 минуты, 10 секунд (14.01.2012 - 16:36) vq_set написал(а):
Можно подробнее? Покажешь пример?

Спустя 21 секунда (14.01.2012 - 16:36) Invis1ble написал(а):
vq_set
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
.....

и почитай про sql-инъекции

Спустя 40 секунд (14.01.2012 - 16:37) vq_set написал(а):
А вот это нормально?

user posted image

Спустя 2 минуты, 19 секунд (14.01.2012 - 16:39) rooor написал(а):
а чё кодировки разные? лучше в UTF

Спустя 1 минута, 2 секунды (14.01.2012 - 16:40) vq_set написал(а):
Invis1ble, спасибо, ошибки показало, а в чем проблема собственно, я только
изучаю php, так знаю c++, поэтому сильно-то не вчитываюсь, практически все то же самое.

Спустя 54 секунды (14.01.2012 - 16:41) vq_set написал(а):
rooor, да, знаю, но это так, балуюсь, проверяю знания, поэтому зашита и т.п. мне не важно.

Спустя 2 минуты, 20 секунд (14.01.2012 - 16:44) vq_set написал(а):
Как думаете, может запрос взять в if(isset()); ?

Спустя 16 секунд (14.01.2012 - 16:44) rooor написал(а):
<?php
include "config.php";

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);
// что выше - не трогал, лучше переделать и засунуть в конфиг
if(isset($_POST['send']) && !empty(trim($_POST['name'])) && !empty(trim($_POST['pass'])) && !empty(trim($_POST['mail'])))
{
$ip = $_SERVER['REMOTE_ADDR'];
mysql_query ("INSERT INTO `users` (`name`, `pass`, `ip`, `mail`)
VALUES('"
.mysql_escape_string($_POST ['name'])."',
'"
.md5($_POST ['pass'])."',
'"
.$ip."',
'"
.mysql_escape_string($_POST ['mail'])."')") or die("Invalid query: " . mysql_error());
}

?>

<html>
<
body>
<
form method="POST" action="index.php">
Логин: <input type="text" name="name">
Пароль: <input type="text" name="pass">
E-mail: <input type="text" name="mail">
<
input type="submit" name="send" value="Отправить">
</
form>
</
body>
</
html>

upd: поправил запрос)

Спустя 10 секунд (14.01.2012 - 16:44) Invis1ble написал(а):
vq_set
проблема в том, что при первом заходе юзера данных в $_POST нет (собственно, тебе интерпретатор должен выдать предупреждения при включенном отображении ошибок) => в БД попадают пустые значения
проверка делается примерно так:
if (isset($_POST['k1'], $_POST['k2'], ...)) {
// валидация и запись данных в БД
}

Спустя 9 минут (14.01.2012 - 16:53) vq_set написал(а):
rooor, спасибо конечно, но зачем так сложно?

Invis1ble, сделал как ты сказал, в прочем до твоего поста я так и сделал, только в c++ не ",", а просто "and".

Но теперь он орет, по поводу:

$name=$_POST['name'];
$pass=$_POST['pass'];
$mail=$_POST['mail'];

Орет так:

Notice: Undefined index: name in C:\server2go\server2go\htdocs\CMS\reg.php on line 12

Notice: Undefined index: pass in C:\server2go\server2go\htdocs\CMS\reg.php on line 13

Notice: Undefined index: mail in C:\server2go\server2go\htdocs\CMS\reg.php on line 14

Спустя 47 секунд (14.01.2012 - 16:54) vq_set написал(а):
Исправил)

Спустя 1 минута, 28 секунд (14.01.2012 - 16:55) Invis1ble написал(а):
vq_set
Цитата
только в c++ не ",", а просто "and"

в php тоже работает такой синтаксис, просто "," - сахар
Цитата
Но теперь он орет, по поводу:

$name=$_POST['name'];
$pass=$_POST['pass'];
$mail=$_POST['mail'];

Орет так:

Notice: Undefined index: name in C:\server2go\server2go\htdocs\CMS\reg.php on line 12

Notice: Undefined index: pass in C:\server2go\server2go\htdocs\CMS\reg.php on line 13

Notice: Undefined index: mail in C:\server2go\server2go\htdocs\CMS\reg.php on line 14

код в студию

Спустя 1 минута, 3 секунды (14.01.2012 - 16:56) rooor написал(а):
vq_set
Это сложно о_О?
Ну да, лучше пусть ошибки валятся и сайт хакают) Зато всё просто будет написано))
Вобщем я тебе дал готовый пример, разбирайся, учись)

Спустя 20 секунд (14.01.2012 - 16:57) vq_set написал(а):
Теперь попросту не заносит никаких данных, регистрация проходит, а бд пуста.

Спустя 53 секунды (14.01.2012 - 16:58) vq_set написал(а):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');

include "config.php";

$ip = $_SERVER['REMOTE_ADDR'];

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

if(isset($_POST['name'], $_POST['pass'], $_POST['mail']))
{
$name=$_POST['name'];
$pass=$_POST['pass'];
$mail=$_POST['mail'];
mysql_query ("INSERT INTO users (name, pass, ip, mail) values('".$_POST ["name"]."','".md5($_POST ["pass"])."','".$ip."','".addslashes($_POST ["mail"])."')") or die("Invalid query: " . mysql_error());
}
?>

<html>
<
body>
<
form method="POST" action="index.php">
Логин: <input type="text" name="name">
Пароль: <input type="password" name="pass">
E-mail: <input type="text" name="mail">
<
input type="submit" value="Отправить">
</
form>
</
body>
</
html>


rooor, я обязательно переделаю, как только возьмусь за что-то серьезное, это локалхост, поэтому не расчитываю на хакерские атаки))

Спустя 2 минуты, 5 секунд (14.01.2012 - 17:00) rooor написал(а):
vq_set
лучше сразу приучаться писать по-нормальному, чем потом переучиваться

Спустя 1 минута, 35 секунд (14.01.2012 - 17:01) Invis1ble написал(а):
Цитата
if(isset($_POST['name'], $_POST['pass'], $_POST['mail']))
{
$name=$_POST['name'];
$pass=$_POST['pass'];
$mail=$_POST['mail'];
mysql_query ("INSERT INTO users (name, pass, ip, mail) values('".$_POST ["name"]."','".md5($_POST ["pass"])."','".$ip."','".addslashes($_POST ["mail"])."')") or die("Invalid query: " . mysql_error());
}

тут не могут быть notice
непонятно, зачем ты создаешь 3 доп. переменные, если ты непосредственно из $_POST пишешь в БД

Спустя 1 минута, 22 секунды (14.01.2012 - 17:03) vq_set написал(а):
Invis1ble, да, непонятно, зачем вообще, я их нигде не использую.

Спустя 1 минута, 14 секунд (14.01.2012 - 17:04) Invis1ble написал(а):
у тебя action стоит на index.php, а notice'ы в reg.php

Спустя 1 минута, 51 секунда (14.01.2012 - 17:06) vq_set написал(а):
Все-равно, ошибок-то нет, но в базе пусто.

у тебя action стоит на index.php, а notice'ы в reg.php
-никаких notic`ов нет уже постов 5-6. А вообще, ты о чем?

Спустя 1 минута, 51 секунда (14.01.2012 - 17:08) Invis1ble написал(а):
Цитата
-никаких notic`ов нет уже постов 5-6. А вообще, ты о чем?

а, ну так надо было написать об этом smile.gif

Цитата
Все-равно, ошибок-то нет, но в базе пусто.

как скрипт называется? reg.php ?

Спустя 1 минута, 15 секунд (14.01.2012 - 17:09) vq_set написал(а):
Да

Спустя 38 секунд (14.01.2012 - 17:09) Invis1ble написал(а):
а в форме в action что стоит? smile.gif

Спустя 1 минута, 4 секунды (14.01.2012 - 17:11) vq_set написал(а):
А-а-а, я думал это только переадресация такая, щас исправим.

Спустя 3 минуты, 37 секунд (14.01.2012 - 17:14) vq_set написал(а):
Работает, ЙААЗЬ! Скрипт моей мечты! *facepalm

Ладно, но ip-шник все такой же: 1270, а должен быть: 127.0.0.1

Спустя 1 минута, 39 секунд (14.01.2012 - 17:16) vq_set написал(а):
кажется он у меня int, надо char

Спустя 1 минута, 40 секунд (14.01.2012 - 17:17) vq_set написал(а):
Все отлично! Большое спасибо!



Спустя 8 минут, 11 секунд vq_set написал(а):
А как со страницы регистрации, после успешной регистрации выполнить переадресацию?

Спустя 8 минут, 45 секунд (14.01.2012 - 17:26) Invis1ble написал(а):
header('Location: scriptname.php');

Спустя 2 минуты, 37 секунд (14.01.2012 - 17:29) vq_set написал(а):
а разве оно не сразу перенесет?

Спустя 1 минута, 2 секунды (14.01.2012 - 17:30) Invis1ble написал(а):
с какой стати? smile.gif
это нужно добавить после записи в БД

Спустя 39 секунд (14.01.2012 - 17:31) vq_set написал(а):
попробую



Спустя 2 минуты, 20 секунд vq_set написал(а):
Спасибо.

Спустя 3 минуты, 37 секунд (14.01.2012 - 17:34) Invis1ble написал(а):
пожалуйста

Спустя 23 минуты, 49 секунд (14.01.2012 - 17:58) vq_set написал(а):
Вот уже файл login.php:
<?php

include "config.php";

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

if(isset($_POST['name'], $_POST['pass']))
{
$name_check = mysql_query(SELECT FROM users WHERE name = $_POST['name']);
$pass_check = mysql_query(SELECT FROM users WHERE pass = $_POST['pass']);
if($_POST['name']=$name_check and $_POST['pass']=$pass_check) header(Location: anypage.php); else {
echo "Неверные данные!";
header(Location: index.php);
}
}


?>


Что опять не так?

Спустя 6 минут, 24 секунды (14.01.2012 - 18:04) Invis1ble написал(а):
и что, у тебя работает этот скрипт?
в нем же 100500 ошибок

Спустя 3 минуты, 46 секунд (14.01.2012 - 18:08) vq_set написал(а):
Ну поправьте комрад!

*Пожалуйста wink.gif

Спустя 1 минута, 33 секунды (14.01.2012 - 18:10) Invis1ble написал(а):
так пропиши в начале скрипта отображение ошибок и сам все увидишь
начать можно с того, что у тебя строки вне кавычек
а поправлять нет времени, я работаю

Спустя 2 минуты, 21 секунда (14.01.2012 - 18:12) vq_set написал(а):
Сейчас все сделаем!

Спустя 2 минуты, 43 секунды (14.01.2012 - 18:15) vq_set написал(а):
Точно, исправил кавычки, а вот насчет проверки я не знаю как по-другому, на си-шке бы прокатило.

Спустя 2 минуты, 16 секунд (14.01.2012 - 18:17) vq_set написал(а):
еще на пароль md5 поставить надо...

Спустя 55 секунд (14.01.2012 - 18:18) vq_set написал(а):
Вот исправленный:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');

include "config.php";

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

if(isset($_POST['name'], $_POST['pass']))
{
$name_check = mysql_query("SELECT FROM users WHERE name = $_POST['name']");
$pass_check = mysql_query("SELECT FROM users WHERE pass = md5($_POST ['pass']");
if($_POST['name']=$name_check and $_POST['pass']=$pass_check) header('Location: anypage.php'); else {
echo "Неверные данные!";
header('Location: index.php');
}
}


?>

Спустя 50 секунд (14.01.2012 - 18:19) Invis1ble написал(а):
а sql-запрос в кавычки Пушкин брать будет?

Спустя 1 минута, 8 секунд (14.01.2012 - 18:20) vq_set написал(а):
Учиться, учиться и еще раз учиться! ©

Спустя 2 минуты, 31 секунда (14.01.2012 - 18:22) vq_set написал(а):
Исправил, теперь:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\server2go\server2go\htdocs\CMS\login.php on line 12

Спустя 44 секунды (14.01.2012 - 18:23) vq_set написал(а):
line 12:
$name_check = mysql_query("SELECT FROM users WHERE name = $_POST['name']");

Спустя 1 минута, 3 секунды (14.01.2012 - 18:24) Invis1ble написал(а):
$query =
"select count(*)
from `users`
where `name` = '"
. mysql_real_escape_string($_POST['name']) . "' and
`pass` = '"
. md5($_POST['pass']) . "'";
$result = mysql_query($query) or die(mysql_error());
if (mysql_result($result, 0)) {
// авторизован
}

Спустя 1 минута, 19 секунд (14.01.2012 - 18:26) vq_set написал(а):
Да...Хоть и библиотеки одинаковые с Си ++, но разница есть, даже существенная.

Спустя 21 минута, 49 секунд (14.01.2012 - 18:47) Invis1ble написал(а):
дело не только в библиотеках, разве в плюсах SELECT FROM users WHERE ... - синтаксически верная конструкция?

Спустя 4 минуты, 38 секунд (14.01.2012 - 18:52) vq_set написал(а):
MySQL не знаю, вот учу.

Что тут неправильно:


DROP DATABASE testdb;

CREATE DATABASE testdb CHARACTER SET cp1251;
USE testdb;

CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` char(16) DEFAULT NOT NULL,
`mail` char(32) DEFAULT NOT NULL,
`ip` char(32) DEFAULT NOT NULL,
`pass` char(32) DEFAULT NOT NULL,
PRIMARY KEY (`id`, `name`)
)
ENGINE=MyISAM DEFAULT CHARACTER=cp1251 AUTO_INCREMENT=2;

Спустя 45 секунд (14.01.2012 - 18:53) vq_set написал(а):

Ответ MySQL:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
`mail` char(32) DEFAULT NOT NULL,
`ip` char(32) DEFAULT NOT NULL,
'
at line 3



Спустя 2 минуты, 21 секунда (14.01.2012 - 18:55) Invis1ble написал(а):
`name` char(16) NOT NULL DEFAULT ''

Спустя 38 секунд (14.01.2012 - 18:56) vq_set написал(а):
А кавычки зачем?

Спустя 3 минуты, 13 секунд (14.01.2012 - 18:59) Invis1ble написал(а):
пустое значение чтобы по дефолту было

Спустя 1 минута, 30 секунд (14.01.2012 - 19:00) Dron19 написал(а):
Цитата (vq_set @ 14.01.2012 - 13:44)
Как думаете, может запрос взять в if(isset()); ?

нет, иссетом ПОСТ не проверяется, проверяй их на пустоту функцией empty

Спустя 1 минута, 34 секунды (14.01.2012 - 19:02) Invis1ble написал(а):
Dron19
Цитата
нет, иссетом ПОСТ не проверяется

с чего это? smile.gif

Спустя 41 секунда (14.01.2012 - 19:03) vq_set написал(а):
Ошибся, исправил на:

DROP DATABASE testdb;

CREATE DATABASE testdb CHARACTER SET cp1251;
USE testdb;

CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` char(16) DEFAULT NULL,
`mail` char(32) DEFAULT NULL,
`ip` char(32) DEFAULT NOT NULL,
`pass` char(32) DEFAULT NULL,
PRIMARY KEY (`id`, `name`)
)
ENGINE=MyISAM DEFAULT CHARACTER=cp1251 AUTO_INCREMENT=2;


Ответ:

Ответ MySQL:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
`pass` char(32) DEFAULT NULL,
PRIMARY KEY (`id`, `name`)
) ENGINE'
at line 5


Спустя 45 секунд (14.01.2012 - 19:03) vq_set написал(а):
Также кавычками править?

Спустя 23 секунды (14.01.2012 - 19:04) Invis1ble написал(а):
потому что default not null небывает

Спустя 1 минута, 12 секунд (14.01.2012 - 19:05) vq_set написал(а):
Нифига.

Спустя 1 минута, 14 секунд (14.01.2012 - 19:06) Dron19 написал(а):
Цитата (Invis1ble @ 14.01.2012 - 16:02)
Dron19
Цитата
нет, иссетом ПОСТ не проверяется

с чего это? smile.gif

с того что смысла нету пост иссетом проверять, т.к если его не существует, то значение будет NULL и empty его тоже не пропустит, а так если проверять isset`ом, то еще придется проверять их и на пустоту, не пришли ли они не заполненные, но существующие, а зачем ходить в магазин стоящий на соседней улице обойдя весь город? wink.gif Поэтому смысла нет

Спустя 1 минута, 16 секунд (14.01.2012 - 19:08) johniek_comp написал(а):
Где же тебя так C++ научили, в институте?

Спустя 35 секунд (14.01.2012 - 19:08) Invis1ble написал(а):
а если мне нужно проверить скажем email на паттерн, один хрен проверку делать
так что не нужно быть таким категоричным

Спустя 1 минута, 46 секунд (14.01.2012 - 19:10) vq_set написал(а):
Исправил, но теперь:
Ответ MySQL:  

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=cp1251 AUTO_INCREMENT=2' at line 8

Спустя 1 минута, 24 секунды (14.01.2012 - 19:11) Invis1ble написал(а):
vq_set
поставь phpMyAdmin и составь таблицу с помощью UI, потом посмотришь правильный синтаксис запроса, который сгенерит pma

Спустя 37 секунд (14.01.2012 - 19:12) Dron19 написал(а):
Цитата (Invis1ble @ 14.01.2012 - 16:08)
а если мне нужно проверить скажем email на паттерн, один хрен проверку делать
так что не нужно быть таким категоричным

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

Спустя 46 секунд (14.01.2012 - 19:13) vq_set написал(а):
Цитата (johniek_comp @ 14.01.2012 - 16:08)
Где же тебя так C++ научили, в институте?


Просто синтаксисом очень похожи, я когда учебник читал, целые главы пропусал, потому что все одно и то же, php в каком-то роде удобнее.

Спустя 1 минута, 30 секунд (14.01.2012 - 19:14) Dron19 написал(а):
Понеслась....... laugh.gif laugh.gif laugh.gif

Спустя 16 секунд (14.01.2012 - 19:14) Invis1ble написал(а):
Dron19
гораздо логичнее проверить существование всех необходимых данных, а затем уже проводить валидацию

Спустя 2 минуты, 34 секунды (14.01.2012 - 19:17) vq_set написал(а):
Например:

С++:

for(i=0; i<10; i++);
printf("%i", i); // или std::cout << i;

PHP:

for($i=0; $i<10; $i++);
echo $i;

Спустя 41 секунда (14.01.2012 - 19:18) vq_set написал(а):
А мне кто-нибудь поможет? biggrin.gif

Спустя 1 минута, 21 секунда (14.01.2012 - 19:19) Invis1ble написал(а):
vq_set
я ж написал тебе, поставь PMA и не парься smile.gif
а если суть в том, чтобы ручками писать код - выучи синтаксис sql

Спустя 26 секунд (14.01.2012 - 19:19) vq_set написал(а):
Цитата (Invis1ble @ 14.01.2012 - 16:19)
vq_set
я ж написал тебе, поставь PMA и не парься smile.gif
а если суть в том, чтобы ручками писать код - выучи синтаксис sql

Это и есть PMA

Спустя 2 минуты, 58 секунд (14.01.2012 - 19:22) vq_set написал(а):
Все, есть. Пришлось урезать.

Спустя 40 минут, 43 секунды (14.01.2012 - 20:03) Dron19 написал(а):
Цитата (Invis1ble @ 14.01.2012 - 16:14)
Dron19
гораздо логичнее проверить существование всех необходимых данных, а затем уже проводить валидацию

Делай как хочешь, вариантов много, я делаю так и добиваюсь нужной цели. Т.к empty проверяет и на существование и на пустоту сразу в случае с POST.

Спустя 44 секунды (14.01.2012 - 20:04) Invis1ble написал(а):
Dron19
как скажешь biggrin.gif

Спустя 2 минуты, 50 секунд (14.01.2012 - 20:07) Dron19 написал(а):
Есть Сер!!! laugh.gif laugh.gif laugh.gif


Это сообщение отредактировал vq_set - 14.01.2012 - 17:26
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса