За последние 24 часа нас посетили 16487 программистов и 1562 робота. Сейчас ищут 2115 программистов ...

команда UPDATE

Тема в разделе "PHP и базы данных", создана пользователем xcoder77, 15 июл 2017.

  1. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    Приветствую! Суть проблемы такова: форма отправляет данные методом POST, далее значение взятое из формы командой UPDATE вставляется в нужный столбец таблицы. В итоге в таблицу вставляется пустое место. Значение используемой переменной выводится функцией var_dump т.е. она не пустая.
    Если использую переменную взятую не из массива POST, то все работает. Может быть проблема в том что работаю на open sever'е ? Далее выкладываю код:
    Код (Text):
    1. <?php
    2.     $project = count($projectes);
    3.  
    4.        foreach ($projectes as $project){
    5.    $inpt = filter_input(INPUT_POST,'name1');
    6.    echo "<pre>";
    7.    var_dump($inpt);
    8.    echo "</pre>";
    9.        $com =  'UPDATE `project` SET `title` = "'.$inpt.'" WHERE `project`.`id` = 1;';
    10.        $sql = mysqli_real_query($link, $com);
    11.         if ($sql) {
    12.         echo "<p>Данные успешно обновлены</p>";
    13.     } else {
    14.         echo "<p>Произошла ошибка.</p>";
    15.     }
    16.         $new = $project['title'];
    17.          echo "<pre>";
    18.         echo "новое значение:", $new;
    19.          echo "</pre>";
    20.    }
    21. ?>
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Для начала посмотри саму строку запроса
    PHP:
    1. var_dump($com );
     
  3. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    ".$inpt." - убрал у переменной в запросе ' ' и заметил что значения int т.е. числа стали успешно заноситься в базу, а как только пишу строку сразу ошибка.
     
  4. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @xcoder77, как обстоят дела с кодировкой символов в базе и в подключении к базе?
     
  5. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    Код (Text):
    1. <?php
    2. ini_set("error_reporting", E_ALL);
    3. ini_set("display_errors", 1);
    4. ini_set("display_startup_errors",1);
    5.  
    6. $link = mysqli_connect('localhost','root','', 'my_blog');
    7.  
    8. If (mysqli_connect_errno())
    9. {
    10.     echo "нет соединения с БД(".mysqli_connect_errno()."): ".mysqli_error()."";
    11. }
    вот так обстоят дела с подключением, ошибок нет
    --- Добавлено ---
    в настройках open server стоит mySQL 5.5
     
  6. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @xcoder77, После подключения выполните SQL-запрос:
    set names utf8

    или
    PHP:
    1. mysqli_set_charset($link, "utf8");
     
    #6 Maputo, 16 июл 2017
    Последнее редактирование: 16 июл 2017
  7. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    mysqli_query() expects at least 2 parameters, 1 given in C:\OpenServer\domains\veronika.loc\auth\change.php on line 10
    ошибка при запросе
     
  8. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @xcoder77, верните кавычки обратно.
    а лучше покажите 9ю и 10ю строчку.
     
    #8 Maputo, 16 июл 2017
    Последнее редактирование: 16 июл 2017
  9. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    Код (Text):
    1. <?php
    2. ini_set("error_reporting", E_ALL);
    3. ini_set("display_errors", 1);
    4. ini_set("display_startup_errors",1);
    5.  
    6.  
    7. $link = mysqli_connect('localhost','root','', 'my_blog');
    8.  mysqli_set_charset($link, "utf8");
    9. If (mysqli_connect_errno())
    10. {
    11.     echo "нет соединения с БД(".mysqli_connect_errno()."): ".mysqli_error()."";
    12. }
    кавычки вернул, ошибки не возникает при таком запросе, но значения все равно пустые вставляет
     
  10. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Так какая кодировка стоит в таблице в поле title. Хорошо бы дамп таблицы (только структуру) глянуть.
     
  11. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    utf8_general_ci
     
  12. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Только латинские символы пробовали вводить?
     
  13. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    и rus и lat все попробовал
     
  14. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Попробуйте вместо вот этого:
    PHP:
    1. $inpt = filter_input(INPUT_POST,'name1');
    Написать вот это:
    PHP:
    1. $inpt = $_POST['name1'];
     
  15. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    это был мой первый вариант))
     
  16. Познающий php

    Познающий php Новичок

    С нами с:
    23 мар 2017
    Сообщения:
    381
    Симпатии:
    74
    Проверь какой тип данных пытаешься сохранить и какой тип данных в столбце. У меня есть версия, что они не совпадают :D

    лол o_O
     
  17. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    столбец varchar(255), а переменная string или int,смотря что ввести
     
  18. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @xcoder77, А как заполняется массив $projectes?
     
  19. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Form
    HTML:
    1. <form action="" method="post">
    2. <p>Text <input type="text" name="name1" /></p>
    3. <p><input type="submit" /></p>
    4. </form>
    PHP
    PHP:
    1.  $name1 = filter_input(INPUT_POST,'name1',FILTER_SANITIZE_STRING);
    2.     $com =  "UPDATE project SET title = '{$name1}' WHERE project.id = 1";
    3.  
    4.     $mysqli = new mysqli("localhost", "root", "", "my_blog");
    5.         if($mysqli->connect_errno) {
    6.             printf("Не удалось подключиться: %s\n", $mysqli->connect_error);
    7.             exit();
    8.         }
    9.         if($mysqli->query($com)) {
    10.             echo "UPDATE прошел успешно";
    11.         } else {
    12.              printf("Ошибка: %s\n", $mysqli->error);
    13.         }
     
  20. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    хмм... тоже самое вставляет пустоту
    --- Добавлено ---
    Maputo
    а вот как создается массив:
    Код (Text):
    1.  
    2.  function getProject()
    3. {
    4.     global $link;
    5.     $sql = "SELECT * FROM `project`";
    6.     $result = mysqli_query($link, $sql);
    7.     $projectes = mysqli_fetch_all($result,1);
    8.    // echo'<pre>';
    9.     //var_dump($projectes);
    10.      //echo'</pre>';
    11.    return $projectes;
    12. }
    13. $projectes = getProject();
     
  21. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @xcoder77, получается у Вас UPDATE делается столько раз, сколько записей в таблице? И Каким образом в $project['title'] попадает новое значение title? В нем ведь хранится прежнее значение.

    И можно, все-таки, увидеть дамп таблицы (только структуру)?
     
  22. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    Вы все правильно поняли:)

    table.jpg
     
  23. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Так как в $project['title'] попадает новое значение (внутри цикла)?
     
  24. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    вот так
    Код (Text):
    1.  
    2.  
    3. $inpt = filter_input(INPUT_POST,'name1');
    4.    echo "<pre>";
    5.    var_dump($inpt);
    6.    echo "</pre>";
    7.        $com =  'UPDATE `project` SET `title` = "'.$inpt.'" WHERE `project`.`id` = 1;';
    8.        $sql = mysqli_real_query($link, $com);
    9.         if ($sql) {
    10.         echo "<p>Данные успешно обновлены</p>";
    11.     } else {
    12. [        echo "<p>Произошла ошибка.</p>";
    13.     }
     
  25. xcoder77

    xcoder77 Новичок

    С нами с:
    15 июл 2017
    Сообщения:
    28
    Симпатии:
    1
    В результате экспериментов я понял, что данные не вставляются в таблицу только в том случае если я бери их из массива $_POST, если поставить любую другую переменную то все работает как надо. Почему это происходит пока не понял... буду думать