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

Поиск:

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


Бывалый
*


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

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



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

К примеру есть $_POST['name'] как мне из него сделать $name, т.е в массиве много ключей и всех мне надо перевести в обычный вид. 
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
bars80080
Дата 14.7.2008, 18:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Код

foreach($_POST as $k => $v) {
$$k = $v;
}


но так лучше не делать

зачем такая задача?
PM MAIL WWW   Вверх
xarakiry
Дата 14.7.2008, 19:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(bars80080 @ 14.7.2008,  18:07)
Код

foreach($_POST as $k => $v) {
$$k = $v;
}


но так лучше не делать

зачем такая задача?

Это не совсем подходит. Я же говорю надо перевести элемент массива в строковую переменную... а форич просчитывает  массив как элемент - ключ. А требуется из ключа сделать переменную.
из $_POST['name'] в  $name
из $_POST['city']  в $city
и т.д


А надо это чтобы потом проще было работать с переменными, и пропускать через функции. (Во всяком случае для меня так проще)
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Fortop
Дата 14.7.2008, 20:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



xarakiry, 
Либо я ничего не понял, либо Вы не поняли приведенного кода.

Судя по сумбурным описаниям, скорее второе. Поэтому перечитайте и перетестируйте образец кода.


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


Новичок
****


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

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



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


Бывалый
*


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

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



Цитата(Feldmarschall @ 14.7.2008,  21:26)
xarakiry, через функции пропускать удобнее, как раз, массив. В цикле.
Давай ты покажешь нам эти функции, а мы покажем тебе компактный код в три строчки, который с ними работает.

Ну, вот моя функция 

Код


function updatedbitems($link, $db, $unical_number, $dk_nomre, $sehra_qeydi, $diger_nomre,
    $picture1, $picture2, $picture3, $adi, $tapildigi_yer, $tapildigi_vaxt, $tapan_shexs,
    $dovrleshdirilmesi, $tesviri, $oyrenilmesi, $hundurluyu, $eni, $uzunlugu, $chekisi,
    $diametr, $agiz, $govde, $oturacaq, $terkibi, $elave_qeydiler, $veziyyati, $shkafda_yer,
    $tertib_eden, $muzeya_tehvil_ver_vaxt)
{
    /*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
    $unical_number = htmlspecialchars($unical_number);
    $dk_nomre = htmlspecialchars($dk_nomre);
    $sehra_qeydi = htmlspecialchars($sehra_qeydi);
    $diger_nomre = htmlspecialchars($diger_nomre);
    $adi = htmlspecialchars($adi);
    $tapildigi_yer = htmlspecialchars($tapildigi_yer);
    $tapildigi_vaxt = htmlspecialchars($tapildigi_vaxt);
    $tapan_shexs = htmlspecialchars($tapan_shexs);
    $dovrleshdirilmesi = htmlspecialchars($dovrleshdirilmesi);
    $tesviri = htmlspecialchars($tesviri);
    $oyrenilmesi = htmlspecialchars($oyrenilmesi);
    $hundurluyu = htmlspecialchars($hundurluyu);
    $eni = htmlspecialchars($eni);
    $uzunlugu = htmlspecialchars($uzunlugu);
    $chekisi = htmlspecialchars($chekisi);
    $diametr = htmlspecialchars($diametr);
    $agiz = htmlspecialchars($agiz);
    $govde = htmlspecialchars($govde);
    $oturacaq = htmlspecialchars($oturacaq);
    $terkibi = htmlspecialchars($terkibi);
    $elave_qeydiler = htmlspecialchars($elave_qeydiler);
    $veziyyati = htmlspecialchars($veziyyati);
    $shkafda_yer = htmlspecialchars($shkafda_yer);
    $tertib_eden = htmlspecialchars($tertib_eden);
    $muzeya_tehvil_ver_vaxt = htmlspecialchars($muzeya_tehvil_ver_vaxt);
    /*----------------------------------------------------------------------*/
    mysql_select_db($db, $link) or die(mysql_error); //Выбираем базу данных
    $query1 = "START TRANSACTION;";
    $query2 = "UPDATE museum_base SET unical_number='$unical_number',dk_nomre='$dk_nomre',sehra_qeydi='$sehra_qeydi',diger_nomre='$diger_nomre',adi='$adi',tapildigi_yer='$tapildigi_yer',tapildigi_vaxt='$tapildigi_vaxt',tapan_shexs='$tapan_shexs',tesviri='$tesviri',dovrleshdirilmesi='$dovrleshdirilmesi',oyrenilmesi='$oyrenilmesi',hundurluyu='$hundurluyu',eni='$eni',uzunlugu='$uzunlugu',chekisi='$chekisi',diametr='$diametr',agiz='$agiz',govde='$govde',oturacaq='$oturacaq',terkibi='$terkibi',elave_qeydiler='$elave_qeydiler',veziyyati='$veziyyati',shkafda_yer='$shkafda_yer',tertib_eden='$tertib_eden',mezeya_tehvil_ver_vaxt='$mezeya_tehvil_ver_vaxt',picture1='$picture1',picture2='$picture2',picture3='$picture3' WHERE unical_number='$unical_number' ;";
    $query3 = "COMMIT;";
    /*-----------------------------------Конец запросов SQL--------------------------------------*/
    if (!mysql_query($query1))
    {
        die(mysql_error($link));
    }
    if (!mysql_query($query2))
    {
        die(mysql_error($link));
    }
    if (!mysql_query($query3))
    {
        die(mysql_error($link));
    }


}


?>


это я ещё убрал из неё трим...

Знаю знаю выглядит ужасно и не компактно... 
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
skyboy
Дата 15.7.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

Репутация: 75
Всего: 260



xarakiry, примечание: htmlspecialchars - не для обработки перед вставкой в БД. а для обработки непосредственно перед выводом пользователю
PM MAIL   Вверх
Fortop
Дата 15.7.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(xarakiry @  15.7.2008,  20:22 Найти цитируемый пост)
$unical_number, $dk_nomre, $sehra_qeydi, $diger_nomre,
    $picture1, $picture2, $picture3, $adi, $tapildigi_yer, $tapildigi_vaxt, $tapan_shexs,
    $dovrleshdirilmesi, $tesviri, $oyrenilmesi, $hundurluyu, $eni, $uzunlugu, $chekisi,
    $diametr, $agiz, $govde, $oturacaq, $terkibi, $elave_qeydiler, $veziyyati, $shkafda_yer,
    $tertib_eden, $muzeya_tehvil_ver_vaxt

Это все связанные между собой свойства?
Если да, то создай объект/модель/массив
и передавай в функцию именно его

// FIELD_NAME - это всегда имя из списка имен разрешенных для получения извне данных.
// FIELD_VALUE - сами данные соответствующие этому имени.
// как их лучше профильтровать см. один из приемов организации фильтрации входящих данных
Код

$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));
        }
    }
}


Это сообщение отредактировал(а) Fortop - 15.7.2008, 21:06


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


Новичок
****


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

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



Это POST
а транзакция ему не нужна
PM   Вверх
xarakiry
Дата 15.7.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Fortop @ 15.7.2008,  21:04)
Цитата(xarakiry @  15.7.2008,  20:22 Найти цитируемый пост)
$unical_number, $dk_nomre, $sehra_qeydi, $diger_nomre,
    $picture1, $picture2, $picture3, $adi, $tapildigi_yer, $tapildigi_vaxt, $tapan_shexs,
    $dovrleshdirilmesi, $tesviri, $oyrenilmesi, $hundurluyu, $eni, $uzunlugu, $chekisi,
    $diametr, $agiz, $govde, $oturacaq, $terkibi, $elave_qeydiler, $veziyyati, $shkafda_yer,
    $tertib_eden, $muzeya_tehvil_ver_vaxt

Это все связанные между собой свойства?
Если да, то создай объект/модель/массив
и передавай в функцию именно его

// FIELD_NAME - это всегда имя из списка имен разрешенных для получения извне данных.
// FIELD_VALUE - сами данные соответствующие этому имени.
// как их лучше профильтровать см. один из приемов организации фильтрации входящих данных
Код

$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));
        }
    }
}

Отличный пример ! Вот только последнее не понял... что за функция mysql_start_transaction, я её даже на php.net не нашёл.... ???

Вопросик:
Код


$allowed = ( 'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
                    ...,
                    'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
                    'имя_ключа_из_ПОСТ' => 'разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных',
);


не понял что за "разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных" это как ?
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Feldmarschall
Дата 15.7.2008, 22:34 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



