Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/41: Рейтинг темы: голосов - 41, средняя оценка - 4.56
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078

Пустые строки в базе при вставке данных

15.10.2012, 11:12. Показов 7655. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Уже не раз читаю споры по поводу уроков Попова. ну и фиг с ним. Решил забить на него и попытался сам написать регистрацию. Написал простенькую для того, чтобы себя проверить. Вроде все работает, но в базе выводятся пустые строки. Не могу найти инфу в инете почему так. Заранее спасибо!

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
include_once ("conn_db.php");
 
if(!empty($_POST['seek_name'])){
  $seek_name = $_POST['seek_name'];
  }
if(!empty($_POST['seek_fam'])){
  $seek_fam = $_POST['seek_fam'];
  }
if(!empty($_POST['seek_otch'])){
  $seek_otch = $_POST['seek_otch'];
  }
if(!empty($_POST['seek_email'])){
  $seek_email = $_POST['seek_email'];
  }
if(!empty($_POST['seek_pass'])){
  $seek_pass = $_POST['seek_pass'];
  }
 
$f = mysql_query("INSERT INTO seeker_personel_registration14102012 (seek_name, seek_fam, seek_otch, seek_email, seek_pass) VALUES ('$seek_name', '$seek_fam', '$seek_otch', '$seek_email', '$seek_pass')");
 
if(TRUE === $f){
echo "Winner!!!";
}
else{
echo "Looser!!!";
}
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2012, 11:12
Ответы с готовыми решениями:

Пустые поля в базе данных
Вот такая проблема: ввожу два поля, нужно чтобы содержимое отправилось в базу данных, в базе 3 колонки: id, number, password. Id нормально...

При удалении и вставке данных уникальный id смещается
Делаю лайки. Таблица likes: id | author_id | like_id | item_id | type |. При вызове проверяю, есть ли запись от этого пользователя в...

Пустые строки в таблице данных
Привет. Производил выборку данных, на основе генератора случайных чисел. Пример: $all = mysql_num_rows(mysql_query(&quot;SELECT...

21
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 11:40
Поиск ошибок в программе и отладка запросов к БД

Добавлено через 27 секунд

Не по теме:

если честно, ненамного лучше код чем у попова получается..

0
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 11:54  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Поиск ошибок в программе и отладка запросов к БД

Добавлено через 27 секунд

Не по теме:

если честно, ненамного лучше код чем у попова получается..

Ну если учесть, что я только начал, то да. Но вот когда я на другом форуме пхп показал пример кода где в начале нужно прописать
PHP
1
2
3
if(isset($_POST['кнопка_формы'])) {
#здесь код
}
Мне тут же сказали, что я курю странные травы если использую такой метод. Вот и пойми, кому верить. Попову, Непопову, Вам или еще кому-то. Как правило всех новичков футболят или ссылки дают в которых даже не поясняют с какого момента почитать для определенного примера. Понятно, что никто не обязан, и каждый должен сам. Тогда я просто не пойму смысл форумов. Проще сделать сайт где есть вопрос и напротив ссылки.

Я вот допустим перерыл кучу сайтов, но так и не понял, почему в моем примере при попытке передать данные в базу возвращается 0:

ИМХО
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 12:02
я вам дал ссылку на определенную часть темы. Про отладку запросов - все равно тоже самое будут говорить, ничего нового не скажут.. Конкретнее - вот это
Кликните здесь для просмотра всего текста
Отладка

1. Нужно проверить все переменные, пустые они или нет (и вообще, инициализированы ли они) - функция
PHP
1
var_dump($имя_переменной);
неинициализированная переменная в php - это NULL. при выводе его через echo или print/print_r мы ничего не увидим. Но эта функция выдаст нам всю информацию - то есть выведет это самое NULL

2. Если вам лень это делать (как часто мне бывает) - можно перед запросом непосредственно к БД вывести сам этот запрос на экран, и посмотреть что у нас уходит в базу, какой запрос.
PHP
1
2
3
4
5
$login = $_POST['login']; //к примеру admin
$pass = $_POST['pass']; //к примеру 12345
$query = "SELECT count(`id`) FROM `users` WHERE `login`='$loggin' AND `pass`='$pass'";
echo $query;exit;
//дальше выполняется запрос
И например если мы случайно ошиблись в имени переменной (допустим, логин как в примере) и уровень ошибок по умолчанию (не писали в начале скрипта вывод всех ошибок) - то мы увидим в итоге такой запрос:
SQL
1
SELECT COUNT(`id`) FROM `users` WHERE `login`='' AND `pass`='12345'
И уже сразу будет видно, где и в чем ошибка.

3. Если все нормально, и все переменные хорошо видно - можно зайти в PHPMyAdmin и вручную (на вкладке Выполнить SQL-запрос) попробовать выполнить этот запрос с подставленными нужными значениями.

4. Если запрос успешно выполняется - то либо дописать к запросу перед точкой с запятой как я уже писал
PHP
1
or die(mysql_error())
либо, что еще лучше - написать что-то наподобие такого:
PHP
1
2
3
4
5
6
$res = mysql_query($query); 
if($res) { //или if(TRUE === $res) { .. - так будет правильнее. Но никак не в апострофах!
// запрос успешно выполнен
echo 'Ваш запрос успешно выполнен';
}
else die('Ошибка в запросе! Текст ошибки: ".mysql_error());
и тогда мы увидим ошибки, одну из которых я, скорее всего, уже перечислил выше (как и то, что она означает).

В вашем коде вот эти все проверки
Цитата Сообщение от maximus2011 Посмотреть сообщение
PHP
1
if(!empty($_POST['seek_name'])){
по сути, не имеют смысла. Наличия пробела в поле ввода спокойно пройдет эту проверку.
К тому же, данные не экранируются, не очищаются и т.п.

Добавлено через 3 минуты
Цитата Сообщение от maximus2011 Посмотреть сообщение
Мне тут же сказали, что я курю странные травы если использую такой метод
интересно, и что они предлагают тогда? забить вообще на наличие/отсутствие отправленных данных? Есть два способа проверять по сути. либо так, как я написал - либо проверять $_SERVER['REQUEST_METHOD']. Да, для подмены нужно проверять на наличие все данные. Но хотя бы одну проверку нужно
0
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 12:04  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
В вашем коде вот эти все проверки по сути, не имеют смысла. Наличия пробела в поле ввода спокойно пройдет эту проверку.
К тому же, данные не экранируются, не очищаются и т.п.
Да, спасибо! Сижу читаю. Немного разошолся! Извиняюсь)) дописал в коде удаление пробелов и функцию экранирования. Буду юзать дальше.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 12:06
есть еще такая запись раз уж вам так нужно по другому делать
PHP
1
2
3
4
$seek_name = (trim($_POST['seek_name']) != '') ? trim($_POST['seek_name']) : '';
#но дальше все равно надо проверять
if(empty($seek_name))
....
Добавлено через 1 минуту
но при отстуствии этого индекса при включенных нотайсах вы получите ошибку
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
15.10.2012, 12:07
у вас заносятся пустые поля потому что вы не зависимо от того есть переменная или нет все равно делаете запрос в базу.
А вы сделайте проверку перед тем как делать запрос все ли переменные существуют и если все есть то тогда выполняйте запрос
PHP
1
2
3
4
5
6
7
8
9
10
11
if (isset($seek_name, $seek_fam, $seek_otch, $seek_email, $seek_pass)){
$f = mysql_query("INSERT INTO seeker_personel_registration14102012 (seek_name, seek_fam, seek_otch, seek_email, seek_pass) VALUES ('$seek_name', '$seek_fam', '$seek_otch', '$seek_email', '$seek_pass')");
 
if(TRUE === $f){
echo "Winner!!!";
}
else{
echo "Looser!!!";
}
} else 
echo " заполнены не все поля";
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 12:13
maximus2011, alpex, ок. я ввожу пробелы в полях везде и что получается? что я спокойно зарегился..

Добавлено через 17 секунд
переменные существуют, не пустые - все четко
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
15.10.2012, 12:24
получатся пробелы в бд но не пустые поля, но вы же выше написали что нужно еще проверять на пустоту и экранировать данные перед записью в бд, но просто если поэкранировать их например вот так
PHP
1
2
if(!empty($_POST['seek_fam']))
  $seek_fam = mysql_real_escape_string(trim($_POST['seek_fam']));
и дальше точно так же заносить в базу то туда опять уйдут пустые поля, если будут заполнены не все поля формы
т.е перед запросом в базу все равно нужно проверять наличие переменных
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 12:36
alpex, пробел - это символ, и empty() пропустит как не пустое значение. Следовательно, переменная будет существовать, но пустая (т.к. очистится при присвоении от пробелов).
isset() проверяет наличие переменной, если быть точнее - то на NULL. пустая строка - это не NULL..
isset — Определяет, была ли установлена переменная значением отличным от NULL
Добавлено через 1 минуту
тогда после присвоения, перед запросом, необходимо второй раз проверять не isset а empty - она определит как и если ее не существует, так и если она пустая. Isset ничего не даст в этом случае

Добавлено через 1 минуту
проверьте сами
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
15.10.2012, 12:51
Цитата Сообщение от KOPOJI Посмотреть сообщение
alpex, пробел - это символ, и empty() пропустит как не пустое значение. Следовательно, переменная будет существовать, но пустая (т.к. очистится при присвоении от пробелов).
isset() проверяет наличие переменной, если быть точнее - то на NULL. пустая строка - это не NULL..


Добавлено через 1 минуту
тогда после присвоения, перед запросом, необходимо второй раз проверять не isset а empty - она определит как и если ее не существует, так и если она пустая. Isset ничего не даст в этом случае

Добавлено через 1 минуту
проверьте сами
да действительно все равно уйдет пустая строка

Добавлено через 12 минут
знач нужно вот так проверять
PHP
1
2
3
$seek_fam = trim($_POST['seek_fam']); 
if (!empty($seek_fam))
    $seek_fam = mysql_real_escape_string($seek_fam);
но только делать это все равно нужно внутри условия на проверку нажатой кнопки иначе нотисы будут
0
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 14:02  [ТС]
Ну вот так сделал! Теперь все работает.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
include_once ("conn_db.php");
 
$seek_email = $_POST['seek_email'];
$seek_pass = $_POST['seek_pass'];
  
$seek_email = htmlspecialchars(trim($seek_email));
$seek_pass = htmlspecialchars(trim($seek_pass));
 
if(empty($seek_email) || empty($seek_pass)){
  exit ("Вы заполнили не все поля!");
  }
  
$ff = mysql_query("SELECT id FROM seeker_personel_registration14102012 WHERE seek_email='$seek_email'");
$roo = mysql_fetch_array($ff);
 
if(!empty($roo['id'])){
  exit ("Введенный вами E-mail уже существует <a href='index.php'>Главная</a>");
  }
  else
  {
  $f = mysql_query("INSERT INTO seeker_personel_registration14102012 (seek_email, seek_pass) VALUES ('$seek_email', '$seek_pass')");
  }
  if(TRUE === $f){
  echo "Winner!!!";
  }
  else
  {
  exit ("Looser!!!");
  }
  
?>
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 15:05
и в итоге - я ввожу адрес страницы в браузер напрямую и что я уже знаю, угадайте? Я уже знаю где у вас скрипты находятся, потому что полезут ошибки..
0
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 16:57  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
и в итоге - я ввожу адрес страницы в браузер напрямую и что я уже знаю, угадайте? Я уже знаю где у вас скрипты находятся, потому что полезут ошибки..
Ну так вот Вы мне расскажите, что вводите в браузер напрямую, а я подумаю, как поступить, заодно и потренируюсь и попрактикуюсь.)) Если не сложно))
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 17:01
А что тут рассказывать? Открываю консоль, смотрю куда указывает action формы. ввожу адрес
site.ru/адрес_из_action_формы.php
И при включенных нотайсах вижу посыпавшиеся ошибки с адресом расположения скрипта
0
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 18:10  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
А что тут рассказывать? Открываю консоль, смотрю куда указывает action формы. ввожу адрес
site.ru/адрес_из_action_формы.php
И при включенных нотайсах вижу посыпавшиеся ошибки с адресом расположения скрипта
Вот класно! Теперь есть чем заняться! Я тож увидел ошибки с адресом расположения ))) Как решу задачку, напишу )) Спасибо!

