PHP, Access, MySQL

Dr.Acula

Вобщем, хочу сделать сайтик...
На PHP хочу написать форму, в которую юзеры будут вбивать свои данные, после этого данные должны отправляться ко мне на сервер. И я буду с ними работать. Потом, если надо будет данные из БД снова будут выводиться на сайт. И вот тут есть проблема. Не могу определиться, как лучше сделать:
(Знаю Access, плохо знаю PHP, не знаю MySQL)
1. Данные отправляются в MySQL, оттуда в Access, и в Access'е с ними можно работать.
2. Отправлять напрямую в Access.

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

wasserfall

Вариант три: никакого Access. Забудьте про него.

Dr.Acula

Дак вот, не знаю я MSQL...

Сайт, в общем то, готов, осталось только страницку с формой сделать

wasserfall

А в чем проблема-то?

Dr.Acula

Вобщем, есть сайт. Сайт уже создан и работает. Сейчас надо создать для этого сайта форму, которую будут заполнять пользователи, эти данные будут приходить ко мне в БД. Ну потом я их обрабатываю, как мне надо. Но, с БД я умею работать только в Access, а MySQL учить неохота.

А сейчас проблема возникла еще одна: пытаюсь поставить Апач, php5, msql и phpmyadmin. Дак вот, это писец, уже 2 дня е...ь. Ниче не работает. Использую вот этот мануал http://www.cyberforum.ru/php-beginners/thread87651.html . Дошел до пункта, в котором надо запустить файл start-webserver.bat и при запуске mysql выдается ошибка 1067. Погуглил, покопался в my.ini, вобщем, перепробовал все, что было написано, ниче не помогает.

Dr.Acula

Так, проблему решил, поставив Денвер3 😊

DisPetcher

аксес говно. учи майСКЛ, тем более что не сложно, а запросы писать что там - что там - почти одинаково.

wasserfall

Dr.Acula
Так, проблему решил, поставив Денвер3
Осторожнее с Денвером, у него базовые настройки в стиле "заходите гости дорогие". А на будущее - вместо Денвера ещё можно XAMPP поставить, тоже ничего.

У меня остались старые файлы от курсовиков по php-mysql, там есть более-менее юзабельный класс для подключения и работы с БД (не мой), могу выложить, если нужно. А вообще, возможно имеет смысл использовать Oracle Express бесплатный? Там и визуальный редактор присутствует толковый, чтобы при переходе с Access-а не ломать голову.

Dr.Acula

А еще пара вопросов: 1. Вот есть у меня, например страничка index.php и в денвере ее куда складывать, чтоб потом можно было посмотреть ее?
2. Куда складывать БД?
3. Как вообще лучше всего начать работать? Сперва создать БД или создать форму?
А то никогда не приходилось сайты с использованием php и mysql делать. Даже не знаю, с чего начинать (учебники по php и mysql есть)

Или можно с БД отсюда работать?

Dr.Acula

Так, как сайт создать я понял. Но вот по остальным пунктам не разобрался

Насколько понимаю, phpmyadmin это интерфейс для mysql? А манулаы хорошие есть? На английском я нашел, но мне бы на русском

wasserfall

PHPmyAdmin, конечно, служит для работы с мускулом, но не является родным для него, а просто реализует веб-интерфейс для любителей GUI, поэтому читать надо мануал именно по MySQL, всё сразу станет понятно.

Dr.Acula

Поставил XAMPP, создал простую форму в html, создал в MySQL БД, настроил передачу данных из формы в БД. Все работает. Сейчас надо переделать форму. Для этого нужен javascript. Поэтому такие вопросы:
1. Javascript в XAMPP'е работает?
2. В phpmyadmin есть календарик. Вот я в свою форму хочу точно такой-же календарик, для ввода даты рождения. Как-нибудь перенести его можно?
3. Какие самые хорошие учебники по javascript? Надо такие учебники, чтоб потом мог создать динамическую форму. В нете почти везде в качестве примере приводят динамическую форму про детей (просто нажимаем кнопочку "Добавить" и добавляется новое поле для ввода имени ребенка). А мне бы почитать что-то такое, чтоб потом в форме в самом начале выбираешь в выпадающем списке один из пунктиков и в зависимости от того, что выбрали, будет предложена своя форма и, соответственно, данные будут заноситься в одну БД, но в разные таблицы.

