Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: работа с массивом

Сообщения:  [1-5] 

 
 автор: Nite   (29.05.2007 в 11:50)   письмо автору
 
   для: Nite   (29.05.2007 в 10:30)
 

огромное спасибо.... я нашел подобную тему на данном форуме и она помогла мне ...
хороший форум
еще раз спасибо

   
 
 автор: Nite   (29.05.2007 в 10:30)   письмо автору
 
   для: 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 в 09:18)   письмо автору
 
   для: 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)

   
 
 автор: cheops   (29.05.2007 в 09:09)   письмо автору
 
   для: 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 для каждого из студентов.

   
 
 автор: Nite   (29.05.2007 в 08:59)   письмо автору
 
 

Здравствуйте … проблемака есть.

Запись массива в базу 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').

но как это применить на моем примере

заранее спасибо....

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования