Форумы » Программирование »

Вопросы из области php



1 2 3 4 ... 7

6702
ZloVeЩиЙ
Опять я со своими вопросами,
даже тему отдельную создал, потому как по ходу изучения и практики php языка они будут появляться.

На этот раз решил написать простенькую форму регистрации... [color=gray]практика, практика и еще раз практика.[/color]
Если без проверки то все ок, а когда пытаюсь прикрутить проверку, то сообщения об ошиб[ке|ках] выводятся, но данные все равно записываются в БД.

[quote]$connect = mysql_connect('localhost','root') or die(mysql_error());
mysql_select_db('dbname'); [color=red]//успешный коннект[/color]

if (isset($_POST['reg'])) {

$login = $_POST['login'];
$password = $_POST['password']; [color=red]// нажали кнопку, присвоили значения полей переменным[/color]

if($login != '' && $password != '') { [color=red]// а не пустые ли поля? если не пустые проверяем дальше[/color]
if ((strlen($login) >= 3) and (strlen($login) <= 33)) { [color=red]// размер от 3 до 33 символов ну и проверка ниже[/color]
$login = stripslashes($login);
$login = html_entity_decode($login);
$login = strip_tags($login);
}
else {echo "Вы ввели не корректные данные в поле Логин";}

if((strlen($password) >= 3) and (strlen($password) <= 33)) { [color=red]// аналогично с полем пароль + шифруем его в md5[/color]
$password = stripslashes($password);
$password = html_entity_decode($password);
$password = strip_tags($password);
$password = md5('password');
}
else {echo "Вы ввели не корректные данные в поле Пароль";}
}

else {echo "Заполните обязательные поля.";}

}[/quote]
[b]1.[/b] Как и куда прикрутить запись в БД, когда данные введены верно!?
[quote]$query = mysql_query("INSERT INTO users VALUES('','$login','$password')")
or die(mysql_error());[/quote]
[b]2.[/b] На что еще можно проверить поля кроме как к-ва символов и наличия тегов?

Отредактировано ZloVeЩиЙ - 25.11.2013
6702
ZloVeЩиЙ
Такой вариант нашелся с проверкой true|false:
[code]$connect = mysql_connect('localhost','root') or die(mysql_error());
mysql_select_db('dbname');

if (isset($_POST['reg'])) {

$login = $_POST['login'];
$password = $_POST['password'];
$login_ok = true;
$password_ok = true;

if($login != '' && $password != '') {
if ((strlen($login) >= 3) and (strlen($login) <= 33)) {
$login = stripslashes($login);
$login = html_entity_decode($login);
$login = strip_tags($login);
}
else {
$login_ok = false;
echo "Вы ввели не корректные данные в поле Логин";}

if((strlen($password) >= 3) and (strlen($password) <= 33)) {
$password = stripslashes($password);
$password = html_entity_decode($password);
$password = strip_tags($password);
$password = md5('password');
}
else {
$password_ok = false;
echo "Вы ввели не корректные данные в поле Пароль";}
}
else {
$login_ok = false;
$password_ok = false;
echo "Заполните обязательные поля.";}
}
if($login_ok && $password_ok) {
$query = mysql_query("INSERT INTO users VALUES('','$login','$password')")
or die(mysql_error());
}[/code]
Но уж через чур он объёмный, можно как то проще это все дело проверять?
8497
Trilby
[code]<?
$connect = mysql_connect('localhost','root') or die(mysql_error()); //вообще, лучше создать файл конфига и импортировать его, а не писать логины и пароли прямо в коде.
mysql_select_db('dbname');
mysql_query("SET NAMES utf8;");

function register($login, $password){
if (!(strlen($login) < 3 and strlen($login) > 33)){
return "Ошибка, логин не подхоидт по размеру";
};
if (!(strlen($password) < 3 and strlen($password) > 33)){
return "Ошибка, пароль не подхоидт по размеру";
};
$password = md5($password); //на самом деле, md5 ломается за пару секунд. Надо юзать RSA, но мне ща лень это писать...
$query = mysql_query("INSERT INTO users VALUES('','{$login}','{$password}');") or die(mysql_error());
return "success; $login registred";
}

$login = htmlspecialchars($_POST['login']);
$password = htmlspecialchars($_POST['password']);
$reg = htmlspecialchars($_POST['reg']);