Bugi

если уж и учить, то оракл

k-root

1. он везде работает - он выполняется непосредственно браузером, а откуда его передавать - разницы нету.
2. поищите готовые скрипты (woweb.ru) - там календарики на любой вкус
3. гугл 😊
а вообще прочитайте про основные операции и логические операторы - для такой задачи вполне хватит.

а в какую таблицу заносить - надо выбираться уже на стороне сервера. иначе нехорошие посетители в опере допишут что-то вроде "999';DROP+TABLE;" и будет весело)
потому в запрос вставляйте данные через mysql_escape_string:
insert into tableName (field_1, field_2) VALUES ("mysql_escape_string($val_1)", "mysql_escape_string($val_2)");

Dr.Acula

Спс за сайт 😊
Нашел на нем точно такой же календарик, какой и в phpmyadmin 😊
Правда теперь появилось еще больше вопросов 😊 Например, как его вставить в форму 😊
С защитой я пока возиться не буду, ибо даже форму создать кое как могу. Сперва с формой и javascript'ом разберусь, а потом уже буду над защитой думать 😊

wasserfall

Dr.Acula
3. Какие самые хорошие учебники по jаvаsсriрt? Надо такие учебники, чтоб потом мог создать динамическую форму.
Вообще оно: http://javascript.ru/book/definitiveguide

Но для того, чтобы не разрушать мозг, обязательно стоит познакомиться с фреймворком JQuery: http://jquery.com/

Dr.Acula

Ненене, про фреймворки больше не надо. Я сперва 4 дня пытался сам настроить сервак, а потом 3 дня выбирал, какой фреймворк поставить.

Dr.Acula

А кто-нибудь ошибку видит? 😊 А то кнопка все время активна.

code:

«head»
«title»Форма Докладчика«/title»
«meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /»


«script»
// Проверка введенного и включение кнопки submit
function checkreq()
{
path=document.reporter;
tmp=(path.Name.value=='');
if (!tmp && (path.Name.value.length « 2)) { tmp=true; }
path.Submit.disabled=tmp;
if (tmp) { return; }
tmp=(path.Surname.value=='');
if (!tmp && (path.Surname.value.length < 2)) { tmp=true;}
path.Submit.disabled=tmp;
if (tmp) { return; }
tmp=(path.Patronymic.value=='');
if (!tmp && (path.Patronymic.value.length < 2)) { tmp=true; }
path.Submit.disabled=tmp;
if (tmp) { return; }
tmp=(path.SSurname.value=='');
if (!tmp && (path.SSurname.value.length < 2)) { tmp=true;}
path.Submit.disabled=tmp;
if (tmp) { return; }
tmp=(path.SName.value=='');
if (!tmp && (path.SName.value.length < 2)) { tmp=true;}
path.Submit.disabled=tmp;
if (tmp) { return; }
tmp=(path.SPatronymic.value=='');
if (!tmp && (path.SPatronymic.value.length < 2)) { tmp=true;}
path.Submit.disabled=tmp;
if (tmp) { return; }
}
</script»

«/head»

«body»

«form method="POST" action="loan.php" form name="reporter"»

Фамилия:
«input name="Surname" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
Имя:
«input name="Name" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
Отчество:
«input name="Patronymic" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
E-mail:
«input name="Email" type="text"»
«br»
Пол:
«select name="Sex"»
«option value=Male»Мужской«/option»
«option value=Female»Женский«/option»
«/select»
«br»
Дата рождения:

«select name="bday"»
«OPTION value="01"»01«/OPTION»
«OPTION value="02"»02«/OPTION»
«OPTION value="03"»03«/OPTION»
«OPTION value="04"»04«/OPTION»
«OPTION value="05"»05«/OPTION»
«OPTION value="06"»06«/OPTION»
«OPTION value="07"»07«/OPTION»
«OPTION value="08"»08«/OPTION»
«OPTION value="09"»09«/OPTION»
«OPTION value="10"»10«/OPTION»
«OPTION value="11"»11«/OPTION»
«OPTION value="12"»12«/OPTION»
«OPTION value="13"»13«/OPTION»
«OPTION value="14"»14«/OPTION»
«OPTION value="15"»15«/OPTION»
«OPTION value="16"»16«/OPTION»
«OPTION value="17"»17«/OPTION»
«OPTION value="18"»18«/OPTION»
«OPTION value="19"»19«/OPTION»
«OPTION value="20"»20«/OPTION»
«OPTION value="21"»21«/OPTION»
«OPTION value="22"»22«/OPTION»
«OPTION value="23"»23«/OPTION»
«OPTION value="24"»24«/OPTION»
«OPTION value="25"»25«/OPTION»
«OPTION value="26"»26«/OPTION»
«OPTION value="27"»27«/OPTION»
«OPTION value="28"»28«/OPTION»
«OPTION value="29"»29«/OPTION»
«OPTION value="30"»30«/OPTION»
«OPTION value="31"»31«/OPTION»
«/select»
«select name="bmonth"»
«OPTION value="01"»Январь«/OPTION»
«OPTION value="02"»Февраль«/OPTION»
«OPTION value="03"»Март«/OPTION»
«OPTION value="04"»Апрель«/OPTION»
«OPTION value="05"»Май«/OPTION»
«OPTION value="06"»Июнь«/OPTION»
«OPTION value="07"»Июль«/OPTION»
«OPTION value="08"»Август«/OPTION»
«OPTION value="09"»Сентябрь«/OPTION»
«OPTION value="10"»Октябрь«/OPTION»
«OPTION value="11"»Ноябрь«/OPTION»
«OPTION value="12"»Декабрь«/OPTION»
«/select»

«select name="byear"»
«OPTION value="1999"»1999«/OPTION»
«OPTION value="1998"»1998«/OPTION»
«OPTION value="1997"»1997«/OPTION»
«OPTION value="1996"»1996«/OPTION»
«OPTION value="1995"»1995«/OPTION»
«OPTION value="1994"»1994«/OPTION»
«OPTION value="1993"»1993«/OPTION»
«OPTION value="1992"»1992«/OPTION»
«OPTION value="1991"»1991«/OPTION»
«OPTION value="1990"»1990«/OPTION»
«OPTION value="1989"»1989«/OPTION»
«OPTION value="1988"»1988«/OPTION»
«OPTION value="1987"»1987«/OPTION»
«OPTION value="1986"»1986«/OPTION»
«OPTION value="1985"»1985«/OPTION»
«OPTION value="1984"»1984«/OPTION»
«OPTION value="1983"»1983«/OPTION»
«OPTION value="1982"»1982«/OPTION»
«OPTION value="1981"»1981«/OPTION»
«OPTION value="1980"»1980«/OPTION»
«OPTION value="1979"»1979«/OPTION»
«OPTION value="1978"»1978«/OPTION»
«OPTION value="1977"»1977«/OPTION»
«OPTION value="1976"»1976«/OPTION»
«OPTION value="1975"»1975«/OPTION»
«OPTION value="1974"»1974«/OPTION»
«OPTION value="1973"»1973«/OPTION»
«OPTION value="1972"»1972«/OPTION»
«OPTION value="1971"»1971«/OPTION»
«OPTION value="1970"»1970«/OPTION»
«OPTION value="1969"»1969«/OPTION»
«OPTION value="1968"»1968«/OPTION»
«OPTION value="1967"»1967«/OPTION»
«OPTION value="1966"»1966«/OPTION»
«OPTION value="1965"»1965«/OPTION»
«OPTION value="1964"»1964«/OPTION»
«OPTION value="1963"»1963«/OPTION»
«OPTION value="1962"»1962«/OPTION»
«OPTION value="1961"»1961«/OPTION»
«OPTION value="1960"»1960«/OPTION»
«OPTION value="1959"»1959«/OPTION»
«OPTION value="1958"»1958«/OPTION»
«OPTION value="1957"»1957«/OPTION»
«OPTION value="1956"»1956«/OPTION»
«OPTION value="1955"»1955«/OPTION»
«OPTION value="1954"»1954«/OPTION»
«OPTION value="1953"»1953«/OPTION»
«OPTION value="1952"»1952«/OPTION»
«OPTION value="1951"»1951«/OPTION»
«OPTION value="1950"»1950«/OPTION»
«OPTION value="1949"»1949«/OPTION»
«OPTION value="1948"»1948«/OPTION»
«OPTION value="1947"»1947«/OPTION»
«OPTION value="1946"»1946«/OPTION»
«OPTION value="1945"»1945«/OPTION»
«OPTION value="1944"»1944«/OPTION»
«OPTION value="1943"»1943«/OPTION»
«OPTION value="1942"»1942«/OPTION»
«OPTION value="1941"»1941«/OPTION»
«OPTION value="1940"»1940«/OPTION»
«OPTION value="1939"»1939«/OPTION»
«OPTION value="1938"»1938«/OPTION»
«OPTION value="1937"»1937«/OPTION»
«OPTION value="1936"»1936«/OPTION»
«OPTION value="1935"»1935«/OPTION»
«OPTION value="1934"»1934«/OPTION»
«OPTION value="1933"»1933«/OPTION»
«OPTION value="1932"»1932«/OPTION»
«OPTION value="1931"»1931«/OPTION»
«OPTION value="1930"»1930«/OPTION»
«/select»

