【问题标题】:redirect when condition met满足条件时重定向
【发布时间】:2011-04-12 09:28:29
【问题描述】:

计数达到 13 后我无法重定向。

我有一堆图像,用户可以单击这些图像添加到他们在数据库中的列表中,当他们单击时,会触发一个 on click js 脚本并触发 updatelist.php。

该部分工作正常,在 updatelist.php 中我需要将其插入,然后检查表以查看其计数是否达到 13,如果是,则需要重定向到新页面。

插入工作正常,但没有重定向。下面是我的 updatelist.php 代码

<?php
include('connect.php');
session_start();
$username=$_SESSION['username'];

$image = $_GET['image'];


    $query = mysql_query("SELECT * FROM tbl_movies cross join tbl_users WHERE image_on = '$image' and username = '$username'");
    while ($row = mysql_fetch_assoc($query))
                        {
                            $movieid = $row['id'];
                            $userid = $row['UserID'];
                        }
    $query2 = mysql_query("select * from tbl_movies cross join tbl_users where image_off = '$image' and username = '$username'");   
    while ($row2 = mysql_fetch_assoc($query2))
                                {
                                    $mid = $row2['id'];
                                    $uid = $row2['UserID'];
                                }   

    $numrows = mysql_num_rows($query);
    $numrowz = mysql_num_rows($query2);

        if ($numrows!=0)
            {
                $queryInsert = mysql_query("insert into tbl_user_lists (userid_fk,movie_id_fk) values ('$userid','$movieid')"); 

                $query5=mysql_query("select l.* from tbl_user_lists as l join tbl_users on l.userid_fk=tbl_users.UserID where username='$username'");
                $updatecount = mysql_num_rows($query5);
                if ($updatecount == 13)
                    {
                        header('Location: http://localhost/main.php');
                    }
            }
        else if ($numrowz!=0)   
            {
                $queryUpdate = mysql_query("delete from tbl_user_lists where userid_fk = '$uid' and movie_id_fk = '$mid'");
            }




?> 

下面是调用上述php页面的主页面脚本

<script>
$(function(){
    $('.img-swap').live('click', function() {
        var _src = $(this).attr('src');
        if (-1 == _src.indexOf('_on')) {
            $(this).attr('src',_src.replace('_off','_on')).removeClass('off');
        } else {
            $(this).attr('src',_src.replace('_on','_off')).addClass('on');
        }

        //  Update server
        $.get( 'updatelist.php?image='+escape($(this).attr('src')));
        $(this).toggleClass("on");
    });
});
</script>    

【问题讨论】:

  • 请修复您的帖子(代码突出显示)。
  • “触发 updatelist.php”是什么意思?您是通过 AJAX 调用并检查响应吗?或者您是否通过 javascript 将用户重定向到您的 updatelist.php?
  • 它是一个 jquery 脚本,当用户单击图像时在主页上调用它,jquery 获取图像的名称并将其发送到 updatelist.php 以更新数据库中的表
  • 您是否尝试过将其作为一个直接的 POST 事件,即在 if( isset( $_POST'button_name'] ) ) { ... } 块中包围它?如果换句话说,请先验证它在没有 JavaScript/jQuery 的情况下是否可以工作,然后再使其成为 Ajax-y。

标签: php


【解决方案1】:

你想要:

    if ($updatecount == 13)
        {
            header('Location: main.php');
            exit();
        }

基本上你是在做一个赋值运算符而不是一个比较,你应该总是在重定向后调用 exit()。

【讨论】:

  • 标头(位置)应该是绝对路径。现在懒得去搜了,但是应该的。 :)
  • @adam,我认为应该是 url,而不是路径。
  • 糟糕的是,在我的母语中,path/url 在这个含义上并没有太大的区别。无论如何,它应该是绝对的 url 。来自 php.net/header.php:HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path, but some clients accept relative URIs
  • 我已经添加了这些,但是当计数达到 13 时它仍然没有重定向。另外,我已经删除了检查页面顶部附近计数是否
  • 只是好奇。标头位置提供 301、302 或其他重定向?
【解决方案2】:

所以你是通过 JS 调用远程 PHP 脚本?我认为向 JS 代码发送标头响应不会在调用它的页面中执行任何操作。您可以让您的 PHP 脚本根据其结果返回一个预先确定的代码,然后如果返回“max”代码,则在 JS 代码中重定向。

类似的东西(假设 jQuery 可用)

<script>
$.get( "your_php_script.php" , function (response){
     if( response == "max" ) {
          // redirect
          window.location="other_page.php";
     }}
);
</script>

【讨论】:

  • 我已将此添加到我的主页,但没有得到预期的效果。我已经拥有调用相同 updatelist.php 页面的 jquery 是否重要?
  • 哦,我应该提到上面的 sn-p 并不是按原样使用的。抱歉,我没有将上述内容视为功能。它类似于我曾经拥有的登录脚本。至于你的问题,我得看看你的 HTML 源代码在做什么。也许你可以在你原来的问题中发布一些?
  • 很抱歉。我充其量是编码新手,我对 js 和 jquery 一无所知。我已经从调用 updatelist.php 页面的主页添加了 jquery 脚本。它在我原始帖子的底部。
【解决方案3】:

可能导致该问题的一些问题:

  1. Location:之后你应该写一个完整的url;
  2. if ($updatecount = 13) 将始终返回 true,请改用比较运算符 (if ($updatecount == 13));
  3. 重定向后不应执行任何代码:在标题行后添加exit;
  4. 确保根本没有输出,否则php 将无法设置标题:您的&lt;?php 开始标记是文件中的第一件事吗?之前没有html吗?;
  5. 作为计数测试,如有疑问,请始终在每次循环后输出结果:这将有助于避免在开始使用 php 时出现多个错误,尤其是错误。

另外,我不知道您的应用程序是否可以公开访问:在这种情况下,请记住,对于他们可以发布的值,用户并没有绑定到您的 html 中的选项,因此请转义您的查询(或使用准备好的statements) 来避免 sql 注入的风险。

【讨论】:

  • 当我尝试 2 时,如果计数低于 13,它会导致它不插入记录。感谢关于 sql 注入的建议,在我能够获得之后添加功能正常。
  • 对不起,我在第 2 点犯了一个错误(已更正)。另外,最外面的括号不被视为代码的一部分。
  • 现在我想了想,最后两个条件(if,else if)检查相同的条件。第二个永远不会是真的,这样。
猜你喜欢
  • 2023-02-22
  • 2017-02-20
  • 1970-01-01
  • 2022-01-21
  • 2014-09-15
  • 2021-10-27
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
相关资源
最近更新 更多