Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение переменной из ключа массива 
:(
    Опции темы
sTa1kEr
Дата 16.7.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(Feldmarschall @  16.7.2008,  09:31 Найти цитируемый пост)
объясни ему, пожалуйста, что
транзакция на один запрос не имеет смысла.

Если речь идет про таблицы InnoDB, то действительно, один запрос и так всегда будет выполнятся в одной транзакции, а обновление одной строки вообще можно считать атомарной операцией (не может быть обновлена только половина строки).
А если про MyISAM, то тут по вообще транзакции почти не имеют смысла.

Мне кажется, что автору рано еще работать с транзакциями, по этому я бы предложил убрать все запросы по работе с ними до тех пор пока не будет абсолютного понимания их работы.
PM MAIL   Вверх
xarakiry
Дата 16.7.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Эт так. Лирическое отступление  smile 
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Feldmarschall
Дата 16.7.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



xarakiry, ты бы, вместо отступлений, лучше написал здесь, что у тебя получилось в итоге.
PM   Вверх
xarakiry
Дата 16.7.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Просмотрел, всё что написано... начал писать... к примеру 

Код

$data  = array( 'FIELD_NAME_1' => 'FIELD_VALUE_1', 
...,
'FIELD_NAME_N' => 'FIELD_VALUE_N');
function updatedbitems($link, array $data) {
    //формирование SQL
    if (count($data) > 0) {
        $sql = 'UPDATE table SET ';
        foreach ($data as $fieldName => $fieldValue) {
            $sql .= $fieldName . ' = \'' . mysql_real_escape_string($fieldValue) . '\', ';
        }
        $sql = substr($sql, 0, -2); // отрезаем лишний пробел и запятую
    }
    // выполнение транзакции
    if (mysql_start_transaction()) {
        if (!mysql_query($sql)) {
            die(mysql_error($link));
        }
        if (!mysql_commit_transaction()) {
            die(mysql_error($link));
        }
    }
}


не подходит потому что форма multipart/form-data и помимо обычных значений загружаются и файлы, которые предварительно сохраняются и переименовываются. Кроме того если брать полный просчёт массива пост то вместе со всеми переменными также идёт и сабмит, который ясное дело не нужен в базе. Что касается транзакций, то да... я почистил функции свои убрал транзакции..для однострокового запроса они дейст-но ни к чему.
единственное что более менее подошло это array_walk($_POST,'trim');
так что вопрос преобразования элементов массива в переменную остаётся...
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Feldmarschall
Дата 16.7.2008, 23:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(xarakiry @  16.7.2008,  22:33 Найти цитируемый пост)
так что вопрос преобразования элементов массива в переменную остаётся... 

Das is fantastisch...

То есть, для чего нужен массив $allowed, ты не понял.
попробуй перечитать ответы ещё раз. И пример, который тебе дали.
И перестань говорить "не подходит". замени это выражение на более корректное "я опять ничего не понял".
PM   Вверх
Fortop
Дата 17.7.2008, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Feldmarschall, 
говоришь, он слушает? ну-ну smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Feldmarschall
Дата 17.7.2008, 09:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Да, действительно. Он вообще ничего не слушает.

xarakiry. Читай, пожалуйста, внимательнее.
Не путай обработку формы в цикле и составление запроса.
Для обработки (trim, escape_string) цикл прекрасно подходит.
Для составления запроса, действительно, просто автоматом обрабатывать пост не получится. Но тебе это никто и не предлагает.
Тебе предлагают сделать массив с именами полей в базе. И по этому массиву составлять запрос.
в функцию, которая составляет запрос, ты передаешь ДВА массива. свою дату, и $allowed, про который тебе писали. В самом простом варианте $allowed - это просто массив имен полей.

В результате вся запись в базу сведется к двум строчкам:
$allowed=array("dk_nomre","sehra_qeydi" и так далее
$query="UPDATE museum_base SET ".create_set_query($_POST,$allowed);
mysql_query($query);

и никакая отдельная функция не будет нужна. и писать по 10 раз свои переменные тоже не нужно будет.
теперь ты веришь, что с массивами и циклами удобнее?
PM   Вверх
xarakiry
Дата 17.7.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Да, не внимательно прочитал... вот что у меня получилось...

Код

$data  = array( 'unical_number' => trim($_POST['unical_number']), 
'dk_nomre' => trim($_POST['dk_nomre']),'sehra_qeydi'=>trim($_POST['sehra_qeydi']),'diger_nomre'=>trim($_POST['diger_nomre']),
'adi'=>trim($_POST['adi']),'tapildigi_yer'=>trim($_POST['tapildigi_yer']),'tapan_shexs'=>trim($_POST['tapan_shexs']),
'dovrleshdirilmesi'=>trim($_POST['dovrleshdirilmesi']),'tesviri'=>trim($_POST['tesviri']),'oyrenilmesi'=>trim($_POST['oyrenilmesi']),
'hundurluyu'=>trim($_POST['hundurluyu']),'eni'=>trim($_POST['eni']),'uzunlugu'=>trim($_POST['uzunlugu']),'chekisi'=>trim($_POST['chekisi']),'diametr'=>trim($_POST['diametr']),'agiz'=>trim($_POST['agiz']),'govde'=>trim($POST['govde']),'oturacaq'=>trim($POST['oturacaq']),'terkibi'=>trim($_POST['terkibi']),'elave_qeydiler'=>trim($_POST['elave_qeydiler']),'veziyyati'=>trim($_POST['veziyyati']),'shkafda_yer'=>trim($_POST['shkafda_yer']),'tertib_eden'=>trim($_POST['tertib_eden']),'mezeya_tehvil_ver_vaxt'=>trim($_POST['muzeya_tehvil_ver_vaxt']));
function updatedbitems($link,$data,$picture1,$picture2,$picture3) {
    //формирование SQL
    if (count($data) > 0) {
        $sql = 'UPDATE museum_base SET ';
        foreach ($data as $fieldName => $fieldValue) {
            $sql .= $fieldName . ' = \'' . mysql_real_escape_string($fieldValue) . '\', ';
        }
        $sql = substr($sql, 0, -2); // отрезаем лишний пробел и запятую
        echo "$sql <br/>";
    }
    // выполнение транзакции
  if (mysql_query($sql)){
    echo "Обновлено";
}else {die(mysql_error($link));}
}


крутил вот эту строку 
Код

$sql .= $fieldName . ' = \'' . mysql_real_escape_string($fieldValue) . '\', ';


хотел добавить в неё  picture1='$picture1' ,picture2='$picture2' ,picture3='$picture3'
атак же условие WHERE unical_number='$data[unical_number]' ... до 3-х провозился...
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Feldmarschall
Дата 17.7.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ты так и не понял, зачем нужны циклы.
циклы нужны для того, чтобы не писать функцию trim стописят тысяч раз!

и к массиву POST обращаться тоже - только ОДИН раз! точно так же, как ты ОДИН РАЗ пишешь функцию mysql_real_escape_string. А не сто тысяч раз, как trim.

и функция updatedbitems тебе тоже не нужна.
а нужна универсальная функция для составления запросов. в которую передавать не массив $data, $_POST! Потому что в $_POST у тебя ледат все данные!

а имена картинок можно дописать в $_POST. и в $allowed

Добавлено через 5 минут и 12 секунд
Fortop, еще одна трудноуловимая проблема. Он не понимает, что значит $allowed. Для нас стобой имя этой переменной не нуждается в комментариях. а ему надо объяснять, что это массив, содержащий разрешенные имена переменных.



PM   Вверх
xarakiry
Дата 17.7.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Цитата(Feldmarschall @ 17.7.2008,  12:05)
ты так и не понял, зачем нужны циклы.
циклы нужны для того, чтобы не писать функцию trim стописят тысяч раз!

и к массиву POST обращаться тоже - только ОДИН раз! точно так же, как ты ОДИН РАЗ пишешь функцию mysql_real_escape_string. А не сто тысяч раз, как trim.

и функция updatedbitems тебе тоже не нужна.
а нужна универсальная функция для составления запросов. в которую передавать не массив $data, $_POST! Потому что в $_POST у тебя ледат все данные!

а имена картинок можно дописать в $_POST. и в $allowed

Добавлено @ 12:10
Fortop, еще одна трудноуловимая проблема. Он не понимает, что значит $allowed. Для нас стобой имя этой переменной не нуждается в комментариях. а ему надо объяснять, что это массив, содержащий разрешенные имена переменных.

Ребята ...не надо на меня злится...я щас сижу и разбираю.... я знаю я вас замучил... Я сам хочу приучится писать циклами ...
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Feldmarschall
Дата 17.7.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Не надо учиться писать циклами.
Надо учиться ЧИТАТЬ.

я тебе написал готовый, практически, код.
показал, что должно быть в массиве $allowed
показал, что в функцию надо передавать массив $_POST. который и является массивом с данными, то есть, $data
и массив $allowed, в котором перечислены разрешенные поля.
и перебирая в цикле $allowed, подставлять соответствующие данные из $_POST в строку запроса, попутно обрабатывая их.

я тебе 5 раз написал, что функция updatedbitems не нужна. но она у тебя все равно на первом месте.

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


PM   Вверх
Fortop
Дата 17.7.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



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

Давай все-таки по шагам, как предлагал Feldmarschall вначале.

1. У тебя есть данные из $_POST
2. тебе нужно каждый элемент обработать trim и другими функциями.

Ты можешь это сделать в цикле?



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
xarakiry
Дата 29.7.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 28.5.2008

Репутация: -1
Всего: -1



Прошу прощения что долго не отвечал...просто работой завалили....

Да... могу конструкцией 

  foreach ($_POST as $key => $value){
       $value=trim($value);
  }



--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
lukas
Дата 29.7.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



я думаю автор просил что-то вроде функции serialize и unserialize...  smile  ??? Это так???


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
krundetz
Дата 29.7.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



xarakiry, посмотрите вот на эту функцию array_keys( ) она возвращает массив, содержащий все ключи исходного массива, переданного в качестве параметра.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4984 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.