«br»
Страна:
«input name="Country" type="text"»
«br»
Регион:
«input name="Region" type="text"»
«br»
Город:
«input name="City" type="text"»
«br»
Название учебного заведения:
«input name="School" type="text"»
«br»
Адрес:
«input name="Address" type="text"»
«br»
Класс:
«select name="Class"»
«option value=11»11«/option»
«option value=10»10«/option»
«option value=9»9«/option»
«option value=8»8«/option»
«option value=7»7«/option»
«/select»
«br»
Фамилия научного руководителя:
«input name="SSurname" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
Имя научного руководителя:
«input name="SName" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
Отчество научного руководителя:
«input name="SPatronymic" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
«input type="submit" value="Отправить"»
«input type="reset" value="Очистить"»
«/form»

«/body»
«/html»

k-root


«input type="submit" value="Отправить" disabled id=myBtn»
по функции я бы сделал так: установил бы флаг неправильного заполнения в 1 и проверял бы все поля.
если все ОК - то идем дальше, если нет - от возвращаемся. если дошли до конца и все ОК - то
document.getElementById('myBtn').disabled = false;
но форму можно отправить и по ентеру - потому надо в начале написать что-то вроде

«form method="POST" action="loan.php" name="reporter" onsubmit='return: false;'»
а переход явой делать. как-то так. прошу сильно тапками не бросаться - без мануалов не могу пока писать )

Dr.Acula

Я код для блокировки отправки в мануале нашел. Но он че-то не хочет работать. Кнопка все время активна.

k-root

потому что к кнопке надо атрибут disabled добавить

Dr.Acula

Так?

code:

«input type="submit" value="Отправить" disabled="disabled""»

k-root

нет, вот так:
«input type="submit" value="Отправить" disabled»

Dr.Acula

Все равно не хочет работать. Кнопка все время неактивна.

k-root

правильно. а ктивировать ее надо скриптом, если все заполнено верно:


«head»
«script»
function checkreq()
{
if(document.getElementById('Surname').value.length « 2) return false;
if(document.getElementById('Name').value.length < 2) return false;
..............
document.getElementById('btn').disabled=false;
}

</script»

«/head»

«body»

«form method="POST" action="loan.php" name="reporter"»

Фамилия:
«input name="Surname" id=Surname type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
«br»
«input name="Name" id=Name type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()"»
...........

ну а дальше по образцу
рекондую поставить mozilla + firebug - будет ошибки все показывать

Dr.Acula

Блин, совсем запутали...

k-root

кнопку делаем неактивной.
функция проверяет все поля по очереди. если какое-то не подходит - то прекращаем проверку (return). если rеturn'ов не было - то мы доберемся до последней строчки, которая активирует кнопку ) теперь можно отправлять форму

wasserfall

Dr.Acula
Ненене, про фреймворки больше не надо. Я сперва 4 дня пытался сам настроить сервак, а потом 3 дня выбирал, какой фреймворк поставить.
JavaScript-фреймворки клиентские просто подключаются, как и простые файлы .js:
«script src="jquery-1.4.3.js"»«/script»

после чего вещи типа document.getElementById('myBtn') можно будет писать как $('#myBtn')[0] и вообще проще жить: http://jquery-docs.ru/

Dr.Acula
«input type="submit" value="Отправить" disabled id=myBtn»
«input type="submit" value="Отправить" disabled id="myBtn" /» - все аттрибуты в кавычках должны быть, а теги закрыты.

Dr.Acula
Все равно не хочет работать. Кнопка все время неактивна.
Конечно не будет работать, скрипт-то отрабатывает до загрузки «body» и никаких полей в документе, соответственно, не находит. Его весь надо запихать в функцию function myscript(){ ...блабла... }, а потом вызвать: «body onLoad="myscript()"», тогда заработает. И все скрипты всё-таки лучше писать в отдельных файлах и подключать, удобнее будет. А для разработки взять какой-нибудь браузер с отладчиком, например Chrome, ошибки ловить будет проще. И приличную IDE неплохо бы скачать, например NetBeans.

Dr.Acula

Что-то никак не доходит...
Вот есть у меня функция function checkreq(){...блаблабла... }. Когда я пишу onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()", я, разве, не обращаюсь к функции?

wasserfall

Dr.Acula
Что-то никак не доходит...
Вот есть у меня функция function checkreq(){...блаблабла... }. Когда я пишу onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()", я, разве, не обращаюсь к функции?
Это я отвлёкся - решил проверить код document.getElementById('btn').disabled=false; без обёртки, всё у тебя нормально.
Только зачем столько обработчиков событий, не проще ли функцию по таймеру запустить?
«script»
var timer;

function setTimer(){
timer=setInterval(checkreq();10);
}

function checkreq(){...блаблабла... }
«/script»
«body onLoad="serTimer()"»

Dr.Acula

