PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): [1] 2 »

> Найдено сообщений: 18
condpattern Отправлено: 19 Сентября, 2013 - 15:38:46 • Тема: Равенство переменной и вывода из базы • Форум: Вопросы новичков

Ответов: 3
Просмотров: 193
[quote=Voodoo][/quote]
Благодарю за помощь. Проблема возникла из-за очень глупой ошибки. Длину поля под IP varchar брал 12, а нужно 15, поэтому с ip локального сервера работало, а внешним нет.
condpattern Отправлено: 18 Сентября, 2013 - 12:49:47 • Тема: Равенство переменной и вывода из базы • Форум: Вопросы новичков

Ответов: 3
Просмотров: 193
Приветствую.
Хочу поставить ограничение на количество попыток входа по ip адресу.
Определяю ip:
PHP:
скопировать код в буфер обмена
  1. $ip = getenv("HTTP_X_FORWARDED_FOR");
  2.     if (empty($ip) || $ip == 'unknown') {
  3.         $ip = getenv("REMOTE_ADDR");
  4.     }

Выборка из базы:
PHP:
скопировать код в буфер обмена
  1. // Извлекаем из базы колличество неудачных попыток входа за последние 60 минут у пользователя с данным ip
  2.     $access_query = mysql_query("SELECT ip, number FROM access WHERE ip='$ip'", $db);
  3.     $access       = mysql_fetch_array($access_query);

Далее в своем коде вставляю след. условие:
PHP:
скопировать код в буфер обмена
  1. if ($ip == $access['ip']) {
  2.             // Если ip есть, то приплюсовываем количество
  3.             $new      = $access['number'] + 1;
  4.             mysql_query("UPDATE access SET number=$new,date=NOW() WHERE ip='$ip'");
  5.         } else {
  6.             // Если за последние 60 минут ошибок не было, то вставляем новую запись в таблицу "access"
  7.             mysql_query("INSERT INTO access (ip,date,number) VALUES ('$ip',NOW(),'1')");
  8.         }
  9.  

На локальном сервере этот код работает. Но когда переношу на хостинг, почему-то сравнение ip из базы и $ip переменной всегда возвращает ложь и для одного и того же ip каждый раз создается новая строка.
Может это связано с тем, что как-то криво записано условие равенства? Есть идеи?
С уважением.
condpattern Отправлено: 21 Июля, 2013 - 15:38:57 • Тема: exit() • Форум: Вопросы новичков

Ответов: 11
Просмотров: 536
[quote=soffrick][/quote]
Мне не интересен ucoz.

[quote=DelphinPRO][/quote]
Я вас понял, благодарю.
condpattern Отправлено: 21 Июля, 2013 - 13:44:06 • Тема: exit() • Форум: Вопросы новичков

Ответов: 11
Просмотров: 536
[quote=soffrick][/quote]
Ну, моя цель не стать потрясным, качественным программистом, а сделать сайт- развлечения ради. Поэтому я скорее ищу шаблоны и переделываю их под себя, нежели изучаю базовую фундаментальную теорию языка и прочие тонкости. Если есть очень грубые ошибки, с радостью, выслушаю.

