За последние 24 часа нас посетил 22581 программист и 1594 робота. Сейчас ищут 897 программистов ...

Числовое значение из input вместо строкового

Тема в разделе "PHP для новичков", создана пользователем SamyRed, 21 фев 2017.

  1. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Здравствуйте. Имеется вот такая форма:
    PHP:
    1.     <form action="" method="post">
    2.             <input type="hidden" name="perms[adminAccess]" value=0>
    3.                 <input type="checkbox" <?=checked (groups ('id', $id, 1)['adminAccess'])?> name="perms[adminAccess]" class="inputText" value=1>
    4.             <input type="hidden" name="perms[adminAccess]" value=0>
    5.                 <input type="checkbox" <?=checked (groups ('id', $id, 1)['seeLogs'])?> name="perms[seeLogs]" class="inputText" value=1>
    6.             <input type="hidden" name="perms[adminAccess]" value=0>
    7.                 <input type="checkbox" <?=checked (groups ('id', $id, 1)['editLogs'])?> name="perms[editLogs]" class="inputText" value=1>
    8.         <input type="submit" name="gSubmit" class="button">
    9.     </form>
    И вот такой обработчик:
    PHP:
    1.         $id = $_GET['id'];
    2.         if (isset ($_POST['gSubmit'])) {
    3.             $newPerms = serialize ($_POST['perms']);
    4.             $q = $db->query ("UPDATE `groups` SET `title` = '{$_POST['gTitle']}', `tBefore` = '{$_POST['gTBefore']}', `tAfter` = '{$_POST['gTAfter']}', `permissions` = '$newPerms' WHERE `id` = '$id'");
    5.         }
    Проблема в том. что про отправке формы в базу записывается строка, а не число (0/1). И из-за этого немного ломается логика. Можно было бы использовать intval, но может посоветуете какой другой вариант? Может там у serialize есть какое-то свойство, чтоб он преобразововал строки в число. А если и intval - то как его применить для записи в БД?

    P/S. В БД записывается такая строка:
    Код (Text):
    1.  
    2. a:17:{s:11:"adminAccess";s:1:"1";s:7:"seeLogs";s:1:"1";s:8:"editLogs";s:1:"1";}
    а должна такая:
    Код (Text):
    1.  
    2. a:18:{s:11:"adminAccess";i:1;s:7:"seeLogs";i:1;s:8:"editLogs";i:1;}
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    Строка:
    `title` = '{$_POST['gTitle']}'
    Число:
    `title` = {$_POST['gTitle']}

    +в БД столбец зарегестрирован как строковые данные
    --- Добавлено ---
    у вас записывается в БД как OBJECT JSON {} ключи сохраняются
     
    SamyRed нравится это.
  3. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Не, ты не понял. Ну понятно что сериализованный массив это строка. Мне нжно чтоб значения в этом массиве были именно в виде числа.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
  5. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Ну... Так а как мне всё таки превратить строку "1" в число 1, которое приходит методом пост после отправки формы с чекбоксами и обрабатываясь через serialize уходит в БД?
    --- Добавлено ---
    Я понимаю что если я напишу строку то это и будет строка.... Вопрос в том, как лучше её в число преобразовать.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.814
    Симпатии:
    1.332
    Адрес:
    Лень
    никак, вы используете сериализацию, а она в строку
     
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Но почему тогда конструкция
    PHP:
    1. $array = array (
    2.     'adminAccess' => 1,
    3.     'seeLogs' => 1,
    4.     'editLogs' => 1,
    5.     'usersCreate' => 1,
    6.     'usersEdit' => 1,
    7.     'usersBan' => 1,
    8.     'usersPermban' => 1,
    9.     'usersIPban' => 1,
    10.     'groupsCreate' => 1,
    11.     'groupsEdit' => 1,
    12.     'newsCreate' => 1,
    13.     'newsEdit' => 1,
    14.     'commentsCreate' => 1,
    15.     'commentsEdit' => 1,
    16.     'downloadFiles' => 1,
    17.     'changeSkin' => 1,
    18.     'changePrefix' => 1,
    19.     'shopDiscount' => 5, //Скидка в магазине в процентах
    20. );
    21. $arrayS = serialize($array);
    22. echo $arrayS;
    возвращает правильную строку?
     
  8. Drema

    Drema Новичок

    С нами с:
    20 фев 2017
    Сообщения:
    117
    Симпатии:
    30
    В GET и POST всегда строки. То, что вы написали value=1, а не value="1" (что стандартнее) не делает из единицы целое число.
    Попробуйте перед сериализацией пробежаться по массиву и сделать intVal.
     
    SamyRed нравится это.
  9. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Да я так и хотел сразу сделать, но домал, может можно как-то сократить код, может в какой-то функции есть параметр, который сразу преобразует типы в такие как надо) Такое в php часто встречается)). Ладно, спасибо всем. Щас так и сделаю.