xarakiry, это слишком сложно для человека, который впервые узнал про циклы
тебе надо понять две вещи.
1. что любой массив удобнее обрабатывать в цикле. чем городить из него сто переменных и писать каждую отдельной строчкой. Надеюсь, ты это уже понял
2. Что твои данные надо обрабатывать в цикле. Ты уже написал этот цикл? Можно посмотреть?

После того, как напишешь обработку в цикле, можно будет приступить к автоматическому составлению запроса. В цикле, разумеется.
PM   Вверх
Fortop
Дата 16.7.2008, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Feldmarschall @  15.7.2008,  21:14 Найти цитируемый пост)
Это POST

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

Цитата(xarakiry @  15.7.2008,  21:56 Найти цитируемый пост)
Вот только последнее не понял... что за функция mysql_start_transaction, я её даже на php.net не нашёл.... ???

Это как раз самое простое smile
тривиальная обертка над твоим
Код

    $query1 = "START TRANSACTION;";
    if (!mysql_query($query1))
    {
        die(mysql_error($link));
    }



Цитата(xarakiry @  15.7.2008,  21:56 Найти цитируемый пост)
не понял что за "разрешенный тип или еще лучше имя callback функции для фильтрации и валидации данных" это как ? 

это значит что все данные полученные из внешних источников должны проверяться. Чтобы ты получил в качестве года именно число, а не надпись "Здесь был Вася".
Дальше идет описание как лучше организовать эту проверку.

В качестве параметра в массиве разрешенных данных можно хранить или имя функции или "имя типа" (т.е. какого типа мы ожидаем данные)
простейший случай - "имя типа"

Код

$allowed = array('user_id' => 'int',
                 'name'    => 'string',
                 'male'     => 'bool');



тогда фильтрация пришедших данных будет выглядеть примерно так

Код

foreach ($_POST as $key => $val) {
    if (array_key_exists($key, $allowed)) {
        switch ($allowed[$key]) {
            case 'int':
                $result[$key] = (int)$val;
            break;
            case 'string':
                // строка остается как есть. 
                $result[$key] = $val;
                // Но если нужно можем и с ней что-то сделать (например привести в верхний регистр)
                // $result[$key] = strtoupper($val);
            break;
            case 'bool':
                // скобки нужны лишь для лучшего понимания - т.е. необязательны.
                $result[$key] = ($val == 'true');
            break;
            default:
            break;
        }
    }
}
//теперь у нас в $result только разрешенные нами переменные  и только тех типов которые мы ожидаем


Но, Feldmarschall, прав - лучше все по порядку. Так удобнее это осваивать.

Это сообщение отредактировал(а) Fortop - 16.7.2008, 00:59


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


Новичок
****


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

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



Цитата(Fortop @  16.7.2008,  00:56 Найти цитируемый пост)
но в нем могут идти данные которые не нужно записывать

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

Короче.
Если уж он тебя так слушает, раскрыв рот, то объясни ему, пожалуйста, что
транзакция на один запрос не имеет смысла.
что в общем случае достаточно перечислить только имена разрешенных полей, а в запросе оформлять, как строки. т.е. функция становится примитивной, и без колбэков.
что в функции updatedbitems нет ни малейшего смысла, и что вообще не нужно делать функции, вызываемые только один раз
что нужна вместо неё create_set_query().



Это сообщение отредактировал(а) Feldmarschall - 16.7.2008, 08:31
PM   Вверх
xarakiry
Дата 16.7.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Fortop Да, дейст-но с массивами проще, код уменьшается.
Feldmarschall Да , я слушаю но не раскрыв рот. Если бы я считал себя специалистом я не писал бы в этом разделе, а наверное задавал бы вопросы в разделе профи. Я не считаю что задать вопрос и получить ответ чем то постыдным.  захожу сюда потому что тут люди для разных задач находят интересные решения, что очень радует.
Спасибо большое всем за помощь!  smile 
--------------------
Все университеты Азербайджана на students.az
PM MAIL WWW   Вверх
Feldmarschall
Дата 16.7.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Цитата(xarakiry @  16.7.2008,  10:19 Найти цитируемый пост)
Если бы я считал себя специалистом я не писал бы в этом разделе, а наверное задавал бы вопросы в разделе профи. Я не считаю что задать вопрос и получить ответ чем то постыдным.  захожу сюда потому что тут люди для разных задач находят интересные решения, что очень радует.

не понял,  чему была эта тирада.

PM   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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