[quote=DelphinPRO][/quote]
У меня такой кусок кода:
PHP:
скопировать код в буфер обмена
  1. $result3 = mysql_query("INSERT INTO table (f1, f2, f3, f4, f5) VALUES('$f1', '$f2', '$f3', '$f4', NOW())");
  2.     //Проверяем, есть ли ошибки//
  3.     if ($result3 == 'TRUE') {
  4.         $confirm = true;
  5.     } else {

Т.е.
Цитата:
$confirm = true; — Здесь вы объявляете переменную
if(isset($confirm)) — и тут же проверяете - объявлена ли она? Конечно она всегда будет объявлена.

Я задаю ее не в начале, а после проверке об успехе операции.
Мне кажется, если бы

означало строку, а не значение, тогда бы переменная $confirm не объявлялась, а код переходил бы в часть else, но у меня все таки все идет корректно.
condpattern Отправлено: 21 Июля, 2013 - 11:54:53 • Тема: exit() • Форум: Вопросы новичков

Ответов: 11
Просмотров: 536
[quote=DelphinPRO][/quote]
Понял, спс.
[quote=soffrick][/quote]
Это копипаст из гугла, меняю только имя переменных и немного добавляю условия. Что не так? Как нужно правильно?
condpattern Отправлено: 20 Июля, 2013 - 23:32:18 • Тема: exit() • Форум: Вопросы новичков

Ответов: 11
Просмотров: 536
ridvik пишет:
echo не подойдёт?

Если echo вместо exit(), то это будет некорректно в отношении кода (ибо с эхо машина продолжить выполнять скрипт), а если внутри exit, то не вижу разницы.
Есть, конечно, еще вариант внутри каждого exit() целиком вставлять html код текущей страницы (к примеру, входа) + поле об ошибке. Но в случае, к примеру, регистрации, у меня есть exit() в количестве 5 или более и 5 раз дублировать код страницы с разницей лишь в тексте сообщения об ошибке- я, конечно, новичек, но мне все таки кажется это извращением и что есть другие способы?
condpattern Отправлено: 20 Июля, 2013 - 22:33:42 • Тема: exit() • Форум: Вопросы новичков

Ответов: 11
Просмотров: 536
Доброго времени суток.
При обработке формы время от времени попадается exit()
PHP:
скопировать код в буфер обмена
  1. if ($result2 == 'TRUE') {
  2.         $confirm = true;
  3.     } else {
  4.         exit('Oh snap! Something went wrong.');
  5.     }

В отличии от успешной операции, где я могу добавить, как в примере,

и далее просто аккуратно вывести уведомление об успехе там, где мне нужно:
PHP:
скопировать код в буфер обмена
  1. <?PHP if(isset($confirm)) { ?>
  2.             <div class="alert alert-success">
  3.                <b>Well done!</b> Email has been sent.
  4.             </div>
  5.             <?PHP } ?>

exit() целиком выкидывает меня и мы оказываемся в белом окне, где можем написать стандартным шрифтом, как в примере, аля
PHP:
скопировать код в буфер обмена
  1.  exit('Oh snap! Type a valid email address.');

Можно ли вывести причину операции exit() оставаясь на странице отправки?
Единственное, что мне приходит в голову, это редирект с id ошибки и далее, в зависимости от id также выводить поля ошибки, как и поля об успехе.
PHP:
скопировать код в буфер обмена
  1. exit("<html><head><meta http-equiv='Refresh' content='0; URL=/signin.php?errors=email'></head></html>");

Но мне кажется это не совсем клевый способ, ведь в этом случае, юзер может сам в строке набрать при юзании ЧПУ строку /signin/email и получит окно с формой ошибки.
Может есть какие-нибудь другие методы?
Спасибо.
condpattern Отправлено: 15 Июля, 2013 - 21:52:10 • Тема: Вывод из SQL, SUM() • Форум: Вопросы новичков

Ответов: 16
Просмотров: 764
LIME пишет:
PHP:
скопировать код в буфер обмена
  1. echo $query = "SELECT COUNT(*) FROM table WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM table WHERE login = '$login') ";
  2. $result = mysql_query($query, $db) or die(mysql_error());


Большое спасибо. Несколько вариантов попробовал. В итоге, решил оставить этот:

PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT COUNT(DISTINCT f1+f2+f3) as rank FROM table WHERE f1+f2+f3 >= (SELECT f1+f2+f3 FROM table WHERE login='$login' LIMIT 1)",$db);
  2. $myrow = mysql_fetch_array($result);
  3. echo $myrow['rank'];


Все работает. Всем мерси.
condpattern Отправлено: 15 Июля, 2013 - 20:21:41 • Тема: Вывод из SQL, SUM() • Форум: Вопросы новичков

Ответов: 16
Просмотров: 764
LIME пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM tbl WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM tbl WHERE login = $login)
тыб почитал немного SQL