if ($login and $password and $reg) {
echo register($login, $password);
}

?>[/code]
мог сильно накосячить, и вообще много ошибок допустить. Если что, также готов выслушать критику в адрес своей реализации))
1555
TheDark
не плохо было бы еще делать [color=blue]trim()[/color] с логином и паролем, чтобы убрать случайные пробелы) а пароль хранить в двойном [color=blue]md5()[/color]
[b]ZloVeЩиЙ[/b], на [url=http://habrahabr.ru/post/13726/]Хабре[/url] достаточно подробно расписан простой вариант процесса регистрации/авторизации, может пригодится)

Отредактировано TheDark - 27.11.2013
6702
ZloVeЩиЙ
Такой вопрос...
1. Можно ли на [b]php[/b] вытащить скриншот из видео которое лежит на youtu.be имея ссылку?
2. Можно таких скриншотов сделать\вытащить несколько?

[url=http://yelagin.livejournal.com/205698.html]Такой ответ...[/url]

Отредактировано ZloVeЩиЙ - 06.12.2013
1555
TheDark
У меня вопрос не сложный, но я все никак не разберусь. Нужно обработать форму, занести данные в MySQL и вывести их на странице без перезагрузки самой страницы.
Как я понимаю, тут нужен AJAX. Но я с ним не работал и, вероятно, тут нужен более комплексный подход. Но времени у меня нет, а решение нужно.

Форма обычная, а данные на странице выводятся через mysql_query() и mysql_fetch_assoc() соответственно. Вопрос заключается в том, как обработать данные из $_POST не перезагружая страницу?

Форма, если что)
[code]<form name='someform' method='post'>
<input type='text' name='name'>
<textarea cols='40' rows='4' name='text'></textarea>
<input type='submit' name='submit' value='SEND'>
</form>[/code]

Отредактировано TheDark - 15.12.2013
8497
Trilby
[url=https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&ie=UTF-8#newwindow=1&q=ajax%20form%20example]google://ajax form example[/url]
Там все довольно просто... Подключается jQuery, с его помощью отправляются данные сервак (php-скрипт), там идет обработка/колдовство с mysql/возвращение данных... Возвращенные данные заносятся в форму. При минимальных знаниях английского все можно понять без документации даже
1555
TheDark
Как можно сделать, чтобы содержимое страницы http://site.ru/[color=red]?page=about[/color] было доступно по адресу http://site.ru/[color=blue]about[/color]?
Понимаю, дело с .htaccess, но если честно, не знаю как сформулировать запрос в гугле. Кто в курсе как это правильно делается?
8497
Trilby
[code]RewriteEngine On
RewriteBase /
RewriteRule ^about$ /index.php?page=about [L][/code]
первые две строки один раз в коде должны быть...

Отредактировано Trilby - 17.12.2013
1555
TheDark
[b]Trilby[/b], круто) а как быть с ссылками, которые сформируются в будущем? скажем, появится статья с [color=blue]id=10[/color] и в обычном случае я бы вывел ее как [color=blue]post.php?id=10[/color]... как сделать ее доступной по адресу, например, site.com/[color=blue]10.html[/color]?
или, что еще лучше - я в админке сделаю автоматический транслит названия статьи (чтобы "Вдохновение для дизайнера" превратилось в "vdohnovenie_dlya_dizainera") и помещу этот результат в бд. таким образом статью можно будет выводить как post.php[color=blue]?title=vdohnovenie_dlya_dizainera[/color]. Как сделать, чтобы адрес был вида site.com/[color=blue]vdohnovenie_dlya_dizainera[/color] ? [b]и так для каждой новой статьи в будущем?[/b]

не открывать же каждый раз .htaccess и вносить правки?)

