X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Добавление данных в БД
Elusive
Elusive
Topic Starter сообщение 10.3.2009, 6:27; Ответить: Elusive
Сообщение #1


Добро время суток!!!

Не решил в какой раздел сайта писать ПХП или БД, но кажется, что вопрос больше уместен в этом разделе.
[php]...
$search = "SELECT * FROM users WHERE users.login = ('".$_POST["name"]."')";
$result_sql = mysql_query($search);

if (!$result_sql) {

$query = "INSERT INTO users (login, email, password) VALUES ('".$_POST["name"]."', '".$_POST["email"]."', '".$passwords[0]."')";
$result = mysql_query($query);

if(!$result) {
die("Error <br />" . mysql_error());
}
else {
echo "Good <br />";
}
}
else {
echo "There is another user with such name <br />";
}
...[/php]Почему то [php]$result_sql = mysql_query($search); if (!$result_sql) {...[/php] не выполняется, а сразу сообщается о том что введенные данные совпадают с уже имеющимися в БД, хотя это не так.
Заранее благодарен за помощь и советы
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Ворон
Ворон
сообщение 10.3.2009, 12:32; Ответить: Ворон
Сообщение #2


ну очень странно.
Elusive, вы уже не первый кто считает, что mysql_query возвращает bool. дайте ссылку на доки, где вы это прочли.

на самом деле эта функция возвращает указатель на полученный курсор, если это был запрос на выборку.

т.е. в вашем случае логика должна быть такова:

- выполняете запрос:
"select count(1) from users where login = '$login'"
- смотрите какое количество записей насчитает запрос (0 или более)
- ветвите код согласно результату

общие замечания по коду
- вычитывайте только то, что нужно вам. в данном случае вы передаете на клиент все данные по юзеру. зачем?
- подстановка прямо в запрос $_POST недопустима. это дыра и возможность для инъекций. форматируйте данные.
- пароли не хранят в "чистом" виде. как правило, их хешируют, можно с солью.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Elusive
Elusive
Topic Starter сообщение 10.3.2009, 18:32; Ответить: Elusive
Сообщение #3


Спасибо за ответ. Очень помог.
По поводу того что функция mysql_query() не возвращает bool в выборке тоже уже убедился. Не внимательно прочитал руководство. А выхватил смысл с первого предложения. хотя идея такой проверки была взята с учебных статей IBM, а я чето поверил им и не стал перепроверять в руководстве. Как выяснилось - зря.

По поводу других замечаний, еще раз спасибо, буду улучшать и тренироваться.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Ворон
Ворон
сообщение 10.3.2009, 18:40; Ответить: Ворон
Сообщение #4


кстати, при поиске юзера было бы неплохо приводить значение поля и параметра к одному регистру. иначе могут быть пользователи Elusive и elusive.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Elusive
Elusive
Topic Starter сообщение 10.3.2009, 20:43; Ответить: Elusive
Сообщение #5


я пока учу PHP и MySQL, так что много не знаю и не умею. решил постепенно добавлять возможности в этот код. Тем самим тренируясь.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Elusive
Elusive
Topic Starter сообщение 11.3.2009, 1:02; Ответить: Elusive
Сообщение #6


Возникли проблемы снова, решил не создавая новой темы поместить весь код сюда. Не работает ровным счетом ничего правильно (кроме как вывода данных на экран) и воода данных в бд, хотя данные воодятся в любом случае, не зависимо есть пользователь с таким именем в базе или нету. просмотрите пожалуйста свежим взглядом, а то я пол дня в гляделки играю и в безуспешные попытки все исправить. Укажите пожалуйста на мои ошибки и недостатки. Заранее спасибо всем за участие.

[php]<?php
function validate($allSubmitted) {
$message = " ";
$passwords = $allSubmitted["pword"];
$firstpass = $passwords[0];
$secondpass = $passwords[1];
$username = $allSubmitted["name"];
$mail = $allSubmitted["email"];

if ($firstpass !=$secondpass) {
$message = $message . "Passwords do not match.<br />";
}

if (strlen($username) < 5 || strlen($username) >15) {
$message = $message . "User name has to be not less than 5 and not more than 15. <br />";
}

if(strpos($mail, '@') === false) {
$message = $message . "You did not enter email <br />";
}

if ($message == "") {
$message = "OK";
}
return $message;
}

foreach($_POST as $key => $value) {
if (!is_array($value)) {
echo "<p>".$key." = " . $value . "</p>";
}
}
$passwords = $_POST["pword"];
echo "First password = ".$passwords[0];
echo "<br />";
echo "Second password = ".$passwords[1];
echo "<br />";

if (validate($_POST) == "OK") {
echo "<p>Thank you for registering!!!</p>";
}

include('db_open.php');

$connection = mysql_connect($db_host, $db_name, $db_password);
if(!$connection) {
die("Do not acces <br />" . mysql_error());
}
$db_select = mysql_select_db($db_database);
if(!$db_select) {
die("Do not select: <br />" . mysql_error());
}


$login = $_POST['name'];
$email = $_POST['email'];
$passw = $passwords[0];

$search = "SELECT count (1) WHERE login = '$_POST[name]'";
$result_sql = mysql_query($search);

if (mysql_num_rows($result_sql) ==0) {

$query = "INSERT INTO usec (login, email, password) VALUES ('$login', '$email', '$passw')";
$result = mysql_query($query);

if(!$result) {
die("Error <br />" . mysql_error());
}
else {
echo "Good <br />";
}
}
else {
echo "There is another user with such name <br />";
}

?>[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Ворон
Ворон
сообщение 11.3.2009, 1:56; Ответить: Ворон
Сообщение #7


[PHP]$search = "SELECT count (1) WHERE login = '$_POST[name]'";
$result_sql = mysql_query($search);

if (mysql_num_rows($result_sql) ==0) {[/PHP]
дело в том, что функция count из mysql всегда возвращает строку!

вам нужно писать

[PHP]$search = "SELECT 1 WHERE login = '$_POST[name]'";
$result_sql = mysql_query($search);

if (mysql_num_rows($result_sql) ==0) {[/PHP]

или же

[PHP]$search = "SELECT count(1) as row_count WHERE login = '$_POST[name]'";
$result_sql = mysql_query($search);
$row = db_fetch_object($result_sql);
if ($row->row_count == 0){[/PHP]

чуствуете разницу?

зы. не выкладывайте весь код, если он не нужен. к вечеру у многих включается режим "многа букаф"

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Интеграция спортивных данных API. Коэффициенты БК, Live результаты
15 yaroslav89 6866 8.4.2024, 17:17
автор: spoyer_ru
Открытая тема (нет новых ответов) ГОРЯЧИЕ FOREX|CRYPTO ЛИДЫ. БАЗЫ ДАННЫХ
[Чарджбек|Рекавери|Возврат]
9 Leado 3911 9.2.2024, 16:04
автор: baza0013
Открытая тема (нет новых ответов) Базы данных, различной тематики, выкладываем тут.
Делимся, обмениваемся, заказываем, парсим.
12 InfoObmen 15259 4.9.2022, 2:32
автор: Галецкая
Открытая тема (нет новых ответов) Сбор Данных Услуг И Специалистов Яндекс.Услуги
2 zkalinin 2379 26.5.2022, 17:10
автор: zkalinin
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыДобавление RSS-ленты на новостные агрегаторы и блоги
4 agency 4848 14.5.2020, 15:53
автор: agency


 



RSS Текстовая версия Сейчас: 25.4.2024, 3:14
Дизайн