Сделал так:

CODE (SQL):
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT COUNT(*) FROM table WHERE f1+f2+f3 < (SELECT f1+f2+f3 FROM table WHERE login = '$login') ",$db);
  2. $myrow = mysql_fetch_array($result);
  3. ?>
  4.  
  5.  
  6.                <tr class="info">
  7.                   <td>
  8.                      <?php echo $myrow['rank']; ?>
  9.                   </td>


Но почему-то в ответ пустота. Мб ордер куда-нибудь добавить?

Может быть вы знаете, можно ли в MySql добавить столбец значение, в котором автоматом бы считалось как сумма двух или трех других? Это бы убрало все сложности. Пользуюсь PhpMyAdmin.
Спасибо.
condpattern Отправлено: 15 Июля, 2013 - 19:58:25 • Тема: Вывод из SQL, SUM() • Форум: Вопросы новичков

Ответов: 16
Просмотров: 764
[quote=LIME][/quote]
Забудем про цикл. Тут я разобрался. Спасибо!
Вопрос, как быть с 1 пользователем
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) AS rank FROM TABLE WHERE login='$login' ORDER BY f1+f2+f3 DESC

Выдает всегда rank=1.
При любых ORDER BY.
condpattern Отправлено: 15 Июля, 2013 - 19:45:13 • Тема: Вывод из SQL, SUM() • Форум: Вопросы новичков

Ответов: 16
Просмотров: 764
В таблице много строк.
Пример:

login f1 f2 f3 f4
-------------------------------- ----
login1 1 1 0 2
login2 1 2 3 0
login3 2 1 1 4

Я хочу получить ранк, к примеру, для login1, если бы таблица сортировалась по убыванию для f1+f2+f3

Т.е. в нашем случае ожидаемый результат для login 1, rank=3

И еще в идеале хотелось бы чтобы сие работало в первом сообщении, т.е.
Я вывожу в таблицу из SQL пользователей т для каждого считается ранг.

Пример:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include ("data.php");
  3. $result = mysql_query("SELECT f1,f2,f3,f4,f3+f4 AS sum, COUNT(*) AS rank FROM tablename ORDER BY f1",$db);
  4. $myrow = mysql_fetch_array($result);
  5. do
  6. { ?>
  7.  
  8.  
  9.                <tr>
  10.                   <td>
  11.                      <?PHP echo $myrow['rank']; ?>
  12.                   </td>
  13.                   <td>
  14.                      <?PHP echo $myrow['f1']; ?>
  15.                   </td>
  16.                   <td>
  17.                      <?PHP echo $myrow['f2']; ?>
  18.                   </td>
  19.                   <td>
  20.                      <?PHP echo $myrow['sum']; ?>
  21.                   </td>
  22.                   <td>
  23.                      <?PHP echo $myrow['f3']; ?>
  24.                   </td>
  25.                   <td>
  26.                      <?PHP echo $myrow['f4']; ?>
  27.                   </td>
  28.                </tr>
  29.  
  30.  
  31. <?PHP
  32. } //выводим их в цикле
  33. while($myrow = mysql_fetch_array($result));
  34.  ?>


Но в этом случае выдается только одна строчка.
condpattern Отправлено: 15 Июля, 2013 - 19:06:37 • Тема: Вывод из SQL, SUM() • Форум: Вопросы новичков

Ответов: 16
Просмотров: 764
esterio пишет:
mysql_error

П.С. у Вас запрос не верный
Спойлер (Отобразить)


Спасибо, работает.
Подскажите еще:
Пытаюсь получить ранк текущего юзера по f1+f2+f3
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT('$login') AS rank FROM TABLE ORDER BY f1+f2+f3

Если я верно понимаю, он должен получать таблицу с сортировкой по f1+f2+f3 и выдавать положение в ней текущего логина, но он выдает нечто непонятное.
Где я ошибаюсь?
condpattern Отправлено: 15 Июля, 2013 - 17:56:56 • Тема: Вывод из SQL, SUM() • Форум: Вопросы новичков

Ответов: 16
Просмотров: 764
Добрый вечер.
Вывожу из базы MySQL в таблицу:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include ("data.php");
  3. $result = mysql_query("SELECT f1,f2,f3,f4,SUM(f3+f4) FROM tablename ORDER BY f1",$db);
  4. $myrow = mysql_fetch_array($result);
  5. do
  6. { ?>
  7.  
  8.  
  9.                <tr>
  10.                   <td>
  11.                      <?PHP echo $myrow['f1']; ?>
  12.                   </td>
  13.                   <td>
  14.                      <?PHP echo $myrow['f2']; ?>
  15.                   </td>
  16.                   <td>
  17.                      <?PHP echo $myrow['SUM(f3+f4)']; ?>
  18.                   </td>
  19.                   <td>
  20.                      <?PHP echo $myrow['f3']; ?>
  21.                   </td>
  22.                   <td>
  23.                      <?PHP echo $myrow['f4']; ?>
  24.                   </td>
  25.                </tr>
  26.  
  27.  
  28. <?PHP
  29. } //выводим их в цикле
  30. while($myrow = mysql_fetch_array($result));
  31.  ?>

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


П.с. если убрать сумму, то все отлично выводится, получается таблица из N строк с верными данными.
condpattern Отправлено: 15 Июля, 2013 - 10:42:39 • Тема: Как сделать так чтобы формы для ввода данных исчезли если пользователь написал все верно. • Форум: Вопросы новичков

Ответов: 17
Просмотров: 795
HTML пишет:

Если после обработки формы вы убеждаетесь, что все ок, в конце задаете любую переменную, например, $hasError как false


В конце чего?
Так что ле?
PHP:
скопировать код в буфер обмена
  1. if($submit) { if(empty($name)) {
  2. echo "Введите имя!"; }
  3.  
  4. elseif(strlen($name)<=5)
  5.  
  6. {
  7.  
  8. echo "Слишком короткое имя"; }
  9.  
  10. else { $hasError = false; } ?>
  11. <?PHP if(isset($hasError)) { ?>
  12. <form method="POST" action="">
  13.  
  14. Ваша имя:
  15. <input type="text" name="name">
  16. <input type="submit" name="submit"
  17. value="Войти"> <?PHP } } ?>

(Добавление)
Или нет?[/quote]

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

PHP:
скопировать код в буфер обмена
  1. $hasError = true;
  2. if($submit) { if(empty($name)) {
  3. echo "Введите имя!"; }
  4.  
  5. elseif(strlen($name)<=5)
  6.  
  7. {
  8.  
  9. echo "Слишком короткое имя"; }
  10.  
  11. else { $hasError = false; } ?>
  12. <?PHP if(isset($hasError)) { ?>
  13. <form method="POST" action="">
  14.  
  15. Ваша имя:
  16. <input type="text" name="name">
  17. <input type="submit" name="submit"
  18. value="Войти"> <?PHP } } ?>


Должно работать.
Только присвоение переменной тру вам нужно не просто так вставить сверху, а в ваш скрипт проверки- авторизован ли пользователь или нет.
Т.е. если пользователь не авторизован, ставите true и форма видна, если вход выполнен, ставите фолс и форма не видна.
Если речь идет не об авторизации или регистрации, все равно у вас должен быть скрипт проверки, вводил ли уже пользователь значения в сие поле или еще нет.
condpattern Отправлено: 14 Июля, 2013 - 23:02:29 • Тема: htaccess • Форум: Вопросы новичков

Ответов: 5
Просмотров: 263
[quote=DeepVarvar][/quote]
Мерси.

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB