|
|
|
| Здравствуйте … проблемака есть.
Запись массива в базу MySQL… точнее не запись а обновление одного поля в массиве…
Примерная база:
stid // ID номер auto_increment
st_sname// Фамилия
st_name// Имя
st_oname// Отчество
numbZK// номер зачетной книжки
st_ocenka // оценка
формирую массив этой базы с параметром (WHERE st_group LIKE '$g_group%'" где $g_group есть выбор пользователя. Выглядит это так:
PHP:
$query = "SELECT * FROM db_st WHERE st_group LIKE '$g_group%'";
$result = mysql_query($query, $link);
while ($dan = mysql_fetch_array($result)){
?>
<table cellspacing=0 cellpadding=1 class=table1 width=600>
<tr>
<td>|</td>
<td><? echo $dan['stid'];?></td>
<td>|</td>
<td><? echo $dan['st_sname'];?></td>
<td>|</td>
<td><? echo $dan['st_name'];?></td>
<td>|</td>
<td><? echo $dan['st_oname'];?></td>
<td>|</td>
<td<? echo $dan['st_group'];?></td>
<td>|</td>
<td><input type="st_ocenka" name="st_ocenka" value="<?= $dan['st_ocenka'];?>" >
}
получается что формируется массив из базы db_st отсортированный по полю st_group
вопрос могу ли я обновлять элементы в полученном массиве с последующей перезаписью в базу???
конкретно меня интересует поле оценка....
для каждого студента должна быть своя оценка, у меня же получается что нижняя позиция перезаписывает верхнее …
PHP:
<?
if($_POST["reg"]){
$query="UPDATE db_st SET st_ocenka ='$st_ocenka' WHERE st_group LIKE '".$_POST['g_group']."%'";
$result=mysql_query($query, $link) or die("Error: ".mysql_error());
header("Location: members.php?".session_name()."=".session_id());
}
?>
<input type="submit" name="reg" value="ок">
как мне записать в запись со студентом (A) в поле с оценкой значение (X), а в запись с студентом (B) в поле с оценкой записать значение (Y)… у меня же получается что все поля с оценкой в выбранной категории будут равны (A=Y) и (B=Y)…
я так понимаю что поле точнее переменная $st_ocenka у меня не на каждую запись массива а одна на всех и что бы я не делал так оно и остается…
что сделать что бы присвоить уникальное значение для каждой записи поле “st_ocenka ” … мож кто надоумит…
если это не возможно тогда как мне полученный массив записать в файл *.html с именем группы и датой создания…
я понял что возможный вариант это
mysql_fetch_array
http://www.tspu.tula.ru/ivt/old_site/umr/trpo/docs/php4_ru/mysql-fetch-array.html
в этой теме описано следующее
Если два или более столбцов результата имеют одинаковые имена полей, последний столбец имеет приоритет. Для доступа к другим столбцам с тем же именем вы обязаны использовать числовой индекс столбца или создать для столбца псевдоним. Для столбцов с псевдонимами вы не можете получить доступ к их содержимому через оригинальное имя столбца (в нашем примере, используя 'field').
но как это применить на моем примере
заранее спасибо.... | |
|
|
|
|
|
|
|
для: Nite
(29.05.2007 в 08:59)
| | Хм... погодите, вы хотите изменить оценку одного из студентов? Тогда вам следует воспользоваться критерием по уникальному полю stid
<?php
$query="UPDATE db_st SET st_ocenka ='$st_ocenka'
WHERE stid = $_POST[stid] AND st_group LIKE '$_POST[g_group]%'";
?>
|
Или у вас имеется массив оценок? Если да, то через какой параметр он передаётся? Здесь вероятно придётся в цикле обходить массив и выполнять запрос UPDATE для каждого из студентов. | |
|
|
|
|
|
|
|
для: cheops
(29.05.2007 в 09:09)
| |
$query = "SELECT * FROM db_st WHERE st_group LIKE '$g_group%'";
$result = mysql_query($query, $link);
while ($dan = mysql_fetch_array($result)){
?>
<table cellspacing=0 cellpadding=1 class=table1 width=600>
<tr>
<td>|</td>
<td><? echo $dan['stid'];?></td>
<td>|</td>
<td><? echo $dan['st_sname'];?></td>
<td>|</td>
<td><? echo $dan['st_name'];?></td>
<td>|</td>
<td><? echo $dan['st_oname'];?></td>
<td>|</td>
<td<? echo $dan['st_group'];?></td>
<td>|</td>
<td><input type="st_ocenka" name="st_ocenka" value="" >
<?
}
?>
|
данный массив служит для наглядности тобишь отсортированный по группе $g_group которая задается в поиске.... единственная строка активная это st_ocenka она должна быть уникальная для каждой записи визуально это выглядет так:
Ввожу:
Иванов Иван Иванович <поле оценки для Иванов Иван Иванович> (пример = 4)
Васильев Василий Васильевич <поле оценки для Васильев Василий Васильевич > (пример = 5)
Максимов Максим Максимович <поле оценки для Максимов Максим Максимович> (пример = 2)
но в базу записывается только последнее из значений
Иванов Иван Иванович (пример =2)
Васильев Василий Васильевич (пример = 2)
Максимов Максим Максимович (пример = 2) | |
|
|
|
|
|
|
|
для: Nite
(29.05.2007 в 09:18)
| | в общем то программа выглядет так....
<form action="<?= $_SERVER['PHP_SELF'];?>" method=POST>
<tr><td>номер группы:</td><td><select type="g_group" name="g_group" value="" >
<?php
/**
здесь я делаю запрос к базе данных db_gro в которой заранее установлена
значение полей g_group, это сделано что бы, пользователь не имел возможности
вводить в поле для поиска всякую ерунду, запрос выводится массивом столбца g_group
**/
$select=mysql_query("SELECT g_group FROM db_gro");
while($select_array=mysql_fetch_array($select)){
print "<option selected>".$select_array["g_group"]."</option>";
}
?>
</select></td></tr>
<input type=submit value="ок">
<?
/**
этот запрос выводит массив данных из базы db_st, по заданым полям,
уловия вывода данных st_group LIKE '$g_group%'" получает из выбора пользователя
**/
if (isset($_POST ["g_group"])) $g_group = $_POST ["g_group"];
$query = "SELECT * FROM db_st WHERE st_group LIKE '$g_group%'";
$result = mysql_query($query, $link);
while ($dan = mysql_fetch_array($result)){
// вывод массива
// в данном массиве есть одно поле для того что бы я мог проставить оценки (ocenka)
// она не какого отношение к БД db_st не имеет и получить я ее хочу именнно в этой форме
// другими словами для каждого выведеннго поля с анкетными данными студента есть поле Input для ввода оценки.
?>
<table cellspacing=0 cellpadding=1 class=table1 width=600>
<tr>
<td><? echo $dan['stid'];?></td>
<td><?echo $dan['st_sname'];?></td>
<td><? echo $dan['st_name'];?></td>
<td><? echo $dan['st_oname'];?></td>
<td><input select type="ocenka" name="ocenka" value="" ></td>
</table>
<?
}
if($_POST["reg"]){ /**
этой процедурой я хочу обьяснить кнопку <input type="submit" name="reg" value="ок">
что я хочу переписать все поля полученные мною в результате запроса $select=mysql_query("SELECT g_group FROM db_gro");
перенеслись в базу данных db_ved и при нажатии на кнопочку с банальным названием "ок" все данные
перезаписываются из одно таблици в другую, в качестве поля с оценкой я использую
перемннню '$ocenka'.
**/
$query="INSERT INTO db_ved (v_name, v_sname, v_oname, numbZK, v_gruop, ocenka)
SELECT st_name, st_sname, st_oname, st_number, st_group, '$ocenka' FROM db_st WHERE st_group LIKE '$g_group%'";
$result=mysql_query($query, $link) or die("Died inserting login info into db. Error returned if any: ".mysql_error());
}
?>
<input type="submit" name="reg" value="ок">
</form>
</table>
|
Проблема
При записи в базу данных db_ved я пытаюсь пропихнуть переменную '$ocenka' которая должна на мой взгляд проставлять для каждого поля массива , например.
Ввожу:
Иванов Иван Иванович 5
Васильев Василий Васильевич 3
Максимов Максим Максимович 1
Получаю:
Иванов Иван Иванович 1
Васильев Василий Васильевич 1
Максимов Максим Максимович 1
Обыдно!!!
Что добавить запрос что бы в таблицу записывалась не одна последняя оценка а все в соответствии с полем. | |
|
|
|
|
|
|
|
для: Nite
(29.05.2007 в 10:30)
| | огромное спасибо.... я нашел подобную тему на данном форуме и она помогла мне ...
хороший форум
еще раз спасибо | |
|
|
|