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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: обработка checkbox
 
 автор: V@ldem@r   (20.07.2010 в 20:16)   письмо автору
 
 

Здравствуйте!
Делаю выборку из базы и в цикле вывожу checkbox-ы
Мой код:

<form name="forma" action="formselect.php" method="post">
<?php
include("config.php");
$select=mysql_query("select * from Courses limit 3");
$mass=mysql_fetch_array($select);

  do
      {
         
$title=$mass['Title'];
     
$CID=$mass['CID'];
         echo 
"<label>$title</label>";
     echo 
"<input name='$CID' type='checkbox' value='$CID' /><br>";
      }
  while(
$mass=mysql_fetch_array($select));
?>
<input name="sub" type="submit" value="Добавить курс" />
</form>

Как мне в обработчике определить значения, которые я передаю?
Если бы я в ручную формировал чек боксы,
то я заранее знал бы какие названия полей передаю
и проблем не было.
А в цикле значения чек боксов динамические и как значения отследить?
Тут я в замешательстве.

  Ответить  
 
 автор: Valick   (20.07.2010 в 20:33)   письмо автору
 
   для: V@ldem@r   (20.07.2010 в 20:16)
 

Тут я в замешательстве
Ничего удивительного, Вы же содрали у Е. Попова, а нужно было учиться у И. Симдянова
Отучайтесь использовать do while
 <form name="forma" action="formselect.php" method="post">
<?php 
include("config.php"); 
$select=mysql_query("select * from Courses limit 3"); 
  while(
$mass=mysql_fetch_array($select)){ 
     echo 
"<label>$mass['Title']</label>"
     echo 
"<input name='check[$mass['CID']]' type='checkbox' value='$CID' /><br>"
   } 
?> 
<input name="sub" type="submit" value="Добавить курс" /> 
</form> 

а в обработчике лопатишь массив check[ ]

  Ответить  
 
 автор: sim5   (20.07.2010 в 20:49)   письмо автору
 
   для: Valick   (20.07.2010 в 20:33)
 

Зачем value='$CID' ?

  Ответить  
 
 автор: V@ldem@r   (20.07.2010 в 21:01)   письмо автору
 
   для: sim5   (20.07.2010 в 20:49)
 

а как же я еще передам значение?

  Ответить  
 
 автор: sim5   (20.07.2010 в 21:05)   письмо автору
 
   для: V@ldem@r   (20.07.2010 в 21:01)
 

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

  Ответить  
 
 автор: V@ldem@r   (20.07.2010 в 21:10)   письмо автору
 
   для: sim5   (20.07.2010 в 21:05)
 

вы правы. А с массивом check, вы не подскажите как работать?

  Ответить  
 
 автор: sim5   (20.07.2010 в 21:31)   письмо автору
 
   для: V@ldem@r   (20.07.2010 в 21:10)
 

Что значит работать?

  Ответить  
 
 автор: V@ldem@r   (20.07.2010 в 21:33)   письмо автору
 
   для: sim5   (20.07.2010 в 21:31)
 

чтобы обработчик узнал, какие именно данные ему были переданы из чек боксов.

  Ответить  
 
 автор: sim5   (20.07.2010 в 21:36)   письмо автору
 
   для: V@ldem@r   (20.07.2010 в 21:33)
 

Что значит данные? Я не вижу, чтобы вы в чекбокс вставляли данные, вы вставляете туда некие ID. Вам уже написали как вывести в форму массив чекбоксов:
<input name='check[]' type='checkbox' value=$mass['CID'] />
На сервере вы получите массив $_POST['check'] (или $_GET, если этим методом передаваться форма будет), только те, которые выбрал пользователь, а значения выбранных будут равны ID, которые вы им прописали.

  Ответить  
 
 автор: V@ldem@r   (20.07.2010 в 21:47)   письмо автору
 
   для: sim5   (20.07.2010 в 21:36)
 

спасибо. Буду пробывать.

  Ответить  
 
 автор: V@ldem@r   (20.07.2010 в 20:55)   письмо автору
 
   для: Valick   (20.07.2010 в 20:33)
 

Извините, ничего я не сдирал у Е. Попова, а цикл этот во всех книгах описывается.
С массивом check я ни разу не работал.
Кстати, ваш код не работает.
Не могли бы вы тога подробнее описать, как пролапатить массив check?

  Ответить  
 
 автор: Valick   (20.07.2010 в 22:38)   письмо автору
 
   для: V@ldem@r   (20.07.2010 в 20:55)
 

