1 (изменено: Cular, 2011-03-01 23:26:01)

Тема: Создание списка и запись его в базу

index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>

<body>
<div>
<?php
    echo '<form method="post" name="formm" action="createlist.php">';
    echo '<label>Введіть номер групи: </label>';
    echo '<input name="group_number" type="text"></input>';
    echo '<br>';
    echo '<label>Введіть кількість студентів: </label>';
    echo '<input name="students_number" type="text"></input>';
    echo '<br>';
    echo '<input name="submit" type="submit" value="Створити список групи"></input>';
    echo '</form>';
?>
</div>
</body>

</html>

Получаем значения, которые указал пользователь и обрабатываем их в createlist.php:

<?php
    $group_number = $_POST['group_number'];
    $students_number = $_POST['students_number'];
    echo '<form method="post" name="form" action="writelist.php?group_number = '.$group_number.'&students_number = '.$students_number.'">';
    for ($i = 1; $i <= $students_number; $i++)
    {
        echo '<input type="text" disabled="disabled" value="'.$i.'" style="width:20px;"></input>';
        echo '<input name="FST_name'.$i.'" type="text"></input>';
        echo '<br>';
    }
    echo '<input name="submit" type="submit" value="Створити групу"></input>';
    echo '</form>';
?>

Создав необходимое количество ячеек, нужно передать все данные (которые в ячейках и данные с index.php) в базу.
Я решил для начала передать все данные на новую страницу(writelist.php) и в ней уже делать запись в базу данных:

<?php
    $group_number = $_GET['group_number'];
    $students_number = $_GET['students_number'];
    include ("db_connect.php");
    $group_write = mysql_query ("ALTER TABLE  `all groups` ADD  `".$group_number."` TEXT CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci NULL DEFAULT NULL", $db);
    for ($i = 1; $i <= $students_number; $i++)
    {
        $students = $_POST['FST_name'.$i.''];
        $writing = mysql_query ("INSERT INTO `all groups` (`'".$group_number."'`) VALUES ('".$students."')", $db);
    }
    mysql_close ($db);
    header('location: http://localhost/www/creategroup/goodcreate.php');
?>

Это все, что смог, но не работает, не создается новое поле в таблице.

2

Re: Создание списка и запись его в базу

Сперва уберите лишние пробелы между параметром и значением в createlist.php.

echo '<form method="post" name="form" action="writelist.php?group_number='.$group_number.'&students_number='.$students_number.'">';

3

Re: Создание списка и запись его в базу

Сделано

4

Re: Создание списка и запись его в базу

Cular сказал:

Сделано

Если все еще не работает, то либо покажите выводимую ошибку, либо разберитесь на каком этапе происходит сбой.

Проверьте передачу переменных простым прерыванием скрипта.

exit($_GET['group_number']);

5 (изменено: Cular, 2011-03-03 10:54:27)

Re: Создание списка и запись его в базу

Были мелкие проблемы - устранил и теперь все значения переменных передаются, как нужно (даже текст из списка)....
Но не работает запрос, кажется проблема в том, что неправильно вставляю в запрос переменные, но как правильно не знаю....
Чуток изменил код:
createlist.php:

<?php
    $group_number = $_POST['group_number'];
    $students_number = $_POST['students_number'];
    $numberstd = $students_number;
    echo '<form method="post" name="form" action="writelist.php?groupstd='.$group_number.'&students='.$numberstd.'">';
    for ($i = 1; $i <= $students_number; $i++)
    {
        echo '<input type="text" disabled="disabled" value="'.$i.'" style="width:20px;"></input>';
        echo '<input name="FST_name'.$i.'" type="text"></input>';
        echo '<br>';
    }
    echo '<input name="submit" type="submit" value="Створити групу"></input>';
    echo '</form>';
?>

writelist.php:

<?php
    $groupstd = $_GET['groupstd'];
    $students= $_GET['students'];
    include ("db_connect.php");
    $group_write = mysql_query ("ALTER TABLE  `all groups` ADD  ".$groupstd." TEXT CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci NULL DEFAULT NULL", $db);
    for ($i = 1; $i <= $students; $i++)
    {
        $allstudents = $_POST['FST_name'.$i.''];
        $writing = mysql_query ("INSERT INTO `all groups` (`'".$groupstd."'`) VALUES ('".$allstudents."')", $db);
    }
    mysql_close ($db);
    header('location: http://localhost/www/creategroup/goodcreate.php');
?>

6

Re: Создание списка и запись его в базу

Добавить косые кавычки.
$group_write = mysql_query ("ALTER TABLE  `all groups` ADD  `".$groupstd."` TEXT CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci NULL DEFAULT NULL", $db);

Убрать лишние одинарные кавычки.

$writing = mysql_query ("INSERT INTO `all groups` (`".$groupstd."`) VALUES ('".$allstudents."')", $db);

7 (изменено: Cular, 2011-03-03 19:08:25)

Re: Создание списка и запись его в базу

Запрос по созданию нового поля работает, но ещё нашел интересный момент, если просмотреть теперь(раньше такого не было), что передается с страницы createlist.php в writelist.php (данные списка), то наблюдаю такие, прикольные, символы: ���
Я так понимаю, что это проблемы с кодировкой, но почему именно там??? Я передаю текст из обычных <input></input> в переменные и записываю в б.д., но получаю знаки вопросов и в базе их нету...

8

Re: Создание списка и запись его в базу

Cular сказал:

символы: ���

Это какой input? Там кириллица?

9 (изменено: Cular, 2011-03-04 16:33:46)

Re: Создание списка и запись его в базу

почти разобрался со всем, лишь появилось пару проблем)))
теперь вводимые значения передаются и записываются в базу, как нужно, но почему-то на странице createlist.php текст на кнопочке выводится в виде ���...  big_smile
можно ли сделать как-то запись данных в поле независимое от других полей
бд:

-- phpMyAdmin SQL Dump
-- version 2.11.11
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Час створення: Бер 04 2011 р., 15:29
-- Версія сервера: 5.1.50
-- Версія PHP: 5.2.14

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- БД: `peknau`
--

-- --------------------------------------------------------

--
-- Структура таблиці `all groups`
--

CREATE TABLE `all groups` (
  `368` text COLLATE cp1251_ukrainian_ci,
  `222` text COLLATE cp1251_ukrainian_ci,
  `234` text COLLATE cp1251_ukrainian_ci NOT NULL,
  `678` text COLLATE cp1251_ukrainian_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_ukrainian_ci;

--
-- Дамп даних таблиці `all groups`
--

INSERT INTO `all groups` (`368`, `222`, `234`, `678`) VALUES
(NULL, NULL, '', ''),
(NULL, NULL, '', ''),
(NULL, NULL, '', ''),
(NULL, NULL, '', ''),
(NULL, NULL, '', ''),
(NULL, NULL, '', ''),
(NULL, NULL, 'Чернов Юрий ', ''),
(NULL, NULL, 'Чернова Светлана ', ''),
(NULL, NULL, 'Кузьменко Ярослав ', ''),
(NULL, NULL, 'Бондарь Олександр', ''),
(NULL, NULL, 'Нагребецький Сергій', ''),
(NULL, NULL, 'Андрєєв Денис', '');

нужно чтобы все записывалось сначала...

10 (изменено: DmitryV, 2011-03-04 18:59:03)

Re: Создание списка и запись его в базу

а чем вас собственно кодировка cp1251_general_ci не устраивает? Замените сравнения.
и в мета тегах на странице тоже не забываем указывать кодировку:

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />

11

Re: Создание списка и запись его в базу

Cular сказал:

можно ли сделать как-то запись данных в поле независимое от других полей

Не смог понять задачи. Можете подробнее развернуть?

12

Re: Создание списка и запись его в базу

Запись происходит так при таком запросе:

INSERT INTO `peknau`.`all groups` (`123`, `333`) VALUES ('', 'какой-то текст');

http://uaimage.com/image/efec2012
При этом в запросе нужно не забывать про предыдущее поле 123, в которое нужно записать пустое значение.
А мне нужно, чтобы все поля заполнялись независимо друг от друга, то есть выглядело это так:
http://uaimage.com/image/ea4e99cf
При этом запрос выглядел вот так:

INSERT INTO `peknau`.`all groups` (`333`) VALUES ('текст');

В таком виде, он не работает, если есть предшествующие поля...  sad
Что делать?

13 (изменено: Cular, 2011-03-05 10:09:35)

Re: Создание списка и запись его в базу

DmitryV сказал:

а чем вас собственно кодировка cp1251_general_ci не устраивает? Замените сравнения.

Я не силен в sql-кодировках, но мне сказал знакомый, что для украинского шрифта лучше всего использовать именно эту кодировку...

DmitryV сказал:

и в мета тегах на странице тоже не забываем указывать кодировку:

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />

Как-то упустил этот момент, делаю алгоритм работы списка на простых, созданных в блокноте php-файликах и забыл вообще все указать для страницы!)

14

Re: Создание списка и запись его в базу

Посмотрел на картинки и стало ясно, что вы просто неверно составили структуру таблицы `all groups`. Вам надо связать две таблицы, таблицу пользователей и таблицу группы.

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

Таблица группы должна быть из поля идентификатора группы и поля названия группы или любых других полей относящихся к характеристике группы.

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

Подумайте как это реализовать, сейчас запрос на изменение структуры таблицы `all groups` и добавления поля, является ошибочным и в дальнейшем может осложнить выборку данных:
$group_write = mysql_query ("ALTER TABLE  `all groups` ADD  ".$groupstd." TEXT CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci NULL DEFAULT NULL", $db);

15

Re: Создание списка и запись его в базу

Cular сказал:

Как-то упустил этот момент, делаю алгоритм работы списка на простых, созданных в блокноте php-файликах и забыл вообще все указать для страницы!

Никогда не пишите код в Блокноте. Поставьте нормальный текстовый редактор с подсветкой синтаксиса, рекомендую Notepad++.

Для украинского языка в БД вы указали верное сравнение cp1251_ukrainian_ci. Обязательно пропишите в метатегах всех html файлов строку, которую указал Дмитрий.

<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />

16

Re: Создание списка и запись его в базу

Последовал вашему совету)
Но возникла другая проблема, есть допустим куча таблиц, половина с именем из чисел (например 332), а другая половина с именем из букв (например journal).
Вопрос: можно ли выбрать все таблицы в базе и отсортировать их по типу имени?
Нужно просто выводить выпадающий список с номерами групп.

17

Re: Создание списка и запись его в базу

Cular сказал:

можно ли выбрать все таблицы в базе и отсортировать их по типу имени?

Как я понял, речь не о таблицах, а о полях.

Выбрать поля можно с помощью регулярного выражения (замените table_name на имя таблицы):

SHOW COLUMNS FROM `table_name` WHERE `Field` REGEXP "^[[:digit:]]+$";

Отсортировать лучше с помощью функции PHP sort(), для чего сперва имена полей следует выбрать в виде массива.

18 (изменено: Cular, 2011-03-12 19:48:25)

Re: Создание списка и запись его в базу

Все поменял)))
Теперь столкнулся с таким моментом... Не выводится первый элемент с таблицы.
вот список в базе: http://uaimage.com/image/00db22a4
вот пытаюсь его вывести: http://uaimage.com/image/31dad6b1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<style>
input
{
    text-align:center;
    font-size:12px;        
}
</style>

<?php
    $studentslist = $_POST['studentslist'];
    $science = $_POST['science'];
    $nm = $_POST['nm'];
    include ("codes/db_connect.php");
    $result = mysql_query ("INSERT INTO journal (j_title, number_group, crating) VALUES ('$science', '$studentslist', '$nm')", $db);
    $idgroup = mysql_query ("SELECT id, `count std` FROM `all groups` WHERE number_group = '".$studentslist."'",$db);
    $idresult = mysql_fetch_array ($idgroup);
    $students = mysql_query ("SELECT FST FROM `all students` WHERE group_id = '".$idresult['id']."'",$db);
    $studentsresult = mysql_fetch_array ($students);
    echo "<form action='journalf.php' method='post'>";
    echo "<table cellpadding='0' cellspacing='0'>";
    for($i = 0; $i <= $idresult['count std']; $i++)
    {
        echo "<tr>";
        for ($j = 0; $j <= $nm; $j++)
        {
            if ($j == $nm)
            {
                echo "<td id='ch'>";
            }
            else echo "<td>";
            if ($i == 0 && $j == 0)
            {
                echo "<input name='".$i."".$j."' type='text' disabled='disabled' value='".'№'."' style='width:20px; margin:5px 5px 5px 0; text-align:center' />";    
            }
            else
            if ($i == 0 && $j == 1)
            {
                echo "<input name='".$i."".$j."' type='text' disabled='disabled' value='".'ПІпБ'."' style='width:200px; margin:5px 5px 5px 0; text-align:center' />";    
            }
            else
            if ($j == 0)
            {
                echo "<input name='".$i."".$j."' type='text' disabled='disabled' value='".$i."' style='width:20px; margin:5px 5px 5px 0; text-align:center' />";
            }
            else
            if ($j == 1)
            {
                 while ($studentsresult = mysql_fetch_array ($students))
                 {
                     $std = $studentsresult['FST'];
                     break;
                 }
                 echo "<input name='".$i."".$j."' type='text' disabled='disabled' value='".$std."' maxlength='60' style='width:200px; margin:5px 5px 5px 0' />";
                                 
                //echo "<input name='".$i."".$j."' type='text' disabled='disabled' value='".$c."' maxlength='60' style='width:200px; margin:5px 5px 5px 0' />";
            }
            else echo "<input name='".$i."".$j."' type='text'  maxlength='4' style='width:35px; margin:5px 5px 5px 0' />";
            echo "</td>";
        }    
        echo "</tr>";
    }
    echo "</table>";
    echo "<input name='ok' type='submit' />";
    echo "</form>";    /**/
        
    mysql_close ();    
?>

</body>
</html>

Возможно нужно использовать foreach, но пока не могу с генерировать код... Все попытки неудачны!

19

Re: Создание списка и запись его в базу

Уберите из цикла for цикл while. Это не имеет смысла.

                 while ($studentsresult = mysql_fetch_array ($students))
                 {
                     $std = $studentsresult['FST'];
                     break;
                 }

20

Re: Создание списка и запись его в базу

А как же перебрать все значения массива $studentsresult?

21

Re: Создание списка и запись его в базу

Перебрать можно, но не таким способом. Эта строка вне цикла for и выполняется только один раз для одного значения $idresult['id'].

$students = mysql_query ("SELECT FST FROM `all students` WHERE group_id = '".$idresult['id']."'",$db);