Ну если я правильно понял, то обработчик должен быть помещен в какую-то директорию, в которой должен быть файл .htaccess. Вобщем читаю далее, что и как))
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 18:20
нет, просто необходимо проверять наличие данных формы прежде чем работать с ними напрямую
0
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 20:19  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
нет, просто необходимо проверять наличие данных формы прежде чем работать с ними напрямую
Ну да, я теперь понял ))

Добавлено через 1 час 51 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение
нет, просто необходимо проверять наличие данных формы прежде чем работать с ними напрямую
Почитал материалы по безопасности. Тоесть получается, нужно впервую очередь отключить сообщения об ошибках
PHP
1
error_reporting(0);
потом экранировать ввод. Проверить вводимые символы(пока еще не разбирался с этим!)

Правильно?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
error_reporting(0);
 
include_once ("conn_db.php");
 
$seek_email = $_POST['seek_email'];
$seek_pass = $_POST['seek_pass'];
  
$seek_email = htmlspecialchars(trim($seek_email));
$seek_pass = htmlspecialchars(trim($seek_pass));
 
$seek_email = mysql_real_escape_string($seek_email);
$seek_pass = mysql_real_escape_string($seek_pass);
 
if(empty($seek_email) || empty($seek_pass)){
  exit ("Вы заполнили не все поля!");
  }
  
  if(strlen($seek_email) < 6 or strlen($seek_email) > 50) {
  exit ("Ошибка!");
  }
 