Не буду просить Вас перечислять все книги, но назовите хотя бы одну где для обработки результата выборки из БД используется цикл do while
Кстати не работает Ваш код а не мой :)
Для перелопачивания любого массива разработчики РНР внедрили цикл foreach
примерно вот так нужно от него плясать
foreach ($_POST[check] as $key=>$value){
echo $key." = ".$value;
}

___
С массивом check я ни разу не работал.
это не какой-то зарезервированный массив, на его месте мог бы быть массив beck, shmeck, xpenonek и тд, на сколько хватит фантазии.

  Ответить  
 
 автор: tonechka   (21.07.2010 в 12:10)   письмо автору
 
   для: Valick   (20.07.2010 в 20:33)
 

У меня похожая проблема. Я вставила ваш код, но он выдает ошибку. на двух строках вывода:
echo "<label>$mass['Title']</label>"; 
     echo "<input name='check[$mass['CID']]' type='checkbox' value='$CID' /><br>";


и такая ошибка у меня уже не первый раз, к примеру в запрос я не могу сразу написать $mass['Title']. Начинает работать только если сделать так:
$y= $mass['Title'].


А ошибка такая:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\diplom\www\indexmod.php on line 17

Скажите пожалуйста в чем причина?

  Ответить  
 
 автор: Valick   (21.07.2010 в 12:35)   письмо автору
 
   для: tonechka   (21.07.2010 в 12:10)
 

ну я немного забыл про value='$CID'... там тоже нужно value='$mass['CID']'
проблемы у Вас не закончаться пока не будете бездумно вставлять мой (либо чей-то еще) код.
у автора я не вижу в запросе названия полей, поэтому не могу написать корректно, мой код лишь показывает как избавиться от do while
дайте строку вашего запроса

echo "<label>".$mass[title]."</label>";  
echo "<input name='check[".$mass[cid]."]' type='checkbox' value='".$mass[cid]."' /><br>"; 

так работает?

  Ответить  
 
 автор: tonechka   (21.07.2010 в 13:30)   письмо автору
 
   для: Valick   (21.07.2010 в 12:35)
 

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

ну к примеру вот упрощенный вариант запроса:
$idi=$mass['id'];


$forum=mysql_query("insert into forum (id, type, name, intro, forcesubscribe) values ($idi, 'news', 'Новостной форум', 'Главные новости и объявления', 1)");


если я пытаюсь сразу в поле id в таблицу вставить $mass['id'], то ошибка появляется, а если я сначала сохраню значение из массива в переменную, в данном случае $idi, то все нормально работает. почему так получается? и еще вопросик, почему плохо использовать do while?

  Ответить  
 
 автор: Valick   (21.07.2010 в 13:50)   письмо автору
 
   для: tonechka   (21.07.2010 в 13:30)
 

Поймите мне не трудно ответить, но для того чтобы грамотно задать вопрос нужен хоть какой-то начальный уровень знаний. Зомбикодеры, так лично я называю последователей секты Е. Попова, на базе видеокурса которого кроме франкенсайта (производная от франкенштейна) ничего нормального не получится.
Про do while много раз говорили на этом форуме. В любой книге написано, что этот цикл в отличии от while выполниться хотя бы раз, а если запрос не вернет вам ни одной строки, то вы получите ошибку при выводе несуществующих переменных. Этот цикл нужно использовать там где решение о продолжении цикла можно принять не ранее одной итерации т.е. в самом теле цикла.
Для того что бы решать проблемы с неправильным синтаксисом запроса, нужно сам запрос сохранять в переменной, тогда его можно вывести при отладке на экран.
$query="insert into forum (id, type, name, intro, forcesubscribe) values ($idi, 'news', 'Новостной форум', 'Главные новости и объявления', 1)";
echo $query;
$forum=mysql_query($query);

  Ответить  
 
 автор: tonechka   (21.07.2010 в 13:39)   письмо автору
 
   для: Valick   (21.07.2010 в 12:35)
 

echo "<label>".$mass[title]."</label>";  
echo "<input name='check[".$mass[cid]."]' type='checkbox' value='".$mass[cid]."' /><br>";


Вот так заработало. Спасибо огромное! а можно для особо одаренных, то есть для меня)))) в чем была проблема??? почему надо писать ". ." ????

  Ответить  
 
 автор: Valick   (21.07.2010 в 13:57)   письмо автору
 
   для: tonechka   (21.07.2010 в 13:39)
 

проблема? поверьте это не проблема это всего лишь синтаксис. для этого нужно, как я уже говорил учить азы. например чем отличаются двойные кавычки от одинарных и где нужно их использовать а где нет.
input name='check[$mass['CID']]' type='checkbox' value='$CID'

тут происходит путаница с одинарными кавычками

то как я написал с ".." улучшает наглядность при подсветке кода редактором (см. ниже у sim5)
____
проблему Вы получите чуть позже, не знаю как у Вас устроен код, но отказ от автоинкремента при формировании id требует повышенного внимания.

  Ответить  
 
 автор: sim5   (21.07.2010 в 14:01)   письмо автору
 
   для: tonechka   (21.07.2010 в 13:39)
 

<?
echo "<label>".$mass['title']."</label>";   
echo 
"<input name='check[".$mass['cid']."]' type='checkbox' value='".$mass['cid']."' /><br>";

Если начинаете, то запомните золотое правило - строковые значения в кавычки.
И о пять - зачем для имени и значения чекбокса одно и тоже значение, ID?

  Ответить  
 
 автор: Valick   (21.07.2010 в 14:04)   письмо автору
 
   для: sim5   (21.07.2010 в 14:01)
 

И о пять - зачем для имени и значения чекбокса одно и тоже значение, ID?
да не в этом суть :)

  Ответить  
 
 автор: sim5   (21.07.2010 в 14:12)   письмо автору
 
   для: Valick   (21.07.2010 в 14:04)
 

Если в два атрибута чебокса/радиокнопки вставляется одно и тоже значение, пусть ID, то это говорит только о том, что программист сам не знает для чего это он делает, если конечно, это не "авось" - "может там возьму, а вдруг по другому получится..."

  Ответить  
 
 автор: V@ldem@r   (21.07.2010 в 15:06)   письмо автору
 
   для: sim5   (21.07.2010 в 14:12)
 

Всем спасибо за ответы. Только проблема у меня не в отображении самих чекбоксов в цикле. А в обработке значений, которые выбрал пользователь.
Примерно вот так:
1)Пользователь отмечает несколько чекбоксов;

2)Значения чекбоксов посылаются в файл обработчик;ж

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

А насчет value не обращайте внимание. Суть не в этом была.

  Ответить  
 
 автор: Valick   (21.07.2010 в 15:25)   письмо автору
 
   для: V@ldem@r   (21.07.2010 в 15:06)
 

покажите код обработчика

  Ответить  
 
 автор: sim5   (21.07.2010 в 15:38)   письмо автору
 
   для: V@ldem@r   (21.07.2010 в 15:06)
 

Вот-вот:
>1)Пользователь отмечает несколько чекбоксов;
>2)Значения чекбоксов посылаются в файл обработчик;
>3)А вот в файле обработчике мне нужно узнать, вернее не мне, а обработчику, какие значения были переданы.

>А насчет value не обращайте внимание. Суть не в этом была.


Логика просто убийственная! Ибо "проблема у меня не в отображении самих чекбоксов в цикле. А в обработке значений, которые выбрал пользователь."

Вы должны знать, что такие элементы формы как чекбокс и радиокнопка, на сервер будут переданы только те, которые выбирает пользователь, невыбранные такие элементы сервером не будут получены. Не передаются на сервер и те элементы формы, которые не имеют имени (не указан атрибут name/id). Элемент SELECT формы будет передавать то значение опшена, которое выбрал пользователь.

Если вы помещаете в форму чекбокс/чекбоксы, то вы должны четко представлять для чего, и что, и как из полученных значений этих элементов будете обрабатывать, и для каких целей.
Если вы выводите список неких записей, которые пользователь может выбрать, а вы обработав этот выбор выводите, например, уже подробное описание выбранных пользователем записей, то что вам необходимо? Скорее всего передать ID этих записей пользователю для выбора. В какой атрибут чекбокса их поместить? Тут даже и задумываться не стоит - в поле value, а имена чекбоксов должны отображать массив их, и добавляя в имя тоже ID записи, страшного вы не делаете, но они будут мертвым грузом, лишними байтами переданные пользователю.
Вам на сервере нужны ID, и получив массив по имени (одномерный индексный массив), просто забрать значения этого массива (они как раз возращаются атрибутом value), пропустить их через intval() и подставить, например как список ID в mysql-запросе. Чтобы получить ID из атрибута name, то вам нужно получать уже ключи полученного массив, а это уже одна лишняя операция.
Когда оправдано/нужно помещение ID в имя элемента? Видимо тогда, когда пользователь, например, в одной ID записи может выбрать несколько предложений. Вот тогда вы можете записать так:
[url]<input type="checkbox" name="check[25]" value="12">
<input type="checkbox" name="check[25]" value="15">
<input type="checkbox" name="check[25]" value="20">[/url]
Здесь у записи с ID равным 25, пользователь может выбрать записи с ID равными 12, 15, 20, родителем для которых является запись с ID=25. В этом случае вы на сервере уже будете получать многомерный массив, и обрабатывать его нужно несколько иначе. Но только таким образом можно связать некие данные, только в этом случае есть смысл такого именования элементов формы.
В общем надо думать, а не гонять лишние байты пользователю, и хорошо представлять что вы пытаетесь сделать, для чего это требутеся, и в каком виде удобнее, выгоднее.

  Ответить  
 
 автор: Valick   (21.07.2010 в 15:48)   письмо автору
 
   для: sim5   (21.07.2010 в 15:38)
 

[url]<input type="checkbox" name="check[25]" value="12">
<input type="checkbox" name="check[25]" value="15">
<input type="checkbox" name="check[25]" value="20">[/url]

???

  Ответить  
 
 автор: sim5   (21.07.2010 в 15:54)   письмо автору
 
   для: Valick   (21.07.2010 в 15:48)
 

Что вас так удивило?

  Ответить  
 
 автор: Valick   (21.07.2010 в 15:57)   письмо автору
 
   для: sim5   (21.07.2010 в 15:54)
 

откуда тут возмется многомерный массив? на сервере Вы получите одно из трех значений сколько бы галочек Вы не ставили

  Ответить  
 
 автор: sim5   (21.07.2010 в 16:00)   письмо автору
 
   для: Valick   (21.07.2010 в 15:57)
 

Вы поторопились, ибо лишили меня возможности ВВ-тег подправить и указать размерность массива. ;-)

  Ответить  
 
 автор: sim5   (21.07.2010 в 15:58)   письмо автору
 
   для: sim5   (21.07.2010 в 15:38)
 

PS.
<input type="checkbox" name="check[25][]" value="12">
<input type="checkbox" name="check[25][]" value="15">
<input type="checkbox" name="check[25][]" value="20">

  Ответить  
 
 автор: V@ldem@r   (21.07.2010 в 16:08)   письмо автору
 
   для: sim5   (21.07.2010 в 15:38)
 

спасибо за очень развернутый ответ.
Рассказываю зачем я все это делаю.

У меня есть база, мне надо из нее переместить данные в другую базу, при этом учитывая связи полей таблиц. (обе базы хранят в себе данные по дистанционному обучению)

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

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

Я понимаю, может быть немного не понятно объяснил, но как могу, если что поправьте.


Если бы это можно было сделать просто так, т.е. выбрать значения из одной таблицы базы N и добавить в таблицу базы M, но при таком варианте данные у меня не отображаются в системе(moodle), только в базе. Я так пока и не понял почему так происходит. Опытным путем было установлено, что добаление через свой скрипт он отображает только тогда, когда осуществляется переход на страницу с только что добавленным курсом (как пример).


Данные которые храняться в обеих базах однотипные (конечно поля разные по количеству).

  Ответить  
 
 автор: sim5   (21.07.2010 в 16:33)   письмо автору
 
   для: V@ldem@r   (21.07.2010 в 16:08)
 

>Я понимаю, может быть немного не понятно объяснил

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

Взять и поместить, это не проблема. Если вы выбераете чекбоксами, например, ID записей (которые как значения атрибутов value), и форма передается методом POST, то получив форму, в обработчике ее, достаточно из этих выбранных ID сформировать запрос на выбор из базы всех значений (если атрибуты name чекбоксов у вас именуются как check[]):
<?
//формируем список ID для запроса
$id implode(","array_map('intval'$_POST['check']));
//получаем все поля записи для этих ID 
//(возможно и не все, тогда укажите конкретные поля в запросе)
mysql_query("SELECT * FROM `tableName` WHERE `id` IN(" $id ")");

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

Чтобы увидеть изменения в новой таблице, нужно их вывести (запрос на выбор) на страницу, иначе вы и не увидите изменений, ну если только в РМА, например, не заглянуть. Можете делать перенос и с помощью РМА (импорт/экспорт), где вы тоже можете выбрать число записей для экспорта.

PS. "при этом учитывая связи полей таблиц"... Имеется ввиду, при получении автоинкрементом новых id-значений в новой базе, не нарушить связь? Можно в новой таблице предусмотреть поле, например, `oldid`, которое будет содержать id старой таблицы. Тогда во всех новых таблицах связанных с ней, обновить поля содержащие старые связи со занчения `oldid` на новые сформированные id. После этого поле `oldid` можно удалить. В общем, типа в таком ключе.

  Ответить  
 
 автор: Гавриленко Дмитрий   (21.07.2010 в 17:14)   письмо автору
 
   для: V@ldem@r   (21.07.2010 в 16:08)
 

>спасибо за очень развернутый ответ.
>Рассказываю зачем я все это делаю.
>
>У меня есть база, мне надо из нее переместить данные в другую базу, при этом учитывая связи полей таблиц. (обе базы хранят в себе данные по дистанционному обучению)
>
>Необходимо перекочевать не всем данных сразу, а только выборочным.
>
>Поэтому я подключаюсь к первой базе, выдергиваю айдишники нужных мне данных в виде чекбоксов, если есть другой вариант, то скажите и передаю их в обработчик, который должен в базе мудла создать курсы с такими же айдишниками.
>
>Я понимаю, может быть немного не понятно объяснил, но как могу, если что поправьте.
>
>
>Если бы это можно было сделать просто так, т.е. выбрать значения из одной таблицы базы N и добавить в таблицу базы M, но при таком варианте данные у меня не отображаются в системе(moodle), только в базе. Я так пока и не понял почему так происходит. Опытным путем было установлено, что добаление через свой скрипт он отображает только тогда, когда осуществляется переход на страницу с только что добавленным курсом (как пример).
>
>
>Данные которые храняться в обеих базах однотипные (конечно поля разные по количеству).




автор: sim5 (21.07.2010 в 15:58) письмо автору
для: sim5 (21.07.2010 в 15:38)

PS.
<input type="checkbox" name="check[25][]" value="12">
<input type="checkbox" name="check[25][]" value="15">
<input type="checkbox" name="check[25][]" value="20">

Вам что-то подобное нужно? Или нет?

  Ответить  
 
 автор: Гавриленко Дмитрий   (21.07.2010 в 19:12)   письмо автору
 
   для: Гавриленко Дмитрий   (21.07.2010 в 17:14)
 

Завтра выложу скрипт если он будет без ценен.

  Ответить  
 
 автор: Гавриленко Дмитрий   (22.07.2010 в 17:19)   письмо автору
1.6 Кб
 
   для: Гавриленко Дмитрий   (21.07.2010 в 19:12)
 

Вот примерный скрипт

Файл с формой


<?php
$conn 
mysql_connect("localhost","1","1");
$db mysql_select_db("test1",$conn);
$quer "SELECT * FROM test ORDER BY id";
$query mysql_query($quer) or exit("Пока!");
$row mysql_fetch_array($query);
echo 
'
<form action=v.php method=post>
'
;
while(
$row mysql_fetch_array($query))
{
    echo 
"<label>Название курса: \"".$row['title']."\" ID курса: \"".$row['id']."\"</label>"
    echo 
"<input name=id[] type='checkbox' value=".$row['id']." /><br><p>\n";
}
echo 
'
<input type=submit>
</form>'
;
?>



файл обработчик




<?php
$conn 
mysql_connect("localhost","1","1");
$db mysql_select_db("test1",$conn);
$id $id[] = $_POST['id'];
if(!empty(
$id))
{
echo 
'Были перемещены следующие статьи.<br>';
    foreach(
$id as $var)
    {
    
        
//Соединияемся с базой для извлечения данных.
        
        
$quer "SELECT * FROM test WHERE id = $var";
        
$query mysql_query($quer) or exit("Пока!");
        
$row mysql_fetch_array($query);
        
        
//Заганяем все данные в переменные
        
        
$oldid $row['id'];
        
$title $row['title'];
        
//$text = $row['text'];
        //$date = $row['date'];
        //И так далее и тому подобное!
    
        
        //Вставляем в другую таблицу данные 
        
        
$quer2 "INSERT INTO `test2` ( `id` , `title` , `oldid` ) VALUES ('','$oldid','$title')";
        
$query2 mysql_query($quer2);
        
        
//Удаляем данные из прежней таблицы
        
        
$quer3 "DELETE FROM `test` WHERE `id` = $var";
        
$query3 mysql_query($quer3);
        
        echo 
'ID: <b>',$var,'</b> Название: <b>',$title,'</b><br>';
    }    
}
else echo 
'Не чего не выбрали!';
?>



дамп таблицы



-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Время создания: Июл 22 2010 г., 17:17
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
-- 
-- БД: `test1`
-- 

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

-- 
-- Структура таблицы `test`
-- 

CREATE TABLE `test` (
  `id` int(5) NOT NULL auto_increment,
  `title` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;

-- 
-- Дамп данных таблицы `test`
-- 

INSERT INTO `test` VALUES (3, 'Уроки CSS');
INSERT INTO `test` VALUES (4, 'Уроки FLASH');
INSERT INTO `test` VALUES (5, 'Уроки JavaScript');
INSERT INTO `test` VALUES (6, 'Уроки ActivX');
INSERT INTO `test` VALUES (1, 'Уроки HTML');
INSERT INTO `test` VALUES (2, 'Уроки PHP');

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

-- 
-- Структура таблицы `test2`
-- 

CREATE TABLE `test2` (
  `id` int(5) NOT NULL auto_increment,
  `title` text NOT NULL,
  `oldid` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

-- 
-- Дамп данных таблицы `test2`
-- 


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







если что, то все файлы я прикрепил..

Пользователь Mysql: 1
Пароль: 1
Сервер: localhost

  Ответить  
 
 автор: sim5   (22.07.2010 в 17:53)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 17:19)
 

По рукам надо бить за такие примеры.

  Ответить  
 
 автор: Гавриленко Дмитрий   (22.07.2010 в 17:55)   письмо автору
 
   для: sim5   (22.07.2010 в 17:53)
 

гг, почему?

  Ответить  
 
 автор: sim5   (22.07.2010 в 17:57)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 17:55)
 

Потому, что хх, причем полная.

  Ответить  
 
 автор: Гавриленко Дмитрий   (22.07.2010 в 18:35)   письмо автору
 
   для: sim5   (22.07.2010 в 17:57)
 

Что не так? Перемещение инфы из одной базы в другую. Суть скрипта не в том что ли?

  Ответить  
 
 автор: sim5   (22.07.2010 в 18:47)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 18:35)
 

Все не так, начиная от мелких глупостей, кончая вообще логикой переноса данных. Говорить долго сейчас некогда, но причину такого написания вами скриптов я скажу - у вас чапаевский метод их написания, а он вреден.

  Ответить  
 
 автор: Гавриленко Дмитрий   (22.07.2010 в 18:54)   письмо автору
 
   для: sim5   (22.07.2010 в 18:47)
 

Объясните как писать не чапаевским методом... Пожалуйста.

  Ответить  
 
 автор: sim5   (22.07.2010 в 18:55)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 18:54)
 

Думать.

  Ответить  
 
 автор: Valick   (22.07.2010 в 20:15)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 18:54)
 

данные не нужно доставать с сервера mysql их и так можно свободно перенести
и уж тем более делать эти три запроса в цикле (при 10 чекбоксах - 30 (!) запросов)

попробуйте вот так (убрав автоинкремент со второй таблицы):
$query = "INSERT INTO test2 (id, title ) SELECT id, title FROM test WHERE id IN $id"; 

вторым запросом если нужно то удалять данные из первой таблицы
$query2 = "DELETE FROM test WHERE id IN $id";

всего два запроса к базе при любом количестве выбранных чекбоксов

  Ответить  
 
 автор: V@ldem@r   (22.07.2010 в 20:49)   письмо автору
 
   для: Гавриленко Дмитрий   (22.07.2010 в 17:19)
 

Спасибо Вам большое за помощь!

  Ответить  
 
 автор: V@ldem@r   (22.07.2010 в 21:52)   письмо автору
 
   для: V@ldem@r   (22.07.2010 в 20:49)
 

Все получилось! Ура.

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

Мне же нужно, чтобы это срабатывало для множества операций в цикле.

Вот код:


<?php
//выборка из базы елеарнинг
include("confelearn.php");
error_reporting(E_ALL);
$cid $cid[] = $_POST['cid'];
if(isset(
$cid))
{

    foreach(
$cid as $key=>$id)
    { 
        
$select=mysql_query("select * from Courses where CID=$id");
    
$mass=mysql_fetch_array($select);

        
$idi=$mass['CID'];
        
$fullname=$mass['Title'];
        
$summary=$mass['Description'];
         
        include (
"configmoodlle.php");

        
$ins=mysql_query("insert into mdl_course (category, id,  fullname)  values (1, $idi, '$fullname) ");
        
        if (
$ins==true)
           {
              echo 
"<html><head> 
              <meta HTTP-EQUIV='Refresh' Content='1; URL=http://moodle/course/view.php?id=
$idi'>  
               </head></html>"
;
            }
       }
}

  Ответить  
 
 автор: sim5   (22.07.2010 в 21:58)   письмо автору
 
   для: V@ldem@r   (22.07.2010 в 21:52)
 

Полный ужас - один не думая пишет, другой копирует. Вы так и дальше собираетесь скрипты писать?

  Ответить  
 
 автор: V@ldem@r   (22.07.2010 в 22:41)   письмо автору
 
   для: sim5   (22.07.2010 в 21:58)
 

А в чем ужас то? Что тут неправильно? На то он и форум, чтобы людям подсказывать. Все с чего-то начинают, Вы тоже не сразу вероятно писать начали на профессиональном уровне. А критиковать любой может.

  Ответить  
 
 автор: neadekvat   (22.07.2010 в 22:51)   письмо автору
 
   для: V@ldem@r   (22.07.2010 в 22:41)
 

> Вы тоже не сразу вероятно писать начали на профессиональном уровне. А критиковать любой может.
Коронная фраза.
Вы читаете, что дальше люди пишут? Если вы учитесь - учитесь у профессионалов, а не у людей, под постами которых пишут "плохой пример". Логично?
Вот что это за счастье - $id = $id[] = $_POST['something']? Вы понимаете смысл этой строки? Если не понимаете - зачем используете. Если понимаете - тем более, зачем тогда используете?

А вот это:
$cid = $cid[] = $_POST['cid']; 
if(isset($cid))

Понимаете?

Или это:
foreach($cid as $key=>$id)

Зачем вам еще и ключ? Мне, когда я смотрю на такую запись, думается, что ключ будет где-то использоваться.

if ($ins==true) 

Либо if ($ins) либо if ($ins === true), и что применять - тоже зависит от ситуации. Вы понимаете этот момент?

              echo "<html><head>  
              <meta HTTP-EQUIV='Refresh' Content='1; URL=http://moodle/course/view.php?id=$idi'>   
               </head></html>";

Прелесть.

Не хотел ведь лезть, черт дернул

  Ответить  
 
 автор: sim5   (22.07.2010 в 23:24)   письмо автору
 
   для: V@ldem@r   (22.07.2010 в 22:41)
 

>А в чем ужас то?
Во всем.

>Что тут неправильно?
Зачем вам объяснять, коли вы все равно задумываться не хотите?

  Ответить  
 
 автор: Valick   (22.07.2010 в 23:33)   письмо автору
 
   для: V@ldem@r   (22.07.2010 в 22:41)
 

А в чем ужас то? Что тут неправильно?
у меня складывается впечатление, что вы не все посты читаете, я Дмитрию подробно расписал что там неправильно

  Ответить  
 
 автор: Гавриленко Дмитрий   (23.07.2010 в 11:50)   письмо автору
 
   для: Valick   (22.07.2010 в 23:33)
 

>А в чем ужас то? Что тут неправильно?
>у меня складывается впечатление, что вы не все посты читаете, я Дмитрию подробно расписал что там неправильно
Благодарю!

  Ответить  
Rambler's Top100
вверх

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