2016-10-24 4 views
1

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

Я получаю сообщение об ошибке 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(); 

$ жулик переменная ошибка:

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

$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'] : ""); 
+0

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

+0

Я пытаюсь получить информацию с сервера в файл php в AJAX в DOM. Я хочу вернуть все данные echo'd из моего php-файла в мой AJAX в dataString. – Paul

+0

'dataString' - строка запроса, которую вы отправляете ** в ** PHP-файл –

ответ

0

У вас есть эта ошибка, потому что переменная javascript dataString не определена :)

Как вы назвали функцию 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. Я думаю, что есть еще одна проблема :)

+0

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

+0

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

+0

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

Смежные вопросы