if(strlen($seek_pass) < 6 or strlen($seek_pass) > 15) {
  exit ("Пароль должен состоять не менее чем из 6 символов и не более чем из 15.");
  }
 
    
$ff = mysql_query("SELECT id FROM seeker_personel_registration14102012 WHERE seek_email='$seek_email'");
$roo = mysql_fetch_array($ff);
 
if(!empty($roo['id'])){
  exit ("Введенный вами E-mail уже существует <a href='index.php'>Главная</a>");
  }
  else
  {
  $f = mysql_query("INSERT INTO seeker_personel_registration14102012 (seek_email, seek_pass) VALUES ('$seek_email', '$seek_pass')");
  }
if(TRUE === $f){
  echo "Winner!!!";
  }
  else
  {
  exit ("Looser!!!");
  }
  
?>
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.10.2012, 21:18
нет. htmlspecialchars используется для вывода данных. перед запросом ее не надо использовать.
лучше замените ее на stripslashes, т.к. если включены магические кавычки - то данные нужно очистить от лишних слэшей

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

Добавлено через 1 минуту
и опять же, не прятать надо ошибки. Вернее, надо - но только в законченном приложении, и то не просто их прятать а писать свой обработчик (или использовать встроенные) и записывать себе в логи, без отображения. А при отладке..

Вот, представьте, пример из жизни (чтоб понятнее было). Представьте, что домашняя живность нагадила у Вас на полу
Вы же не будете прикрывать газеткой чтоб не видно было, а возьмете и уберете, верно же? Вот тоже самое и здесь - зачем прикрывать газеткой если можно убрать?
1
 Аватар для maximus2011
269 / 261 / 35
Регистрация: 21.02.2012
Сообщений: 1,078
15.10.2012, 21:26  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
зачем прикрывать газеткой если можно убрать?
Ну вобщем ясно )) Значит еще работать и работать Как что додумаю выложу! Спасибо огромное за внимание!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2012, 21:26
Помогаю со студенческими работами здесь

Пустые строки в списке при чтении из базы
Здравствуйте. Следующая проблема..Вывожу данные из базы в выпадающий список &lt;select&gt;..Так вот все нормально читается,только выводится...

При вводе данных в форму и отправления в БД вводятся пустые значения
Помогите, пожалуйста, при вводе данных в форму и отправления в БД(MySQL) вводятся пустые значения. &lt;form...

Поиск строки в Базе данных
Доброго времени суток! Столкнулся с проблемой при поиске строки в Базе данных. Есть база данных, в корой есть 2 строки со значением...

Проверка существования строки в базе данных
Добрый вечер всем! Нужно сделать проверку введенного id с id который в базе. Например, я введу id=5, и если вдруг его в базе нет, то...

Поиск передаваемой строки в базе данных
Всем привет! Я решил написать свой маленький поисковичек который будет искать информацию в моей БД и выводить список всех совпадений. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru