Обновление PDO завершается с помощью Ajax, хотя переменные POST передаются правильно - PullRequest
0 голосов
/ 02 мая 2018

Отправка формы и обновление базы данных выполняются по желанию в автономном режиме. Когда используется ajax, он сообщает, что переданы правильные переменные POST, но я получаю исключение PDO, я не понимаю, как это исправить, потому что он работает правильно, когда не создает сообщение ajax. Новое для PDO и Ajax.

    <form id="privacy" action="privacy.php" method="post">
        <input type="hidden" name="id" class="id" value="<?php echo $user->id; ?>">
        <label>
            <input type="radio" name="name" class="name" value="private" />
            <img src="img/lock.png">
        </label>
        <label>
            <input type="radio" name="name" class="name" value="friends"/>
            <img src="img/friends.png">
        </label>
        <label>
            <input type="radio" name="name" class="name" value="fof"/>
            <img src="img/friends-of-friends.png">
        </label>
    </form>

    <script>
        $(function() {
        $("#privacy").change(function() {
            var name = $(".name:checked").val();
            var id = $(".id").val();
            $.ajax({
                type: "POST", 
                url: "privacy.php",  
                data: {"name":name, "id":id},  
                success: function() { 
                    alert("form submitted: "+ id +" name:" + name);
                    }
                });
             });
         });
    </script>

Функция обновления

    public function Privacy($id,$name)
{

        // Building INSERT QUERY
        $sql = "UPDATE user_privacy";

        // keep only wanted fields (change this) to 'field' => value
        $data = array_filter($_POST);

        $id = $_POST['id'];
        $cols = array('id' => 'id','name' => 'name');

        $count = 0;
        $i = 0;

        foreach ($data as $key => $value) {
            if(array_key_exists($key, $cols) && $cols[$key] != 'id'){
                $sql .= ' SET ' . $cols[$key] . ' = :'. $cols[$key] . ' WHERE parent_id = :id';
                unset($data[$key]);
                $count = count($data);

            } else { 
                if($count !== 0){
                   $i++;
                   $sql .= " $key = '$value' ";
                   $sql .= $i == $count ? " " : " AND ";
                }

            }
        }
        $query = $this->db->prepare($sql);
        $query->bindParam("id", $id, PDO::PARAM_STR);
        $query->bindParam(':'.$key, $value, PDO::PARAM_STR);
        $query->execute();
}

   and the exception

Неустранимая ошибка : необработанное исключение PDO: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'id =' 1 '' в строке 1 в C: \ xampp2 \ htdocs \ platform \ library \ library.php: 151 Трассировки стека: 0 C: \ xampp2 \ htdocs \ platform \ library \ library.php (151): PDO-> prepare ('ОБНОВЛЕНИЕ user_pri ...') 1 C: \ xampp2 \ htdocs \ platform \ privacy.php (24): DemoLib-> Конфиденциальность ('1', 'private', NULL) 2 {главная} добавляется в C: \ xampp2 \ htdocs \ platform \ library \ library.php в строке 151

Так, как я могу иметь ошибку там, если она обновляется должным образом, прежде чем я добавляю пост отправки ajax. Я вижу, что ajax передает данные поста ('1', 'private', NULll). Так растерялся!

1 Ответ

0 голосов
/ 08 мая 2018

Так что после нескольких дней работы над этим я наконец-то понял. До сих пор понятия не имею, в чем проблема, но теперь это рабочий код. Как указывалось ранее, всегда будет только одно другое поле, кроме поля «id», но другое поле является динамическим ... Поскольку я буду развивать дальнейшие навыки, я определенно буду модифицировать это далее, чтобы очистить его и структурировать должным образом.

    $(function() {
        $("#privacy").change(function() {
             var uname = $(".name:checked").val();
             var uid = $(".id").val();
        $.ajax({
            type: "POST", 
            url: "privacy.php",  
            data: {"name":uname, "uid":uid},  
            success: function() { 
                }
            });
       });
    });

И обработка ....

    $uid = $_POST['uid'];
    $sql = "UPDATE user_privacy";
        $data = array_filter($_POST);
        foreach ($data as $key => $value) {
            if($key != 'uid'){  
                $field = $key;
                $fieldValue = $value;
                $sql .= ' SET '. $key.' = :'.$key;
            }
        }
        $sql .= ' WHERE parentid = :uid';

        $query = $db->prepare($sql);
        $query->bindParam(':uid', $uid, PDO::PARAM_STR);
        $query->bindParam(':'.$field, $fieldValue, PDO::PARAM_STR);
        $query->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...