[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите новичку
XCross
ПРОСТИТЕ ЗА СОЗДАНИЕ ПОВТОРЯЮЩЕЙСЯ ТЕМЫ!:unsure:
Привет всем! Будем знакомы, я Макс)
Только вот потихоньку начал пых-пых изучать и решил вот небольшой скриптик регистрации написать без всяких там проверок на уникальность, правильность ввода так как рано еще все это...Решил, что лучше написать самому, с нуля чтобы это все "усвоилось" в мозгах и запомнилось.
Столкнулся с проблеммами...что нестранно :)

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-инъекции и других неприятных ситуаций.

Строки обрабатываются так:
$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:
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

Спустя 10 секунд (1.04.2011 - 20:28) alex12060 написал(а):
Еще дополнение. Чтобы проверять, отправились ли данные, можно пробовать разные методы, но я объясню способ с тернарными операторами.



<?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() у меня самописная функция, которая выводит ошибку красиво и предлагает вернуться назад, дабы исправить её.

Я написал, что варьировать можно, я не навязываюсь)

Спустя 1 минута, 23 секунды (1.04.2011 - 20:49) neadekvat написал(а):
Цитата (alex12060 @ 1.04.2011 - 20:47)
Я пользуюсь таким подходом, но вместо die() у меня самописная функция, которая выводит ошибку красиво и предлагает вернуться назад, дабы исправить её.

Во-первых, стоило об этом сказать автору, а то примет еще за чистую монету smile.gif
Во-вторых, сначала ошибки то собираются? Или по одной ошибке выводится?

Спустя 15 минут, 39 секунд (1.04.2011 - 21:04) XCross написал(а):
Пока вот что получается:
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:

<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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.