Привет всем! Будем знакомы, я Макс)
Только вот потихоньку начал пых-пых изучать и решил вот небольшой скриптик регистрации написать без всяких там проверок на уникальность, правильность ввода так как рано еще все это...Решил, что лучше написать самому, с нуля чтобы это все "усвоилось" в мозгах и запомнилось.
Столкнулся с проблеммами...что нестранно :)
1)Вообщем создал файл "index.html"
<html>
<body>
<form action = "register.php" method="get">
Имя: <input type="text" name="Name"/><br>
Пароль: <input type="text" name="Pass"/><br>
E-mail: <input type="text" name="Email"/><br>
<input type="submit"/>
</body>
</html>
2)Скрипт создания таблиц в базе "sql.php"
<?php
$dbserver="database";
$dbname="логин";
$dbpassw="пароль";
$dbn="имя";
mysql_connect($dbserver,$dbname,$dbpassw) or die("Could not connect to MySQL server!");
mysql_select_db($dbn) or die("Could not select $db_n database!");
$sql=mysql_query('CREATE TABLE users (
id INT,
username TEXT,
password TEXT,
email TEXT
) TYPE = MyISAM');
mysql_close();
?>
3) Скрипт регистрации(в нем вся слябость) register.php :
<?php
$dbserver="тута database";
$dbname="тут логин";
$dbpassw="пароль";
$dbn="имя";
mysql_connect($dbserver,$dbname,$dbpassw) or die("Невозможно установить соединение с базой");
mysql_select_db($dbn) or die("Невозможно установить соединение с базой");
mysql_query("INSERT INTO users(id,username,password,email) VALUES('1',$Name,$Pass,$Mail)");
mysql_close();
?>
Ошибок нет(вроди)...но когда захожу в phpMyAdmin в таблице "users" нет записей(((
Помогите, не стебайте уж сильно сдесь)
И есчО..где то мелькало в скриптах include заместо повторяющегося коннекта с базой. Можно ли это использовать здесь что бы облегчить или же эта функция не для облегчения, а для каких-либо других результатов?
Спустя 8 минут, 55 секунд (1.04.2011 - 20:10) alex12060 написал(а):
Ты не объявил переменные, вот твоя ошибка.
Но учти, это совсем слабый скрипт и использовать его как рабочий никак нельзя!
<?php
$dbserver="тута database";
$dbname="тут логин";
$dbpassw="пароль";
$dbn="имя";
mysql_connect($dbserver,$dbname,$dbpassw) or die("Невозможно установить соединение с базой");
mysql_select_db($dbn) or die("Невозможно установить соединение с базой");
$Name = $_POST['Name'];
$Pass = $_POST['Pass'];
$Mail = $_POST['Email']
mysql_query("INSERT INTO `users` (`username`,`password`,`email`) VALUES('$Name','$Pass','$Mail')") or die(mysql_error());
mysql_close();
?>
Но учти, это совсем слабый скрипт и использовать его как рабочий никак нельзя!
Спустя 2 минуты, 34 секунды (1.04.2011 - 20:12) alex12060 написал(а):
Цитата |
И есчО..где то мелькало в скриптах include заместо повторяющегося коннекта с базой. Можно ли это использовать здесь что бы облегчить или же эта функция не для облегчения, а для каких-либо других результатов? |
Функция include очень разносторонняя. Можно конечно использовать для данной цели, можно.
Спустя 4 минуты, 53 секунды (1.04.2011 - 20:17) neadekvat написал(а):
Добавлю к словам alex12060 пару вещей:
1. Во-первых, вам надо почитать про auto increment, поле id должно иметь такое свойство.
2. Перед тем, как подставлять данные в запрос, их обязательно надо обработать для предотвращения sql-инъекции и других неприятных ситуаций.
Строки обрабатываются так:
Числа так:
Почитайте про экранирование (это как раз выполняет функция mysql_real_escape_string).
3. Познакомтесь с синтаксисом sql запросов. Строки должны обрамляться в одинарные кавычки, а поля желательно (не обязательно, но выглядит аккуратнее) обрамлять в обратные:
При этом числа в кавычки обралмять не надо.
Когда писал - alex12060 еще не отредактировал запрос, удалять уже не буду.
1. Во-первых, вам надо почитать про auto increment, поле id должно иметь такое свойство.
2. Перед тем, как подставлять данные в запрос, их обязательно надо обработать для предотвращения sql-инъекции и других неприятных ситуаций.
Строки обрабатываются так:
$Name = mysql_real_escape_string($_POST['Name']);
Числа так:
$num = (int) $_POST['num'];
Почитайте про экранирование (это как раз выполняет функция mysql_real_escape_string).
3. Познакомтесь с синтаксисом sql запросов. Строки должны обрамляться в одинарные кавычки, а поля желательно (не обязательно, но выглядит аккуратнее) обрамлять в обратные:
mysql_query("INSERT INTO `users` (`username`, `password`, `email`) VALUES('$Name', '$Pass', '$Mail')") or die(mysql_error());
При этом числа в кавычки обралмять не надо.
Когда писал - alex12060 еще не отредактировал запрос, удалять уже не буду.
Спустя 1 минута, 2 секунды (1.04.2011 - 20:18) kasichvadim написал(а):
Цитата |
И есчО..где то мелькало в скриптах include заместо повторяющегося коннекта с базой. Можно ли это использовать здесь что бы облегчить или же эта функция не для облегчения, а для каких-либо других результатов? |
connect.php
<?php
$dbserver="тута database";
$dbname="тут логин";
$dbpassw="пароль";
$dbn="имя";
mysql_connect($dbserver,$dbname,$dbpassw) or die("Невозможно установить соединение с базой");
mysql_select_db($dbn) or die("Невозможно установить соединение с базой");
<?php
include 'connect.php';
$Name = $_POST['Name'];
$Pass = $_POST['Pass'];
$Mail = $_POST['Email']
mysql_query("INSERT INTO `users` (`username`,`password`,`email`) VALUES('$Name','$Pass','$Mail')") or die(mysql_error());
mysql_close();
Спустя 4 минуты, 45 секунд (1.04.2011 - 20:23) inpost написал(а):
kmaks
Форма отправляет $_POST, а не обычную переменную.
Если заносишь в БД, то необходимо записывать в кавычках текст: 'ЛАЛАЛА', в твоём примере: '$Name' , а не $Name .
mysql_connect и select_db стоит делать в начале всех обращений к БД, потом их сгруппировать, провести операции по вытаскиванию данных из БД, и только после того,как все запросы пройдут - mysql_close, поэтому mysql_connect очень часто в начале выносят в отдельный файл для include.
mysql_query("") or die(mysql_error()); - вот так делаем запрос, то есть дописываем or die() для того, чтобы вывелась ошибка на экран.
В начале скрипта (в самом начале) пишем: error_reporting(E_ALL); чтобы показались нам все ошибки по сайту.
Для поля ID в БД надо поставить галочку, что это autoincrement, тогда в запросе не надо указывать, что ты добавляешь запись для ID, она сама добавится автоматически. Удобнее писать запросы через SET:
Форма отправляет $_POST, а не обычную переменную.
Если заносишь в БД, то необходимо записывать в кавычках текст: 'ЛАЛАЛА', в твоём примере: '$Name' , а не $Name .
mysql_connect и select_db стоит делать в начале всех обращений к БД, потом их сгруппировать, провести операции по вытаскиванию данных из БД, и только после того,как все запросы пройдут - mysql_close, поэтому mysql_connect очень часто в начале выносят в отдельный файл для include.
mysql_query("") or die(mysql_error()); - вот так делаем запрос, то есть дописываем or die() для того, чтобы вывелась ошибка на экран.
В начале скрипта (в самом начале) пишем: error_reporting(E_ALL); чтобы показались нам все ошибки по сайту.
Для поля ID в БД надо поставить галочку, что это autoincrement, тогда в запросе не надо указывать, что ты добавляешь запись для ID, она сама добавится автоматически. Удобнее писать запросы через SET:
mysql_query("INSERT INTO `table` SET
`username` = '".mysql_real_escape_string($_POST['username'])."',
`email` = '".mysql_real_escape_string($_POST['email'])."',
`password` = '".mysql_real_escape_string($_POST['password'])."'
");
Спустя 3 минуты, 34 секунды (1.04.2011 - 20:26) neadekvat написал(а):
Цитата (inpost @ 1.04.2011 - 20:23) |
Форма отправляет $_POST, а не обычную переменную. |
В данном случаи гет.
Вот, думаю, о чем еще сказать хотел автору: в формах, где требуется ввод секретных данных (паролей, персональных ключей и т.д.), лучше использовать метод post.
Спустя 1 минута, 27 секунд (1.04.2011 - 20:28) inpost написал(а):
kmaks
Точно, вот тут поменяй с GET на POST:
<form action = "register.php" method="post">
Для этих целей лучше использовать POST
Точно, вот тут поменяй с GET на POST:
<form action = "register.php" method="post">
Для этих целей лучше использовать POST
Спустя 10 секунд (1.04.2011 - 20:28) alex12060 написал(а):
Еще дополнение. Чтобы проверять, отправились ли данные, можно пробовать разные методы, но я объясню способ с тернарными операторами.
Прокомментирую:
Вообще, можно использовать и альтернативные методы обработки входящих данных, но я пользуюсь таким, для проверки существования..
Кстати, пароли в БД должны храниться в зашифрованном виде, поэтому, шифруй их с помощью md5()
<?php
include('connect.php');
$Name = !empty($_POST['Name']) ? trim($_POST['Name']) : die('<b>Не введено имя!</b>');
$Pass= !empty($_POST['Pass']) ? md5($_POST['Pass']) : die('<b>Не введен пароль!</b>');
$Mail= !empty($_POST['Email']) ? trim($_POST['Email']) : die('<b>Не введен е-майл!</b>');
mysql_query("INSERT INTO `users` (`username`,`password`,`email`) VALUES('".mysql_real_escape_string($Name)."','$Pass','".mysql_real_escape_string($Mail)."')") or die(mysql_error());
mysql_close();
?>
Прокомментирую:
$Name = !empty($_POST['Name']) ? trim($_POST['Name']) : die('<b>Не введено имя!</b>');
/* Если не пустой $_POST['Name'] (Имя пользователя), то (?)
удаляем лишние пробелы и записываем в переменную $Name значение $_POST['Name'], иначе ( : )
выводим ошибку и завершаем скрипт
*/
Вообще, можно использовать и альтернативные методы обработки входящих данных, но я пользуюсь таким, для проверки существования..
Кстати, пароли в БД должны храниться в зашифрованном виде, поэтому, шифруй их с помощью md5()
Спустя 3 минуты, 20 секунд (1.04.2011 - 20:31) alex12060 написал(а):
Цитата |
Решил, что лучше написать самому, с нуля чтобы это все "усвоилось" в мозгах и запомнилось. |
Почитай все замечания и напиши заного все, и, скинь сюда результаты)
Спустя 6 минут, 39 секунд (1.04.2011 - 20:38) neadekvat написал(а):
Цитата (alex12060 @ 1.04.2011 - 20:28) |
но я пользуюсь таким, для проверки существования |
Что, прямо с die? Имхо, die и exit предназначены для дебагинга и переадресации (ну и еще пару случаев). А формы так проверять не надо - и тем более новичкам рассказывать о такой возможности.
Спустя 9 минут, 26 секунд (1.04.2011 - 20:47) alex12060 написал(а):
neadekvat
Я пользуюсь таким подходом только в моментах, когда проверять данных надо мало. Вместо die() у меня самописная функция, которая выводит ошибку красиво и предлагает вернуться назад, дабы исправить её.
Я написал, что варьировать можно, я не навязываюсь)
Я пользуюсь таким подходом только в моментах, когда проверять данных надо мало. Вместо die() у меня самописная функция, которая выводит ошибку красиво и предлагает вернуться назад, дабы исправить её.
Я написал, что варьировать можно, я не навязываюсь)
Спустя 1 минута, 23 секунды (1.04.2011 - 20:49) neadekvat написал(а):
Цитата (alex12060 @ 1.04.2011 - 20:47) |
Я пользуюсь таким подходом, но вместо die() у меня самописная функция, которая выводит ошибку красиво и предлагает вернуться назад, дабы исправить её. |
Во-первых, стоило об этом сказать автору, а то примет еще за чистую монету
Во-вторых, сначала ошибки то собираются? Или по одной ошибке выводится?
Спустя 15 минут, 39 секунд (1.04.2011 - 21:04) XCross написал(а):
Пока вот что получается:
1)Connect.php:
2) sql.php(создание таблиц):
3) register.php:
sql.php и register.php:
Parse error: parse error, unexpected $ in /home/e/eman-bit.hut2.ru/WWW/connect.php on line 7
1)Connect.php:
<?php
$dbserver="database";
$dbname="логин";
$dbpassw="пароль";
$dbn="имя";
mysql_connect($dbserver,$dbname,$dbpassw) or die("Невозможно установить соединение с базой");
mysql_select_db($dbn) or die("Невозможно установить соединение с базой")
2) sql.php(создание таблиц):
<?php
include 'connect.php';
mysql_query("CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` TEXT NOT NULL,
`password` TEXT NOT NULL,
`mail` TEXT NOT NULL,
PRIMARY KEY (`id`)
) TYPE = myisam") or die(mysql_error());
?>
3) register.php:
<?php
include 'connect.php';
mysql_query("INSERT INTO `table` SET
`username` = '".mysql_real_escape_string($_POST['Name'])."',
`password` = '".mysql_real_escape_string($_POST['Pass'])."'
`email` = '".mysql_real_escape_string($_POST['Email'])."',
") or die(mysql_error());
mysql_close();
?>
sql.php и register.php:
Parse error: parse error, unexpected $ in /home/e/eman-bit.hut2.ru/WWW/connect.php on line 7
Спустя 1 час, 1 минута, 40 секунд (1.04.2011 - 22:06) inpost написал(а):
mysql_select_db($dbn) or die("Невозможно установить соединение с базой") - в конце точки с запятой не стоит.
Спустя 6 часов, 32 минуты, 17 секунд (2.04.2011 - 04:38) XCross написал(а):
Я думаю меня спасет только литература.
Парни(девушки), вы какие книги изучали?
Парни(девушки), вы какие книги изучали?
Спустя 1 час, 7 минут, 12 секунд (2.04.2011 - 05:46) XCross написал(а):
Спс! разобрлся....
почитал информацию по ссылочкам inpost'а...спс)
:rolleyes:
Вот что получилсО:
1)Index.html:
2) Sql.php:
3)Connect.php:
4)Register.php:
Все пашет. :)
почитал информацию по ссылочкам inpost'а...спс)
:rolleyes:
Вот что получилсО:
1)Index.html:
<html>
<body>
<form action = "register.php" method="get">
Имя: <input type="text" name="Name"/><br>
Пароль: <input type="text" name="Pass"/><br>
E-mail: <input type="text" name="Email"/><br>
<input type="submit"/>
</body>
</html>
2) Sql.php:
<?php
include 'connect.php';
mysql_query("CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` TEXT NOT NULL,
`password` TEXT NOT NULL,
`mail` TEXT NOT NULL,
PRIMARY KEY (`id`)
) TYPE = myisam") or die(mysql_error());
?>
3)Connect.php:
<?php
$dbserver="database";
$dbname="emanbit8";
$dbpassw="b07783";
$dbn="emanbit8";
mysql_connect($dbserver,$dbname,$dbpassw) or die("Невозможно установить соединение с базой");
mysql_select_db($dbn) or die("Невозможно установить соединение с базой");
4)Register.php:
<?php
include 'connect.php';
$Name = $_GET['Name'];
$Pass = $_GET['Pass'];
$Mail = $_GET['Email'];
mysql_query("INSERT INTO `users` SET `username`='$Name', `password`= '$Pass', `mail`= '$Mail'");
mysql_close();
?>
Все пашет. :)
Спустя 4 часа, 26 минут, 56 секунд (2.04.2011 - 10:13) XCross написал(а):
Теперь проверку пробую, но все таки где то неправильно:
<?php
include 'connect.php';
$Name = $_GET['Name'];
$Pass = $_GET['Pass'];
$Mail = $_GET['Email'];
if(empty($_GET['Name']) or empty($_GET['Pass']))
{
echo("<center>Заполните все поля!</center>");
}
else
{
$n=mysql_query("SELECT FROM `users` username='$Name'");
if(mysql_rows($n)<>0)
{
echo("пользователь".$Name " уже зарегистрирован!");
}
else
{
else
{
mysql_query("INSERT INTO `users` SET
`username`='$Name',
`password`= '$Pass',
`mail`= '$Mail'");
mysql_close();
}
}
}
?>
Цитата |
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/e/eman-bit.hut2.ru/WWW/register.php on line 18 |
Вот тут написано что в 18 строке ошибка? Счет строк идет от "<?php" включительно либо после "<?php"? Переводы строк считаются?
Спустя 5 часов, 47 минут, 49 секунд (2.04.2011 - 16:00) inpost написал(а):
else{else{ - вот твоя ошибка, дублируется else, когда стоит 1 условие всего-лшиь if.
_____________
Обмен Ukash на WebMoney