За последние 24 часа нас посетили 8808 программистов и 669 роботов. Сейчас ищут 153 программиста ...

Как распарсить массив php

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

  1. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    Здравствуйте, на сервер приходит json массив :
    Код (Text):
    1. $data = json_decode($msg,true);
    Код (Text):
    1. print_r($data);
    Код (Text):
    1. Array ( [0] => Array ( [number_orderes] => A472702 [dates] => 30-01-2020 23:23:19 [order_quantity] => 5 [E_mail] => admin@mail.ru) )
    как распарсить для запись в базу.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.062
    Симпатии:
    971
    Адрес:
    Лень
    Никак. Ты уже это сделал.
     
  3. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    @MouseZver
    тогда как мне сохранить все это в базу :
    Код (Text):
    1. $mysqli->query("UPDATE `orders` SET `numorder` = '...', `dates`='...', `orderquant`='...', `email`='...'");
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.062
    Симпатии:
    971
    Адрес:
    Лень
    Подставить место точек, переменные с данными, а лучше с помощью подготовленного запроса, где биндить сможешь в цикле
     
  5. miketomlin

    miketomlin Активный пользователь

    С нами с:
    9 авг 2016
    Сообщения:
    2.299
    Симпатии:
    366
    Проверь на null, на существование используемых ключей (можно использовать и filter_var_array) и вставляй через подготовленный запрос (см. примеры для mysqli prepare).
    --- Добавлено ---
    P.S. «Биндить» можно не только в цикле, но и просто перечислить элементы массива в списке параметров соотв. ф-ции.
    --- Добавлено ---
    P.P.S. Тут, наверно, INSERT нужен.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    7.234
    Симпатии:
    1.401
  7. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    помогите пожалуйста как правильно это сделать, я не знаю как в первый раз делаю подготовленный запрос
    Код (Text):
    1.  $mysqli->query("UPDATE `orders` SET `numorder` = '?', `dates`='?', `orderquant`='?', `email`='?'");
    2.  
    3. if($stmt = $mysqli -> prepare($mysqli)){
    4.     $stmt -> bind_param();
    5.     $stmt -> execute();
    6.     $stmt -> close();
    7. }
    8. else{
    9.     echo $mysqli -> error;
    10. }
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    7.234
    Симпатии:
    1.401
    @kris1412 А-а-а-а, мои глаза.... https://www.php.net/manual/ru/mysqli.prepare.php - если того, что здесь написано (заметь, по-русски) тебе не достаточно, не твоё это дело, найми кого-нибудь...
     
  9. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    ошибка:Uncaught Error: Call to a member function prepare() on null
    подскажите в чем тут ошибка и как исправить ее.
    Код (Text):
    1. $sql->query("UPDATE `orders` SET `zakaznum` = '?', `dates`='?', `orderquant`='?', `email`='?', `phone`='?'");
    2. $stmt = $mysqli -> prepare($sql);
    3. $stmt->bind_param("siisi", $number_orderes,$dates,$order_quantity,$E_mail,$phone);
    4. $stmt -> execute();
    5. $stmt -> close();
     
  10. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.681
    Симпатии:
    277
    Тема сисек не раскрыта.
    Ну или размер маловат.
     
  11. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.681
    Симпатии:
    277
    @kris1412, почему у тебя zakaznum - это строка, а dates - это число?
    Используй методы обработки ошибок https://www.php.net/manual/ru/mysqli.error.php и еже с ними.
    Попробуй передать сначала единственное значение zakaznum и как только запрос отработает прибавляй остальные поля по одному.
     
  12. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    @Valick выдает ошибку, даже с одним значением zakaznum :Fatal error</b>: Uncaught Error: Call to a member function prepare() on null in C:
     
  13. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.681
    Симпатии:
    277
    @kris1412, тип передаваемого значения какой? тип поля в БД какой?
     
  14. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    @Valick в бд varchar
    упростил до одного значения и все равно выдает ошибку
    Код (Text):
    1.  
    2. $data=["E_mail"=>"admin@admin"];
    3.  
    4. $sql->query("UPDATE `orders` SET `email`= ?");
    5. $stmt = $mysqli -> prepare($sql);
    6. $stmt->bind_param("s",$data['E_mail']);
    7. $stmt -> execute();
    8. $stmt -> close();
    9. print_r($data);
    10. }
     
  15. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.681
    Симпатии:
    277
    kris1412 нравится это.
  16. kris1412

    kris1412 Новичок

    С нами с:
    15 авг 2019
    Сообщения:
    18
    Симпатии:
    0
    урааа я все токи добился результата, все заработало, всем спасибо за помощь
    $msg = file_get_contents("php://input");
    Код (Text):
    1. $msg =  file_get_contents("php://input");
    2. $data = json_decode($msg,true);
    3. $stmt = mysqli_prepare($sql,"UPDATE `orders` SET `email`= ?, `phone` =?");
    4. mysqli_stmt_bind_param($stmt, "ss", $data[0]['E_mail'], $data[0]['phone']);
    5. mysqli_stmt_execute($stmt);
    6. mysqli_stmt_close($stmt);