0

I have a PHP page that works a treat, it also has some JavaScript at the top, i between the HEAD tags. My PHP uses the "header("location: /");" code to redirect users back to index.php at random points. I have narrowed down my cannot modify header information errors to this one piece of javascript, if i take it out it works fine, when i put it back it fails.

I know the error is caused by html being output before something else.. but i have no idea how to even read or understand JavaScript. could someone point me to what i can or should change?

<script type="text/javascript">
    $(document).ready(function(){
    //jCarousel Plugin
    $('#carousel').jcarousel({
        vertical: true,
        scroll: 1,
        auto: 2,
        wrap: 'last',
        initCallback: mycarousel_initCallback
    });
    //Front page Carousel - Initial Setup
    $('div#slideshow-carousel a img').css({'opacity': '0.5'});
    $('div#slideshow-carousel a img:first').css({'opacity': '1.0'});
    $('div#slideshow-carousel li a:first').append('<span class="arrow"></span>')
    //Combine jCarousel with Image Display
    $('div#slideshow-carousel li a').hover(
        function(){
            if (!$(this).has('span').length){
                $('div#slideshow-carousel li a img').stop(true, true).css({'opacity': '0.5'});
                $(this).stop(true, true).children('img').css({'opacity': '1.0'});
            }   
        },
        function(){
            $('div#slideshow-carousel li a img').stop(true, true).css({'opacity': '0.5'});
            $('div#slideshow-carousel li a').each(function(){
                if ($(this).has('span').length) $(this).children('img').css({'opacity': '1.0'});
            });
        }
    ).click(function(){
        $('span.arrow').remove();        
        $(this).append('<span class="arrow"></span>');
        $('div#slideshow-main li').removeClass('active');        
        $('div#slideshow-main li.' + $(this).attr('rel')).addClass('active');   
        return false;
    });
});
//Carousel Tweaking
function mycarousel_initCallback(carousel){
    // Pause autoscrolling if the user moves with the cursor over the clip.
    carousel.clip.hover(function(){
        carousel.stopAuto();
    }, function(){
        carousel.startAuto();
    });
}
</script>
medoix
  • 1,189
  • 2
  • 16
  • 36
  • I do not see any PHP code inside this javascript. Is this the exact same code you have inside your php file or did you copy the above after doing a `view-source` of the php page? – Salman A Jan 20 '11 at 07:28

3 Answers3

1

You cannot have header('Location: /'); anywhere in between. It should be sent before any output.

Read the it here : http://php.net/manual/en/function.header.php

If you want to redirect users afterwards, use HTML redirect.

something like this: <meta http-equiv="Refresh" content="5;url=http://www.abc.com" />

If I do understand your question, this has nothing to do with the jQuery code you have put in.

UltraInstinct
  • 43,308
  • 12
  • 81
  • 104
  • my page contains html and php all the way throughout. the header(location: /"); is inside a if statement that either does a function that contains the header function or displays html in wich case i close the php ?> display the html and then open the – medoix Jan 20 '11 at 05:49
  • Every single *character* that appears outside the `` tags is sent to the browser. And having that PHP redirect code after any output, will simply break things. You could also use javascript for that redirect stuff, if you wish to redirect upon some user input. – UltraInstinct Jan 20 '11 at 06:04
  • Sorry i must be missing somethign really simple here, but if i remove that JavaScript from my header.php everything works 100%, as soon as i put it back in everytime the PHP tries to redirect it error's... – medoix Jan 20 '11 at 06:13
  • Can you post the PHP code minus unwanted stuffs ? – UltraInstinct Jan 20 '11 at 06:21
1

You can't have any HTML before calling header("Location ...

Even spaces will break it, your PHP tag should be the first character in your file if you want to use the header location command eg

---------
<?php
  //your header location code
?>
---------

Anything between the dotted lines which represents your file and your PHP tags will break header location.

Jan Vladimir Mostert
  • 12,380
  • 15
  • 80
  • 137
  • my page contains html and php all the way throughout. the header(location: /"); is inside a if statement that either does a function that contains the header function or displays html in wich case i close the php ?> display the html and then open the – medoix Jan 20 '11 at 05:51
  • That's exactly the problem, as soon as you output ANY html, your break the redirection. Line 0 Character 0 in your file should be the opening PHP tag and when you close that PHP tag, you can't open it again after that, else it will break redirection. – Jan Vladimir Mostert Jan 22 '11 at 20:33
1

Like other's have said, it's not the jquery code itself. There's content outside of <?php ?> tags, before your header() call that you need to get rid of. If you cannot rework your code to fix this, have a look ar output buffering. That will allow you to output content and still issue a header() call afterwards.

Sander Marechal
  • 22,978
  • 13
  • 65
  • 96