Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP+;AJAX_Php_Jquery_Mysql_Ajax - Fatal编程技术网

如何使用PHP+;AJAX

如何使用PHP+;AJAX,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,有很多类似的问题,但我的问题有点复杂 我有一个名为movies的表,我使用下面的代码在循环中显示数据: <?php // LISTS MOVIES ORDERED BY RELEASE DATE -- LATEST MOVIES BY YEAR. $stmt = $connect->prepare("SELECT id, title, releaseDate, posterUrl FROM movies ORDER BY releaseDate DESC LIMIT 4"); $s

有很多类似的问题,但我的问题有点复杂

我有一个名为
movies
的表,我使用下面的代码在循环中显示数据:

<?php 
// LISTS MOVIES ORDERED BY RELEASE DATE -- LATEST MOVIES BY YEAR.
$stmt = $connect->prepare("SELECT id, title, releaseDate, posterUrl FROM movies ORDER BY releaseDate DESC LIMIT 4");
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($movieId, $movieTitle, $movieDate, $moviePoster);
while ($stmt->fetch()) { ?>
    <div class="index-movie">
        <div class="meta-container">
            <img src="<?php echo $moviePoster; ?>" alt="<?php echo $movieTitle; ?>" class="poster">
            <div class="meta">
                <span class="title"><?php echo $movieTitle . ' (' . substr($movieDate, 0, 4) . ')'; ?></span>                       
            </div>
        </div>
        <form method="POST" class="watchlist-form">
            <input type="text" name="watchlist-movie-id" style="display: none;" class="watchlist-movie-id" value="<?php echo $movieId; ?>">
            <input type="submit" class="add-to-watchlist" value="Add to Watchlist" name="add-to-watchlist">
        </form>
    </div>
<?php 
}
$stmt->free_result();
$stmt->close();
?>
watchlist.php
是:

<?php 
require('includes/config.php');
require('includes/auth.php');
$defaultId = 'DEFAULT';
$currentDate = 'now()';
$movieId = $_POST['watchlist-movie-id'];
$stmt = $connect->prepare("INSERT INTO watchlist (id, date, userId, movieId) VALUES (?, ?, ?, ?)");
$stmt->bind_param("ssii", $defaultId, $currentDate, $currentUser, $movieId);
$stmt->execute();
$stmt->close();
?>

我看到的主要问题是AJAX
数据
字段需要是一个对象,否则
$\u POST
值将只包含一个具有提交值的键

var data = 'hi';

$.ajax({
   data: data
});
您应该将代码更新为类似这样的内容,以获得预期的结果

var movieId = $(this).parent().find('.watchlist-movie-id').val();

 $.ajax({
     //...
     data: {
        'watchlist-movie-id': movieId,
     },
     //...
  });
否则,您可以使用以下方式提交整个表单:

$.ajax({
   //...
    data: $(this).parent().serialize(),
   //...
});
我还建议删除隐藏的表单字段元素,只需使用
元素即可,以简化您的生活

<button type="submit" name="watchlist-movie-id" value="<?php echo $movieId; ?>">Add to Watchlist</button>

旁注:
$currentDate='now()'为什么不直接在查询中传递它呢?您这样做有什么特别的原因吗?
$currentUser
分配到哪里了?@Fred ii-,没有特别的原因说明为什么我现在分配了一个变量(),认为这样的变量在查询中看起来更干净。至于$currentUser,它来自auth.php,它保存当前用户的用户id。当您检查DOM时,电影id是否显示在您的div属性中?如果是这种情况,那么在发送ajax请求时,您是否在服务器上接收到id?如果你能调试这个,我们可以提供更多的帮助。欢呼像一种魅力。非常感谢你!
$.ajax({
   //...
    data: $(this).parent().serialize(),
   //...
});
<button type="submit" name="watchlist-movie-id" value="<?php echo $movieId; ?>">Add to Watchlist</button>
$('button[name="watchlist-movie-id"]').on('click', function(e){
     e.preventDefault();
     var movieId = $(this).val();
     $.ajax({
       //...
        data: {
          'watchlist-movie-id': movieId,
       },
       success: function() {
             $(this).hide();
       },
       //...
    });
});