[b]UPD.[/b] Нашел. [url=http://www.seoschool.ru/search-engine-optimization-seo/htaccess-mod_rewrite-ultimate-guide.html]Решение[/url] (там где о человеко-понятных урлах).

Отредактировано TheDark - 17.12.2013
1555
TheDark
Для перебора данных массива использую foreach:
[code]$array[] = 'one';
$array[] = 'two';
$array[] = 'three';
...
$array[] = 'twenty';
foreach ($array as $value) {
echo $value.",";
}[/code]
В результате все данные выводятся и разделяются запятой. Последний элемент массива тоже. Как сделать так, чтобы к последнему значению запятая не добавлялась? Тут надо как-то с ключем поиграться и там, где он последний применить правило. Но как сделать не знаю (:
Подскажите, плиз, как решить задачку)
8497
Trilby
Не нужно вывод делать циклом. Давно изобретен join.

[code]$array[] = 'one';
$array[] = 'two';
$array[] = 'three';
$array[] = 'twenty';

echo implode(",", $array);[/code]
Если какие-то задачи будут, где надо выделить последний элемент в итерации, то здесь обычный if-else поможет:
http://stackoverflow.com/questions/1070244/how-to-determine-the-first-and-last-iteration-in-a-foreach-loop

Отредактировано Trilby - 07.01.2014
1555
TheDark
[b]Trilby[/b], нет, implode для меня не вариант. я привел упрощенный вариант цикла. на деле мне нужно с каждым элементом воздействовать, а не просто получить список.
8497
Trilby
[quote=TheDark][b]Trilby[/b], нет, implode для меня не вариант. я привел упрощенный вариант цикла. на деле мне нужно с каждым элементом воздействовать, а не просто получить список.[/quote]
я уже переписал свое сообщение. Там и на это ответ

Отредактировано Trilby - 07.01.2014
1555
TheDark
[b]Trilby[/b], о, спасибо) я уже придумал вариант, используя array_pop() и array_push(), но в примерах нашелся вариант компактнее)

Отредактировано TheDark - 07.01.2014
19339
Dimitry
ну ещё как вариант

[quote]$out="";
foreach ($array as $value) {
if($out) $out.=","; $out.=$value;
}
echo $out;[/quote]
1555
TheDark
Не совсем из области PHP, но очень рядом) Вопрос по кодировке MySQL.
в [color=blue]install.php[/color] формируется запрос в бд о создании таблицы:
[code]$create_table_pages = "CREATE TABLE pages
(
id INT(4) NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
text TEXT NOT NULL,
meta_d VARCHAR(255) NOT NULL,
meta_k VARCHAR(255) NOT NULL,
page VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
)ENGINE=MyISAM CHARACTER SET=cp1251;";[/code]
и выполяется [color=blue]mysql_query($create_table_pages)[/color]
В случае успеха, в эту таблицу сразу же заносятся стандартные данные (текст) на русском языке.
Но в таблицу все попадает в виде [color=blue]???????[/color]. Кодировку я поставил cp1251, в бд тоже значится cp1251_general_ci
Пробовал к каждому полю дописывать [color=blue]CHARACTER SET cp1251 COLLATE cp1251_general_ci[/color] - эффекта ноль.

Интересно, что на локалке все нормально и таких траблов не возникает, а вот стоит залить в нет...) Кто знает как пофиксить?

[b]UPD.[/b] Решил, может кому пригодится. После mysql_connect и mysql_select_db вставил:
[code]mysql_query("SET NAMES 'cp1251'",$db);
mysql_query("SET character_set_client = cp1251",$db);
mysql_query("SET character_set_connection = cp1251",$db);
mysql_query("SET character_set_results = cp1251",$db);[/code]
Таким образом данные занеслись в бд правильно, но вывод все-равно был со знаками вопроса. Чтоб исправить нужно было в файле, где формируется подключение к бд (скажем, config.php) добавить:
[code]$charset = "cp1251";
mysql_set_charset($charset);[/code]

Отредактировано TheDark - 10.01.2014
6702
ZloVeЩиЙ
cp1251 ?
Все пытаются наоборот на UTF-8 перевести свои сайты !
1555
TheDark
[b]ZloVeЩиЙ[/b], пока такой потребности не вижу...) привык как-то))
1555
TheDark
пишу сюда, так как с регулярками почти не знаком, а ради этого изучать их не хочется)
как сделать так, чтобы текст, скажем, [color=blue]http://site.com/[/color] автоматически становился ссылкой? Например, человек пишет комментарий на сайте и указывает такую ссылку) Нужно, чтобы при выводе комментария подобный текст становился ссылкой, причем, нечто вроде: [color=red]/away.php?url=[/color][color=blue]http://site.com/[/color]
кто поможет?
1 2 3 4 ... 7


Неавторизованные и новички не могут отправлять сообщения.

© 2008-2020
Контакты | Группа | Privacy и Cookie | Правила