Пожалуйста, не грузите меня 😊 Я 3 дня уже изучаю php, javascript и mysql. Мне уже сны снятся про javascript.
А я тут подумал... и решил не использовать отключение кнопки. Я, лучше, сделаю проверку вот такую:
function check()
{
p_Surname=document.reporter.Surname.value.toString();
if (p_Surname!='')
{ if (p_Surname.length«3 | | p_Surname.length»40)
{ alert ('Укажите вашу фамилию (3-40 символов)!');
document.reporter.Surname.focus();
return false;
}
}
else
{ alert('Необходимо ввести фамилию!');
document.reporter.Surname.focus();
return false;
}

Такая проверка хорошая?

wasserfall

document.reporter.Surname.value.toString() - оно точно заработает?

if (p_Surname!='') == if(p_Surname)

Проверки на цифры в фамилии тоже нет, к слову.

В конце там где-то ещё return true; прячется, видимо?

Dr.Acula
Я 3 дня уже изучаю php, jаvаsсriрt и mysql. Мне уже сны снятся про jаvаsсriрt.
У меня курсе на третьем такое тоже было 😊

wasserfall

document.reporter.Surname.value.toString() - оно точно заработает?

if (p_Surname!='') == if(p_Surname)

Dr.Acula
p_Surname=document.reporter.Surname.value.toString();
лучше
var p_Surname=document.reporter.Surname.value.toString();

Dr.Acula
if (p_Surname.length«3 | | p_Surname.length»40)
| | - без пробела.

Проверки на цифры в фамилии тоже нет, к слову.

В конце там где-то ещё return true; прячется, видимо?

Dr.Acula
Я 3 дня уже изучаю php, jаvаsсriрt и mysql. Мне уже сны снятся про jаvаsсriрt.
У меня курсе на третьем такое тоже было 😊

wasserfall

document.reporter.Surname.value.toString() - оно точно заработает?

if (p_Surname!='') == if(p_Surname)

Dr.Acula
p_Surname=document.reporter.Surname.value.toString();
лучше
var p_Surname=document.reporter.Surname.value.toString();

Проверки на цифры в фамилии тоже нет, к слову.

В конце там где-то ещё return true; прячется, видимо?

Dr.Acula
Я 3 дня уже изучаю php, jаvаsсriрt и mysql. Мне уже сны снятся про jаvаsсriрt.
У меня курсе на третьем такое тоже было 😊

wasserfall

document.reporter.Surname.value.toString() - оно точно заработает?

if (p_Surname!='') == if(p_Surname)

Dr.Acula
p_Surname=document.reporter.Surname.value.toString();
лучше
var p_Surname=document.reporter.Surname.value.toString();

Проверки на цифры в фамилии тоже нет, к слову.

В конце там где-то ещё return true; прячется, видимо?

Dr.Acula
Я 3 дня уже изучаю php, jаvаsсriрt и mysql. Мне уже сны снятся про jаvаsсriрt.
У меня курсе на третьем такое тоже было 😊

Эх, что-то не постится...

Dr.Acula

Фу, блин. Проверку сделал. Осталось самое трудное...

Кто может поделиться готовим кодом для того, что связать поля Страна, регион, форма? Вот как тут, например, http://aioss.ru/programming/svyazat-polya-formy-strana-region-gorod-jquery/ 😊 БД стран городов и регионов я нашел, а вот код, который выложен на сайте, я никак не пойму...

k-root

это ajax, код со списком регионов подгружается с сервера когд выбираешь страну, после выбора региона грузится список городов

Dr.Acula

Вот там в форме только 2 страны. Т.е. страны не подгружаются из БД?

Вот эти строки не доходят до меня:
include ENGINE_DIR . '/data/config.php';
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';

И еще, где там указаывают, какую БД юзать?


Сделал бы все не используя БД, но данных слишком много, так что БД необходима...

k-root

JS ты освоил немного, теперь начинай РНР+MySQL - тогда сразу все поймешь

Dr.Acula

Я понять не могу, откуда автор статьи берет /data/config.php /classes/mysql.php, /data/dbconfig.php и /modules/functions.php или это он какие-то библиотеки подключил?

wasserfall

Dr.Acula
Я понять не могу, откуда автор статьи берет /data/config.php /classes/mysql.php, /data/dbconfig.php и /modules/functions.php или это он какие-то библиотеки подключил?
Да, это он файлы подключил.

Dr.Acula

Опять проблемка 😊
Поставил jQuery, использую тамошний календарик Datapiker


code:

«script type="text/javascript"»
$(function(){

// Datepicker
$('#datepicker').datepicker({
inline: true
});
//hover states on the static widgets
$('#dialog_link, ul#icons li').hover(
function() { $(this).addClass('ui-state-hover'); },
function() { $(this).removeClass('ui-state-hover'); }
);
});
«/script»

Вот например хочу заюзать такую настройку

Initialize a datepicker with the changeYear option specified.
$( ".selector" ).datepicker({ changeYear: true });
Get or set the changeYear option, after init.
//getter
var changeYear = $( ".selector" ).datepicker( "option", "changeYear" );
//setter
$( ".selector" ).datepicker( "option", "changeYear", true );

Куда ее писать? А то куда ни напишу, календарь не запускается.

Dr.Acula

Календарик прицеплен, но вот, блин: неделю вожусь и пытаюсь сделать загрузку стран, городов, регионов из БД в выпадающий список. Посмотрел кучу готовых кодов, выбрал боле-менее понятный. Не работает. И вот понять не могу, где трабла: в коде при отправке запроса на получения списка или при отправке списка из БД. Кто-нибудь может код посмотреть? Там еще библиотека PDO юзается, думаю, может быть с ней-что то...

wasserfall

Могу посмотреть, но ток попозже (не сегодня, у самого проект, только код дописал, пишу отчёт).