Зачем же ты тип DATE поставил у поля? Не легче ли поставить тип VARCHAR, получить дату при помощи Ну и потом заносить в БД:
По-моему лучше бы все таки поставить не Varchar а Int, как написал je0n, поскольку так удобнее всего работать с датой имхо...
Разумеется, лучше использовать поле типа INT и засовывать туда timestamp, ну или если дефолтное значение - INT blablabla NOT NULL DEFAULT CURRENT_TIMESTAMP.
Для меня наоборот, с INTом были проблемы (возможно из-за точек между числами), поэтому и пользуюсь для даты типом VARCHAR, имхо удобнее для меня так
.:enot:., лучше откажись от использования типа Varchar для хранения даты, это как минимум затратно - хранить Int в 4 байта или твою дату, в которой ХЗ сколько байт, но уж точно больше 4... Скажем для формата Dd-mm-yyyy Hh:mm:ss - это уже 19 байт. Есть разница? Кроме того, по строковому параметру поиск идёт медленнее, выход - проиндексировать его, но какой смысл индексировать колонку в которой содержатся данные без повторений? Лучше делай по уму... И не допускай таких упущений в серьёзных проектах.
я не правильно описал проблему, у меня не просто ссылка а кнопка, я попробовал в кнопке прописать target=_blank и вроде получается но только в опере, а ие открывает в этом же фрейме, а с датой спасибо большое всем помогло=)
Да, это я знаю. Кстати такая же проблема была с хранением IP в БД. При типе поля INT писал 0, поэтому пришлось использовать VARCHAR. Ну а до серьёзного проекта мне ещё далеко, я тока на стадии изучения php, поэтому щас пишу маленький хоум-паг движок, ну а для него я думаю не особо существенна скорость работы с мускулем в различиях между 4 и 19 байтами Хотя я ещё со своей первой книжки по php знаю что текстовые поля занимают больше времени вывода чем числовые.
Ip-как раз и надо хранить строкой... А в идеале (если не подразумевается работать с таблицей напрямую через Sql-запросы, иначе усложнит реализацию запросов), нужно разбивать Ip на части, каждую часть преобразовывать в Hex представление, и уже засовывать результат в Char(8) поле... Это будет наиболее оптимально. Например: Ip-127.0.0.1 Ip[0] = 127 (7f) Ip[1] = 0 (00) Ip[2] = 0 (00) Ip[3] = 1 (01) и засовывать в базу, в поле Char(8) строку 7f000001.
Inet_aton() и Inet_ntoa() я бы не советовал использовать, т.к. это усложнит перенос веб-приложения на другие СУБД, в которых такие фичи отсутствуют. Лучше сделать это преобразование в Php-коде чтобы СУБД работала уже с окончательной версией данных.
Всем привет, Ребята помогите пожалуйста... Начал работать с ПХП и решил написать голосование... сделал вот таким образом... PHP: <table class=blok><tr><td class=head><div class=white> Голосование: </div></td></tr><tr><td><div> <?php $data='basa/vote.vhg'; // Название файла базы банных if($action=='done') { $file = fopen($data, "r+t"); $content=fread($file, filesize($data)); $content=explode('-', $content); if($game==1) $content[0]=$content[0]+1; if($game==2) $content[1]=$content[1]+1; if($game==3) $content[2]=$content[2]+1; if($price==1) $content[3]=$content[3]+1; if($price==2) $content[4]=$content[4]+1; if($price==3) $content[5]=$content[5]+1; echo(" <center> <font size=+2><div style=\"wi-dth: 200px;height: 24px;filter: shadow(color=#999999,direction=150);back-ground: #aaaaaa\"> Спасибо, за голос!</div></font> <table><tr><td width=30%><font face=arial size=1 color=#ffc000> класс:<br> норма:<br> плохо:</td> <td width=7%><font face=arial size=1 color=#ffc000> $content[0]<br>$content[1]<br>$content[2]</td> <td width=56%><font face=arial size=1 color=#ffc000> WEB кодинг:<br> Кодинг:<br> Реверсинг:</td> <td width=7%><font face=arial size=1 color=#ffc000> $content[3]<br>$content[4]<br>$content[5]</td> </font></td></tr></table></center><hr><a href=javascript:history.back(2)><i>Вернуться назад</i></a> "); $content=implode("-", $content); rewind($file); fwrite($file, $content); fclose($file); } else { echo(' <center> <font size=+2><div style="width: 200px;height: 24px;filter: shadow(color=#999999,direction=150);back-ground: #aaaaaa"> ПРОГОЛОСУЙ!</div></font> <form action=index.php?action=done method=post> <table><tr><td> <font face=arial size=1 color=#ffc000>Как Вам портал?<br> <input type="radio" name="game" value="1">на 5 баллов<br> <input type="radio" name="game" value="2" checked>на 3 балла<br> <input type="radio" name="game" value="3">на 1 балл<br><br> </td><td><tr><td> <font face=arial><font face=arial size=1 color=#ffc000>Ваше направление?<br> <input type="radio" name="price" value="1">WEB кодинг<br> <input type="radio" name="price" value="2">Кодинг<br> <input type="radio" name="price" value="3" checked>Реверсинг</font> </td></tr></table><br> <input class=but type=submit value=проголосовать> </form> </center><a href=javascript:history.back(1)><i>Вернуться назад</i></a> '); } ?> </div></td></tr></table> Скажите пожалуйста как сделать так чтобы проголосовав потом страница сразу отображала результаты а при попытке проголосовать по новой говорила что я уже голосовал.... пробовал с getcookie но повидимому руки кривые и знаний мало..
darckmilord: можно сделать таблицу в бд в которую будут делаться записи ip|время голосования потом при голосовании проверять как давно голосовал или голосовал ли.либо сессии
хммм scrat знаешь я бы рад но есив я на пхп не могу это пока организовать то что говорить про работу с базами данных....
Моно в файл записать с каких айпи голосовали а при голосовани проверять если такой ип уже голосовал. (если это скрипт теоретический и его не будут ставить на сайт.) но лучше помойму в кукисах прописать отметку о том что человек проголосовал.... А вот как это сделать пусть ктото из программистов ответит .. а то я пока не наю как это делать =)
PHP: <? $file = 'ips.txt'; if( substr_count( file_get_contents($file), getenv('REMOTE_ADDR') ) < 1 ) { golosovanie(); // ну здесь само голосование $fopen = fopen( $file, 'a' ); fwrite( $fopen, getenv( 'REMOTE_ADDR') ); fclose( $fopen ); } else { echo('Вы уже голосовали'); } ?> Нет не лучше. любой может очистить или изменить кукисы.
а что если сидят 20 человек на сайте с одного ип? и если записывать для каждого голосования ип в отдельный файл то это просто будет увеличивать размеры скрипта.... ладно еси проголосуют 20 - 30 а если 30к или 100к?
Попробуй ещё и по браузеру проверять.. PHP: <? $file = 'ips.txt'; if( substr_count( file_get_contents($file), getenv('REMOTE_ADDR')." ".$_SERVER["HTTP_USER_AGENT"] ) < 1 ) { golosovanie(); // ну здесь само голосование $fopen = fopen( $file, 'a' ); fwrite( $fopen, getenv( 'REMOTE_ADDR')." ".$_SERVER["HTTP_USER_AGENT"] ); fclose( $fopen ); } else { echo('Вы уже голосовали'); } ?> Как-ниубдь так =)
у меня еще вариант с системным временем. врядли будет совпалать секунда в секунду время на разных машинах,довольно редко да и при этом с одного айпи+с того же браузера... проверка времени. Берем выдираем системное время сервера(H1.M1.S1) и полученное нами время на машине у клиента(H2.M2.S3)....дальше из серверного времени вычитаем клиентское время(H1-H2.M1-M2.S1-S),у нас получается разница двух времен(H3.M3.S3)...совпадение мало вероятно...(но и тут же есть проблемы,еслиу клиента слишком медленный инет то данная тема будет ошибаться,хотя кто будет проводить атаку на медленном сервере)...и вписываем эту разницу в файл с ip клиента и его браузером... т.е. берем выдираем ip,браузер,системное время(через яваскрипт)...потом подается запрос... и мы со своей стороны делаем проверку. в 3этапа: 1-Проверяем наличие данного ip. 2-если ip уже есть сверяем его браузеры 3-если сново сопадает - проверяем время. Итог- если все совпадает то человек уже здесь был,иначе-голосует p.s.: ну я бы и не отказался от куков,подделать можно да,но все же как дополнительную проблему для недруга использовать тоже нужно. а еще вариант,если человек зашел под ИЕ,то можно выдрать имя компьютера...которое тоже врядли будет совпадать... Code: var compName=new ActiveXObject("WScript.Shell").Environment("Process").item("COMPUTERNAME"); Да и сессии я думаю тоже есть смысл прикрутить.
Вопрос... Видел многие люди используют $http_post_vars и $http_get_vars но это вроде тоже самое что и $_request да? а если это так то почему люди не используют рекюест? это вродь и кароче и правельнее будет или это просто привычка?
$_REQUEST - это любой метод, т.е. если $_GET['test'] или $_POST['test'] = 'asd', то и $_REQUEST['test'] = 'asd'. Некоторые юзают $HTTP_POST(GET)_VARS, для уточнения, что юзается метод пост(гет). Чем отличается он от $_POST(GET) я не знаю =)