Установка переменной для обработки данных

#php #jquery #ajax #get

#php #jquery #ajax #получить

Вопрос:

Я создаю систему пользовательских комментариев. Прямо сейчас я пытаюсь SELECT получить последний комментарий пользователя, а затем автоматически получить новый комментарий с помощью AJAX.

Я получаю ошибку, которая dataString не определена. Я не знаю, как определить это в моем php. Поскольку я повторяю все это:

 echo '<div class="comment-post-box">';
                echo $commenter_img;
                echo '<div class="comment-post-username">'.$comment_username. '</div>';
                echo '<div>'.$comment_date. '</div>';
                echo '<div class="comment-post-text">'.$home_comments. '</div>';
                echo '</div>';
  

Мне просто установить все это в dataString или как еще мне это сделать?

Полный код:

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

 <form action="" method="POST" id="comment-form">
            <textarea id="home_comment" name="comment" placeholder="Write a comment..." maxlength="1000" required></textarea><br>
            <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
            <input id="comment-button" name="submit" type="submit" value="Post">
        </form>
        <div id="comment-container">
<?php
$select_comments_sql = "
    SELECT c. *, p.user_id, p.img
    FROM home_comments AS c
    INNER JOIN (SELECT max(id) as id, user_id 
                FROM profile_img 
                GROUP BY user_id) PI
      on PI.user_id = c.user_id
    INNER JOIN profile_img p
      on PI.user_id = p.user_id
     and PI.id = p.id
    ORDER BY c.id DESC
";

  if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
        $select_comments_stmt->execute();
        if (!$select_comments_stmt->errno) {
            //echo "error";
        }
        $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date, $commenter_user_id, $commenter_img);
    //var_dump($select_comments_stmt);  
        $comment_array = array();
        while ($select_comments_stmt->fetch()) {
            $comment_array[] = $comment_user_id;
            $comment_array[] = $comment_username;
            $comment_array[] = $home_comments;
            $comment_array[] = $comment_date;
            $comment_array[] = $commenter_user_id;
            $comment_array[] = $commenter_img;
            $commenter_img = '<img class="home-comment-profile-pic" src=" '.$commenter_img.'">';
            if ($home_comments === NULL) {
                echo 'No comments found.';
            } else {
                echo '<div class="comment-post-box">';
                echo $commenter_img;
                echo '<div class="comment-post-username">'.$comment_username. '</div>';
                echo '<div>'.$comment_date. '</div>';
                echo '<div class="comment-post-text">'.$home_comments. '</div>';
                echo '</div>';
            }
        }
  }
  

AJAX-файл

 function commentRetrieve(){

        $.ajax({ 
                url: "ajax-php/comment-retrieve.php",
                type: "get",
                data: dataString,
                success: function (data) {
                //  console.log(data);
                    if (data == "Error!") {
                        alert("Unable to retrieve comment!");
                        alert(data);
                    } else {
                        $('#comment-container').prepend(data);
                    }
                },
                error: function (xhr, textStatus, errorThrown) {
                    alert(textStatus   " | "   errorThrown);
                    console.log("error"); //otherwise error if status code is other than 200.
                }
            });


    }
    setInterval(commentRetrieve, 300);
  

PHP-файл

 $user = new User();

