Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Выборка данных

Ответить
Настройки темы
MySQL - Выборка данных

Пользователь


Сообщения: 86
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Всем здравствовать.Осваиваю mysql и php на denwer.Создал форму регистрации.Регистрация работает,но данные из необязательных полей в бд заносятся выборочно и при попытки вытащить тоже не все выходят.Все поля и переменные сделал по одному шаблону.Почему одни заносятся,а другие нет?Подскажите где копать.Только попроще,если можно.

Отправлено: 23:39, 05-09-2012

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Цитата:
На передаче "Что? Где? Когда?":
- Уважаемые знатоки, у меня в подвале скрипит. Что это?
Слишком мало информации для размышления. Нужна значимая часть скрипта и SQL-запрос.
Может быть там в полях попадаются кавычки, может быть они отбрасываются по условию или вообще не передаются через $_POST, т.к. неправильно указан аттрибут name у поля.
Добавьте в начало скрипта строку print_r($_POST); чтобы увидеть, что передаётся в скрипт post-запросом, а что - нет.

Попробуйте поставить себе phpMyAdmin и посмотреть через него - есть ли вообще данные в БД, которые "не все выходят". Посмотрите там заодно как надо строить запросы на добавление и извлечение.

Отправлено: 05:15, 06-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 86
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Безымянный.jpg
(336.4 Kb, 4 просмотров)

Часть обработчика:

<?php
//заносим введенный пользователем текст в переменную $x, если он пустой, то уничтожаем переменную
if (isset($_POST['sees'])) { $sees = $_POST['sees']; if ($login == '') { unset($sees);} }

if (isset($_POST['teep'])) { $teep = $_POST['teep']; if ($teep == '') { unset($teep);} }

if (isset($_POST['pl'])) { $pl = $_POST['pl']; if ($pl == '') { unset($pl);} }

if (isset($_POST['hd'])) { $hd = $_POST['hd']; if ($hd == '') { unset($hd);} }

if (isset($_POST['op'])) { $op = $_POST['op']; if ($op == '') { unset($op);} }

if (isset($_POST['bp'])) { $bp = $_POST['bp']; if ($bp == '') { unset($bp);} }

if (isset($_POST['mon'])) { $mon = $_POST['mon']; if ($mon == '') { unset($mon);} }





if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }

if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }

if (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} }

if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }


if (empty($login) or empty($password)or empty($code) or empty($email))
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");

----------------------------------------------
$result2 = mysql_query ("INSERT INTO users (login,password,avatar,email,teep,sees,hd,op,bp,mon,pl,date)

VALUES('$login','$password','$avatar','$email','$teep','$sees','$hd','$op','$bp','$mon','$pl',NOW()) ");

if ($result2=='TRUE')

{
----------------------

Запрос:

<?php
$db = mysql_connect("localhost","root","");

mysql_select_db("nikita",$db);

$resultat = mysql_query("SELECT teep,sees,op,hd,pl,bp,mon FROM users WHERE id='43'",$db);

$array = mysql_fetch_array($resultat);

echo "<br>оперативка:".$array['op']."<br>диск:".$array['hd']."<br>пк:".$array['teep'];

echo "<br>монитор:".$array['mon']."<br>система:".$array['sees']."<br>материнка:".$array['pl'];
?>
-------------------------
скрин БД.прилагаю.

Временами регистрация с заполненными необязательными полями вообще не проходит.Иногда проходит.Там где в базе совсем пустые поля не захотела с ними регистрировать.
Запрос
print_r($_POST);
показывает тоже,что и в базе.Сам скрипт на извлечение работает,если все в базу занеслось.

ID45:

оперативка:aa
диск:jj
пк:fff
монитор:222
система:
материнка:hhh

Эта "система:"ни в какую не проходит.И имя менял и местами менял-хоть убей.

Отправлено: 09:47, 06-09-2012 | #3


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Логика построения условных выражений не совсем очевидна, но даже если смотреть "как есть", то видна ошибка в этой строке:
Цитата lora.1:
if (isset($_POST['sees'])) { $sees = $_POST['sees']; if ($login == '') { unset($sees);} } »
вместо $login, наверное, должно быть $sees?

Ещё мне не нравится, что используется unset() для переменных, если они не заданы. Но если вы их удаляете, то по идее скрипт должен выдать ошибку в том месте, где вы формируете запрос INSERT, т.к. используется необъявленная переменная. Впрочем, я точно не скажу - возможно, PHP необъявленные переменные считает за NULL. Лучше оставлять пустую строку, чем NULL.

Я бы писал так:
PHP код: Выделить весь код

$sees = (isset($_POST['sees'])) ? $_POST['sees'] : ''// если переменная $_POST['sees'] задана, то используем её. Если не задана, то присваиваем пустую строку 


хотя для начинающих такие конструкции могут казаться неочевидными.

Если в переменных будут попадаться кавычки, то должно с ошибкой падать.

Ну и в вашем скрипте ещё SQL-инъекции можно делать, т.ч. неплохо бы организовать проверку содержимого переменных.

Цитата lora.1:
Запрос print_r($_POST); показывает тоже,что и в базе. »
Т.е. не всё? Тогда, быть может, у вас HTML-форма неправильно составлена?

Вкратце:
1. Заменить $login на $sees
2. Избавиться от unset()
3. Проверить HTML-форму

Последний раз редактировалось Coutty, 06-09-2012 в 17:59.


Отправлено: 17:49, 06-09-2012 | #4


Пользователь


Сообщения: 86
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Безымянный.jpg
(353.5 Kb, 4 просмотров)
Вложения
Тип файла: txt save_user.txt
(10.8 Kb, 3 просмотров)
Тип файла: txt reg.txt
(4.0 Kb, 2 просмотров)

Всё сделал как сказали.Форму переделал.Ерунда какая то.Вот коды и скрипты,взгляните,время будет.Заполняю эти н.о. поля не идёт.удаляю проходит,всё нормально. Пока попробую новый скрипт найти.

Отправлено: 23:19, 06-09-2012 | #5


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Ух, как много сразу)

Когда "не идёт" - выдаёт ошибку или что-то другое пишет? Или просто не записывает в БД?

Опять же сразу в глаза бросается - в базе данных поле называется mahter, а в запросе Insert - mather.
Также на всякий случай сохраните скрипт в юникоде, а то мало ли... Я как-то раз из-за разных кодировок в скриптах целый день ошибку искал >_<

И ещё: в регулярном выражении проверки e-mail'а не допускаются адреса вида vasya.ivanov@gmail.com

Отправлено: 05:23, 07-09-2012 | #6


Пользователь


Сообщения: 86
Благодарности: 0

Профиль | Отправить PM | Цитировать


Выдаёт ошибку,которая прописана в конце скрипта-- exit ("Ошибка! Вы не зарегистрированы.");--.Поля очищаю-работает.Я пока лох в php,и не понимаю какая разница(кроме имени)в этих строках:

if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }

if (isset($_POST['sees'])) { $sees = $_POST['sees']; if ($sees == '') { unset($sees);} }

Почему с первой работает,а при добавлении второй нет?

Ведь данная ошибка распостраняется на эту часть скрипта,как я понимаю:

$result2 = mysql_query ("INSERT INTO users (login,password,avatar,email,teep_pc,sees,hd,member,block,disp,mather,date)
VALUES('$login','$password','$avatar','$email','$teep_pc','$sees','$hd','$member','$block','$disp',' $mather',NOW())");// Проверяем, есть ли ошибки
if ($result2=='TRUE')
{

Здесь тоже я просто добавил переменные.
(В БД mather исправил,спасибо)

Отправлено: 11:38, 07-09-2012 | #7


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Давайте ещё посмотрим какой SQL-запрос формируется.
Напишите так:
PHP код: Выделить весь код

$sql "INSERT INTO users (login,password,avatar,email,teep_pc,sees,hd,member,block,disp,mather,date)

 VALUES('$login','$password','$avatar','$email','$teep_pc','$sees','$hd','$member','$block','$disp',' $mather',NOW())"
;
echo 
$sql;
$result2 mysql_query($sql); 

И посмотрим, что в $sql занесётся (когда не работает).

Отправлено: 16:56, 07-09-2012 | #8


Пользователь


Сообщения: 86
Благодарности: 0

Профиль | Отправить PM | Цитировать


Провёл несколько регистраций.Теперь ошибка пропала(мистика),но все данные не заносятся.

INSERT INTO users (login,password,avatar,email,teep_pc,sees,hd,member,block,disp,mather,date)

VALUES('rrrrrr','07b432d25170b469b57095ca269bc202b3p6f','avatars/net-avatara.jpg','ew.bolgow@yandex.ru','ggggg','hhhh','','','','jjjjjj',' ',NOW())

Вам на E-mail выслано письмо с cсылкой, для подтверждения регистрации. Внимание! Ссылка действительна 1 час. Главная страница

Отправлено: 18:56, 07-09-2012 | #9


Пользователь


Сообщения: 86
Благодарности: 0

Профиль | Отправить PM | Цитировать


P.S. Ошибка в скрипте найдена.Спасибо.

Отправлено: 14:54, 09-09-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Выборка данных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Выборка из таблицы Sergey666 Программирование и базы данных 1 23-03-2010 06:19
MSFT SQL Server - Выборка по дате Pulvertum Программирование и базы данных 7 03-11-2009 00:58
MySQL - [решено] Выборка данных со всех таблиц, которые начинаются с test_ Artem-Samsung Программирование и базы данных 2 31-03-2009 15:42
[решено] Выборка данных из mysql и сортировка на php dima1981 Вебмастеру 4 11-11-2008 15:06
выборка данных из нескольких страниц vunder Программирование и базы данных 2 12-07-2004 20:33




 
Переход