1 (изменено: Ketsyki, 2010-11-02 12:29:03)

Тема: Help

Поставил Denwer. Надо сделать мне страничку с формой (Фамилия, Имя, Отчество, дата рождения и т.д.). Все данные, потом, должны вноситься в БД, которую надо сделать на msql. Ну и потом как-нибудь организовать управление  этой БД. Вообщем, с чего начинать? Я ни с php ни с mysql никогда не работал. Сейчас вот в phpmyadmin попробовал БД создать, да не знаю, получилось или нет... Есть ли какие-нибудь учебники или статейки хорошие, чтоб во все разобраться?

P.S. HTML я знаю, сейчас посмотрел в нете статейки по php, работа с массивами, логическими операторами, циклами и прочей фигней, которая есть в C++, это понятно. С работой с файлами тоже боле-менее разобрался.

2

Re: Help

С помощью phpMyAdmin создайте таблицу с необходимой структурой. Примерно она будет выглядеть так:

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `family` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT AUTO_INCREMENT=1 ;

Для добавления данных создайте HTML форму и отправьте данные методом POST.
http://lv.php.net/manual/en/language.va … ternal.php

В коде обработчика получаемых POST данных, сперва соединитесь с MySQL.
http://lv.php.net/manual/en/function.mysql-connect.php

Затем добавьте данные с помощью INSERT запроса (функция PHP mysql_query).
http://lv.php.net/manual/en/function.mysql-query.php

При необходимости выбрать данные из БД используйте функцию PHP mysql_fetch_assoc
http://lv.php.net/manual/en/function.my … -assoc.php

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

Совет могу дать только один - читайте документацию. Поверьте, это очень хороший совет. smile

3

Re: Help

Удалил Denwer, поставил XAMPP.
Вот попробовал создать таблицу:

CREATE TABLE  `baza`.`1` (
`id` BIGINT NOT NULL ,
`Surname` TINYTEXT NOT NULL ,
`Name` TINYTEXT NOT NULL ,
`Patronymic` TINYTEXT NOT NULL ,
`E-mail` TINYTEXT NOT NULL ,
`Sex` CHAR( 1 ) NOT NULL ,
`Status` TINYTEXT NOT NULL ,
`Date of Birth` DATE NOT NULL ,
`Country` TINYTEXT NOT NULL ,
`Region` TEXT NOT NULL ,
`City` TINYTEXT NOT NULL ,
`Name of educational institution` TEXT NOT NULL ,
`Class (faculty)` INT NOT NULL ,
`SS Surname` TINYTEXT NOT NULL ,
`SS Name` TINYTEXT NOT NULL ,
`SS Patronymic` TINYTEXT NOT NULL
) ENGINE = MYISAM ;

4

Re: Help

Ketsyki сказал:

Вот попробовал создать таблицу

Структура таблицы вполне нормальная, только советую добавить для поля id параметр автоувеличения AUTO_INCREMENT и задать его первичным ключом PRIMARY KEY. Это можно сделать с помощь phpMyAdmin, либо выполнив в окне SQL запроса данные два запроса.

ALTER TABLE  `1` ADD PRIMARY KEY (  `id` );
ALTER TABLE  `1` CHANGE  `id`  `id` BIGINT( 20 ) NOT NULL AUTO_INCREMENT;

5

Re: Help

А как попросить phpmyadmin показать мне код БД?

6

Re: Help

Ketsyki сказал:

А как попросить phpmyadmin показать мне код БД?

Если вы имеете в виду вывод SQL запросов на создание структур таблиц и вставку данных, то это можно увидеть на вкладке экспорта, сняв предварительно галочку "Сохранить в файл".

7

Re: Help

Какую форму для ввода Даты рождения создать? И чтобы потом в mysql было удобно эти данные перенести.

8

Re: Help

Ketsyki сказал:

Какую форму для ввода Даты рождения создать? И чтобы потом в mysql было удобно эти данные перенести.

Если вы имеете в виду вид HTML поля, то самый простой вариант будет обычное текстовое поле. В этом случае необходимо будет проверять корректность данных вводимых пользователем.

<input type="text" value="" name="date" />

Как вариант, можно создать три выпадающих списка для выбора даты.

<select name="year"><option value="2010">2010 год</option></select>

9

Re: Help

Вот есть у меня форма: В самом начале есть выпадающий список. Если мы выбираем в списке "1", то снизу появляется одна форма, если выбрали "2", то форма появляется другая. Неужели это javascript?

10 (изменено: DmitryV, 2010-11-03 13:48:09)

Re: Help

Ketsyki сказал:

Вот есть у меня форма: В самом начале есть выпадающий список. Если мы выбираем в списке "1", то снизу появляется одна форма, если выбрали "2", то форма появляется другая. Неужели это javascript?

Да javascript, если при этом выборка с сервера то + AJAX
смотрите исходный код вашей страницы, там должно быть видно.

11

Re: Help

А без Явы никак? Я php и mysql почти не знаю, а тут ява sad

12 (изменено: DmitryV, 2010-11-03 13:51:19)

Re: Help

нет. php серверный язык, javascript (не путать с Java) клиентский - форма выбора на стороне клиента.

13 (изменено: Ketsyki, 2010-11-03 15:14:16)

Re: Help

Написал пока такую форму:

<html>
<head><title></title></head>
<body>
<b>Форма</b>
<form method="POST" action="loan.php">
Статус:
<select name="Status">
<option value=Участник>Участник</option>
<option value=Докладчик>Докладчик</option>
<option value=Сопровождающий>Сопровождающий</option>
</select>
<br>
Фамилия:
<input name="Surname" type="text">
<br>
Имя:
<input name="Name" type="text">
<br>
Отчество:
<input name="Patronymic" type="text">
<br>
E-mail:
<input name="E-mail" type="text">
<br>
Пол:
<select name="Sex">
<option value=Male>Мужской</option>
<option value=Female>Женский</option>
</select>
<br>
Дата рождения:
<input name="Date of Birth" type="date">
<br>
Страна:
<input name="Country" type="text">
<br>
Регион:
<input name="Region" type="text">
<br>
Город:
<input name="City" type="text">
<br>
Название учебного заведения:
<input name="Name of educational institution" type="text">
<br>
Адрес:
<input name="Address" type="text">
<br>
Класс/должность:
<input name="Class" type="text">
<br>
Фамилия научного руководителя:
<input name="SS Surname" type="text">
<br>
Имя научного руководителя:
<input name="SS Name" type="text">
<br>
Отчество научного руководителя:
<input name="SS Patronymic" type="text">
<br>
<input type="submit" value="Отправить">
<input type="reset" value="Очистить">
</form>
</body>
</html>

Дальше почитал вот этот урок: http://phpclub.ru/detail/article/phpintro
И вот не понял, у меня есть такая база
http://s010.radikal.ru/i312/1011/89/86e30a1e9cb6t.jpg

Скопирнул с сайта код, убрав рассылку на e-mailы и добавив новые данные:

 <?php 


/* Переменные для соединения с базой данных */ 
$hostname = "localhost"; 
$username = "myusername"; 
$password = "mypassword"; 
$dbName = "baza"; 

/* Таблица MySQL, в которой хранятся данные */ 
$userstable = "reporter"; 

/* email администратора */ 
$adminaddress = "jaumxo@gmail.com"; 

/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
/* выбрать базу данных. Если произойдет ошибка - вывести ее */ 
mysql_select_db($dbName) or die(mysql_error());  

echo "<CENTER>"; 
echo "Привет, ".$_POST['Name']; 
echo "<BR><BR>"; 
echo "</CENTER>"; 

  

/* составить запрос для вставки информации о клиенте в таблицу */ 
$query = "INSERT INTO $userstable VALUES('$Name','$E-mail','$Surname','$Patronymic','$Sex','$Date of Birth','$Country','$Region','$City','$Name of educational institution','$Address','$Class','$SS Surname','$SS Name','$SS Patronymic')"; 
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */ 
mysql_query($query) or die(mysql_error()); 
echo "Информация о вас занесена в базу данных."; 

/* Закрыть соединение */ 
mysql_close(); 
?> 

Что-то это не работает...

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'myusername'@'localhost' (using password: YES) in C:\Serv\xampp\htdocs\qwerty\loan.php on line 17
Не могу создать соединение

Я так понял, это как-то связано с логином и паролем?

14

Re: Help

В HTML ошибка:

Дата рождения:
<input name="Date of Birth" type="date">

У тега input в параметре type нет свойства date. Пропишите type="text".

В структуре таблицы ошибка заключается в сравнении cp1251_bin, которое используется для бинарных данных. Поменяйте сравнение всех текстовых полей на cp1251_general_ci. Проверьте, чтобы именно это сравнение было у всей таблицы. Сравнение таблицы можно поменять на странице "Операции" в phpMyAdmin.

В phpMyAdmin создайте пользователя MySQL и назначьте ему доступ к базе данных в которой находятся таблицы. Имя пользователя и пароль пропишите в переменных:

$username = "myusername"; // Имя пользователя MySQL
$password = "mypassword"; // Пароль пользователя MySQL
$dbName = "baza"; // Здесь пропишите имя базы данных в которой находится таблица
$userstable = "reporter"; // Таблица с которой будет работать скрипт

Перед запросом вставки данных обработайте переменные полученные в POST массиве:

$Name = addslashes($_POST['Name']);
// ... Дальше все поля пропишите таким же образом, как поле Name.
$query = "INSERT INTO $userstable VALUES('$Name','$E-mail','$Surname','$Patronymic','$Sex','$Date of Birth','$Country','$Region','$City','$Name of educational institution','$Address','$Class','$SS Surname','$SS Name','$SS Patronymic')";

15 (изменено: Ketsyki, 2010-11-03 16:56:11)

Re: Help

Создал юзера с привилегиями: Insert и Index
Исправил все, как вы сказали. БД заработала, данные в БД внеслись, но вместо текста там знаки вопроса.

И почему все таки не работает

Дата рождения:
<input name="Date of Birth" type="date">

?
В самой форме все работает нормально - учитываются високосные и невисокосные года. Но в БД все выглядит так: 0000-00-00

И какую кодировку поставить, чтобы вместо ?????? был нормальный текст? Не отображается ни русский ни английский язык. У меня сейчас стоит 1251_bin.

16

Re: Help

cp1251_general_ci

17

Re: Help

cp1251_general_ci поставил, заработал английский, но вместо русского все равно ????

18 (изменено: DmitryV, 2010-11-03 18:26:23)

Re: Help

Значит данные уже внесены не верно... добавьте новые и на странице где форма правильно пропишите мета тег

<head>
    <title>Имя страницы</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>

19

Re: Help

Все равно не работает sad

20

Re: Help

Ketsyki сказал:

Все равно не работает sad

Чтобы установить кодировку соединения с MySQL, сразу после строки:

mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");

Добавьте:

mysql_query('SET NAMES cp1251');

Обязательно проверьте кодировку файла скрипта. Кодировка должна быть ANSI, не UTF8.

<input type="date" /> - Это из HTML 5 и не советую пока использовать такую конструкцию. Добавьте текстовое поле type="text" и при приеме данных проверяйте их корректность с помощью регулярного выражения.
preg_match('/^\d{4}-\d{2}-\d{2}$/', $date);

21

Re: Help

Ура!!! Заработало!!! Спасибо всем smile Осталось выучить javascript, переписать форму, добавить проверку формы. Потом, настроить сортировку БД, редактирование и рассылку писем smile Если что, отпишусь в этой теме smile
Еще раз все огромное спасибо smile

22

Re: Help

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

<head>
    <title>Форма Докладчика</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script>
// Проверка введенного и [включение] кнопки submit
function checkreq() {
    var bDisabled = false;
    var aArray = ['Name', 'Surname', 'Patronymic', 'SSurname', 'SName', 'SPatronymic'];
    var i;
    for (i = 0; i < aArray.length; i++) {
        if (document.getElementById(aArray[i]).value.length < 2) {
            bDisabled = true;
            break;
        }
    }
    document.getElementById('submit').disabled = bDisabled;
}
</script>

</head>

<body>

<form method="POST" action="loan.php" name="reporter">

Фамилия:
<input id="Surname" name="Surname" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()">
<br>
Имя:
<input id="Name" name="Name" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()">
<br>
Отчество:
<input id="Patronymic" 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 id="SSurname" name="SSurname" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()">
<br>
Имя научного руководителя:
<input id="SName" name="SName" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()">
<br>
Отчество научного руководителя:
<input id="SPatronymic" name="SPatronymic" type="text" onkeypress="checkreq()" onkeyup="checkreq()" onblur="checkreq()">
<br>
<input type="submit" value="Отправить" disabled="disabled" id="submit">
<input type="reset" value="Очистить">
</form>



</body>
</html>

Пока отвечал, пропало предыдущее сообщение.  smile

23 (изменено: Ketsyki, 2010-11-04 18:09:50)

Re: Help

Я думал, что никто прочитать не успел smile Просто предыдущую проблему я решил вот так:

<script>

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;
}

p_Name=document.reporter.Name.value.toString();
if (p_Name!='')
{ if (p_Name.length<3 || p_Name.length>40)
  { alert ('Укажите ваше имя (3-40 символов)!');
    document.reporter.Name.focus();
return false;
  }
}
else
{ alert('Необходимо ввести имя!');
  document.reporter.Name.focus();
return false;
}

p_Patronymic=document.reporter.Patronymic.value.toString();
if (p_Patronymic!='')
{ if (p_Patronymic.length<3 || p_Patronymic.length>40)
  { alert ('Укажите ваше отчество (3-40 символов)!');
    document.reporter.Patronymic.focus();
return false;
  }
}
else
{ alert('Необходимо ввести отчество!');
  document.reporter.Patronymic.focus();
return false;
 
}

p_Email=document.reporter.Email.value.toString();
if (p_Email!='')
{ t=p_Email.indexOf('@');
  if ((p_Email.indexOf('.')==-1) || (t==-1) || (t < 1) ||
    (t > p_Email.length - 5) || (p_email.charAt(t - 1)=='.') || (p_Email.charAt(t + 1)=='.'))
  { alert('Некорректно указан E-mail!');
    document.reporter.Email.focus();
    return false;
  }
}
else
{ alert('Необходимо ввести E-mail!');
  document.reporter.Email.focus();
return false;
 
}
...

Так что отключение кнопки не нужно smile

P.S. А как сделать, чтобы в формах можно было писать только на русском языке, а в форме Email только на английском?
В php я могу так сделать, а вот в html уже проблемка...

24

Re: Help

Используйте регулярные выражения.

var r_rus = /^[а-я0-9]+$/i; // Для русского языка и цифр.
var r_eng = /^[a-z0-9]+$/i; // Для английского языка и цифр.

if (!r_rus.test(p_Surname))
  { alert ('Только русский язык!');
    document.getElementById('Surname').focus();
    return false;
  }

Советую поставить идентификаторы, например, id="Name" и писать так:

var p_Name=document.getElementById('Name').value.toString();

Так будет работать во всех браузерах.

25

Re: Help

Я не пойму, зачем вообще эти идентификаторы? Вроде бы и так все работает.

И эта... почему в html циклы if такие странные? В C++ они как то... более нормальные, что ли:) Вобщем, как правильно вставить проверку языка? А то у меня получается так, что если вводишь имя на английском, то выдается сообщение о том, что надо юзать русский язык, но при этом данные отправляются на сервер.