function selectNewComment() {

//Get the last insert id
    $select_comments_sql = "
    SELECT c. *, p.user_id, p.img
    FROM home_comments AS c
    WHERE c.id=$last_id
    INNER JOIN (SELECT max(id) as id, user_id 
                FROM profile_img 
                GROUP BY user_id) PI
      on PI.user_id = c.user_id
    INNER JOIN profile_img p
      on PI.user_id = p.user_id
     and PI.id = p.id
    ORDER BY c.id DESC
";

  if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
        $select_comments_stmt->execute();
        if (!$select_comments_stmt->errno) {
            //echo "error";
        }
        $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date, $commenter_user_id, $commenter_img);    
        $comment_array = array();
        while ($select_comments_stmt->fetch()) {
            $comment_array[] = $comment_user_id;
            $comment_array[] = $comment_username;
            $comment_array[] = $home_comments;
            $comment_array[] = $comment_date;
            $comment_array[] = $commenter_user_id;
            $comment_array[] = $commenter_img;
            $commenter_img = '<img class="home-comment-profile-pic" src=" '.$commenter_img.'">';
            if ($home_comments === NULL) {
                echo 'No comments found.';
            } else {
                echo '<div class="comment-post-box">';
                echo $commenter_img;
                echo '<div class="comment-post-username">'.$comment_username. '</div>';
                echo '<div>'.$comment_date. '</div>';
                echo '<div class="comment-post-text">'.$home_comments. '</div>';
                echo '</div>';
            }
        }
    }
}
}   

selectNewComment();
  

Ошибка переменной $con:

мой файл инициализации:

 $servername = 'localhost';
$usernameCon = 'actual';
$passwordCon = 'actual';

try {   
    $con = new PDO('mysql:host='.$servername.';dbname=actual', $usernameCon, $passwordCon);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
    $user_id = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
  

Комментарии:

1. Каким должно быть dataString ? Какую строку запроса вы пытаетесь передать на сервер? Я не вижу ничего $_GET в вашем PHP

2. Я пытаюсь получить информацию с сервера в мой php-файл, из AJAX в DOM. Я хочу вернуть все эхо-фрагменты информации из моего php-файла в мой AJAX в dataString.

3. dataString это строка запроса, которую вы отправляете в PHP-файл

4. О, ну, должно быть, я ввел это неправильно. Как я могу передать отраженную информацию из php в ajax?

5. Вы делаете это хорошо. Просто определите dataString , чтобы ваш код не выдавал никаких ошибок. Вы даже можете удалить data: dataString, из своего кода, если вы ничего не отправляете в файл PHP…

Ответ №1:

Вы получили эту ошибку, потому что переменная dataString в javascript не определена 🙂

Как вы вызвали функцию javascript? Нужно ли указывать какие-либо данные при вызове страницы через ajax?

Решение — укажите идентификатор (например)

 $.ajax({ 
  url: 'ajax-php/comment-retrieve.php',
  type: 'get',
  data: {id: 36}, // for example, id #36. You can retrieve this data on your PHP page via $_GET['id']
  success: function (data) {
    /* [...] rest of your code */
  }
});
  

Другое решение — удалить данные/dataString

 $.ajax({ 
  url: 'ajax-php/comment-retrieve.php',
  type: 'get',
  success: function (data) {
    /* [...] rest of your code */
  }
});
  

То есть: я вижу $last_id переменную в вашем $select_comments_sql . Я думаю, что есть еще одна проблема 🙂

Комментарии:

1. Да, вы правы $last_id выдает ошибку. Этого нет на моей странице комментариев? Не уверен, почему?

2. Каков источник этого значения? Идентификатор комментария? Если да, используйте a: selectNewComment($_GET['id']); (проверьте, существует ли переменная, и защитите от любых атак) и: function selectNewComment($last_id) { ... } и при вызове ajax add data: {id: 36} Конечно, вам придется автоматически заполнять if id (здесь # 36) с помощью php-кода или javascript

3. Причина ошибки в том, что переменная не определена. Кроме того, внутри функции вы не можете использовать внешние переменные (некоторые исключения, такие как $_GET/POST/REQUEST/COOKIES/ENV / SESSION).

4. Неважно, код $last_id был старым. Я изменил свой запрос select, но теперь он выдает ошибку для моей переменной $ con.. (мое подключение). У меня есть мое соединение в моем файле инициализации, которое я вызываю сразу после кода вызова ошибки. Я только что опубликовал свой $ con в своем вопросе. Почему это должно вызывать ошибку для этого?

5. Оливарес, Это дает notice: undefined variable con и Fatal Error: call to a member function prepare() on a non-object .