SitePoint Sponsor

User Tag List

Results 1 to 22 of 22
  1. #1
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    php version problem?

    Hi, I'm using php ver. 4.1.1 and working on a guestbook with mysql database. After I add some comments to the guestbook and hit submit, my browser returns error message :
    Code:
    Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\voxmusic\guestbook.php:2) in c:\apache\htdocs\voxmusic\guestbook.php on line 42
    , but after I 'go back' to 'guestbook.php' and reload the page, the entries I added are there. Here is the line 42 from guestbook.php :
    PHP Code:
    // redirect to current page so if we click the refresh button 
    // the form won't be resubmitted ( as that would make duplicate entries )
    header('Location: ' $_SERVER['REQUEST_URI']); 
    I'm not a php- , nor a sql - expert, so I need some help with that....
    THANKS

  2. #2
    SitePoint Wizard cmuench's Avatar
    Join Date
    Jul 2005
    Location
    At my computer
    Posts
    2,251
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    first off make sure that you have no whitespace at the beginning of your file.

    If that didn't work try the following.
    PHP Code:
    ob_start();
    // your code here
    ob_end_flush(); 
    This creates an "output buffer". PHP waits for all of your page to be generated, and the displays the output (ob_end_flush()). As always, there is more information on these functions at php.net

  3. #3
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks cmuench, but didn't help any of your suggestions...

  4. #4
    Who turned the lights out !! Mandes's Avatar
    Join Date
    May 2005
    Location
    S.W. France
    Posts
    2,496
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    As cmench was pointing at, the headers command must be situated before any output to the browser, this includes any PHP lines that are just blank.

    Try posting your code, so we can have a look
    A Little Knowledge Is A Very Dangerous Thing.......
    That Makes Me A Lethal Weapon !!!!!!!!

    Contract PHP Programming

  5. #5
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    OK, hope you will figure out what's wrong here
    PHP Code:
    // include the database configuration and
    // open connection to database
    include 'library/config.php';
    include 
    'library/opendb.php';

    // check if the form is submitted
    if(isset($_POST['btnSign']))
    {
    // get the input from $_POST variable
    // trim all input to remove extra spaces
    $name    trim($_POST['txtName']);
    $email   trim($_POST['txtEmail']);
    $url     trim($_POST['txtUrl']);
    $message trim($_POST['mtxMessage']);
        
    // escape the message ( if it's not already escaped )
        
    if(!get_magic_quotes_gpc())
        {
            
    $name    addslashes($name);
            
    $message addslashes($message);
        }
        
    // if the visitor do not enter the url
    // set $url to an empty string
        
    if ($url == 'http://')
        {
        
    $url '';
        }
       
    // prepare the query string
    $query "INSERT INTO guestbook (name, email, url, message, entry_date) " .
    "VALUES ('$name', '$email', '$url', '$message', current_date)";

    // execute the query to insert the input to database
    // if query fail the script will terminate         
    mysql_query($query) or die('Error, query failed. ' mysql_error());
        
    // redirect to current page so if we click the refresh button 
    // the form won't be resubmitted ( as that would make duplicate entries )
    header('Location: ' $_SERVER['REQUEST_URI']);
       
    // force to quite the script. if we don't call exit the script may
    // continue before the page is redirected
    exit;


  6. #6
    SitePoint Wizard cmuench's Avatar
    Join Date
    Jul 2005
    Location
    At my computer
    Posts
    2,251
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    PHP Code:
    ob_start();
    // include the database configuration and
    // open connection to database
    include 'library/config.php';
    include 
    'library/opendb.php';

    // check if the form is submitted
    if(isset($_POST['btnSign']))
    {
    // get the input from $_POST variable
    // trim all input to remove extra spaces
    $name    trim($_POST['txtName']);
    $email   trim($_POST['txtEmail']);
    $url     trim($_POST['txtUrl']);
    $message trim($_POST['mtxMessage']);
        
    // escape the message ( if it's not already escaped )
        
    if(!get_magic_quotes_gpc())
        {
            
    $name    addslashes($name);
            
    $message addslashes($message);
        }
        
    // if the visitor do not enter the url
    // set $url to an empty string
        
    if ($url == 'http://')
        {
        
    $url '';
        }
       
    // prepare the query string
    $query "INSERT INTO guestbook (name, email, url, message, entry_date) " .
    "VALUES ('$name', '$email', '$url', '$message', current_date)";

    // execute the query to insert the input to database
    // if query fail the script will terminate         
    mysql_query($query) or die('Error, query failed. ' mysql_error());
        
    // redirect to current page so if we click the refresh button
    // the form won't be resubmitted ( as that would make duplicate entries )
    header('Location: ' $_SERVER['REQUEST_URI']);
       
    // force to quite the script. if we don't call exit the script may
    // continue before the page is redirected
    exit;
    }
    ob_end_flush(); 

  7. #7
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I still got that 'ugly' error message in my browser. Maybe it's a desperate (or stupid?) question, but can be the 'older' PHP ver.4.1.1. the source of my probleme?

  8. #8
    SitePoint Wizard siteguru's Avatar
    Join Date
    Oct 2002
    Location
    Scotland
    Posts
    3,631
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Where is the opening <?php tag line? What is above the // include the database configuration and line in your code?
    Ian Anderson
    www.siteguru.co.uk

  9. #9
    SitePoint Evangelist superuser2's Avatar
    Join Date
    Aug 2006
    Posts
    598
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    A redirect problem will not stop your script from going, just the redirect. The ob_start thing should work for you.

  10. #10
    SitePoint Wizard siteguru's Avatar
    Join Date
    Oct 2002
    Location
    Scotland
    Posts
    3,631
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    True - but I would say using ob_start() method works around a problem rather than fixing the problem.
    Ian Anderson
    www.siteguru.co.uk

  11. #11
    SitePoint Addict ghostme's Avatar
    Join Date
    Feb 2005
    Posts
    371
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Just make sure after the closing php tag which ?> there are no blank lines.

  12. #12
    SitePoint Evangelist superuser2's Avatar
    Join Date
    Aug 2006
    Posts
    598
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by siteguru
    True - but I would say using ob_start() method works around a problem rather than fixing the problem.
    That's true, but sometimes it's necessary.

  13. #13
    SitePoint Wizard siteguru's Avatar
    Join Date
    Oct 2002
    Location
    Scotland
    Posts
    3,631
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by ghostme View Post
    Just make sure after the closing php tag which ?> there are no blank lines.
    Sorry to sound harsh but that is utter twaddle. You can have as many blank lines, filled lines, whatever after the ?> tag!
    Ian Anderson
    www.siteguru.co.uk

  14. #14
    SitePoint Addict ghostme's Avatar
    Join Date
    Feb 2005
    Posts
    371
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ok siteguru, just did some test on some scripts 'am definately wrong on that

  15. #15
    SitePoint Zealot the DtTvB's Avatar
    Join Date
    Jul 2006
    Location
    Thailand
    Posts
    162
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    PHP Code:
    exit;
    }
    ob_end_flush(); 
    Try adding another
    PHP Code:
    ob_end_flush(); 
    before exit;ing the script.

  16. #16
    SitePoint Wizard cmuench's Avatar
    Join Date
    Jul 2005
    Location
    At my computer
    Posts
    2,251
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Can the OP please make sure the first thing in the php file is the <?php and any files that it includes need to be like that too.

  17. #17
    SitePoint Wizard siteguru's Avatar
    Join Date
    Oct 2002
    Location
    Scotland
    Posts
    3,631
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    This is obviously critically important to the OP - (s)he hasn't posted back within the past 24 hours!
    Ian Anderson
    www.siteguru.co.uk

  18. #18
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I appologise for not answering for some time, but I really was busy with some private problems, I will work on my "question" next week and will let You know what I did.

  19. #19
    SitePoint Addict pkSML's Avatar
    Join Date
    Aug 2006
    Location
    Ohio
    Posts
    230
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    This question comes in a little late, but are there any lines of HTML before the opening PHP tag? Any spaces, carriage returns...?
    -Stephen

    Get a LitlURL to this page!

  20. #20
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I will post the entire code of the php file that supppose to let users to input their names, e-mails, web-pages and messages, and also to display all the data from d'base.
    PHP Code:

    ob_start
    ();
    // include the database configuration and
    // open connection to database
    include 'library/config.php';
    include 
    'library/opendb.php';

    // check if the form is submitted
    if(isset($_POST['btnSign']))
    {
    // get the input from $_POST variable
    // trim all input to remove extra spaces
    $name    trim($_POST['txtName']);
    $email   trim($_POST['txtEmail']);
    $url     trim($_POST['txtUrl']);
    $message trim($_POST['mtxMessage']);
        
    // escape the message ( if it's not already escaped )
        
    if(!get_magic_quotes_gpc())
        {
            
    $name    addslashes($name);
            
    $message addslashes($message);
        }
        
    // if the visitor do not enter the url
    // set $url to an empty string
        
    if ($url == 'http://')
        {
        
    $url '';
        }
       
    // prepare the query string
    $query "INSERT INTO guestbook (name, email, url, message, entry_date) " .
    "VALUES ('$name', '$email', '$url', '$message', current_date)";

    // execute the query to insert the input to database
    // if query fail the script will terminate         
    mysql_query($query) or die('Error, query failed. ' mysql_error());
        
    // redirect to current page so if we click the refresh button 
    // the form won't be resubmitted ( as that would make duplicate entries )
    header('Location: ' $_SERVER['REQUEST_URI']);
       
    // force to quite the script. if we don't call exit the script may
    // continue before the page is redirected
    exit;
    }
    ob_end_flush(); 
    Code:
    <html>
    <head>
    <title>Bevitel</title>
    <link rel = "stylesheet"
    	type  = "text/css"
    	href  = "style1.css">
    
    <script language="JavaScript">
    /*
        This function is called when
        the 'Sign Guestbook' button is pressed
        Output : true if all input are correct, false otherwise
    */
    function checkForm()
    {
        // the variables below are assigned to each
        // form input 
        var gname, gemail, gurl, gmessage;
        with(window.document.guestform)
        {
            gname    = txtName;
            gemail   = txtEmail;
            gurl     = txtUrl;
            gmessage = mtxMessage;
        }
        
        // if name is empty alert the visitor
        if(trim(gname.value) == '')
        {
            alert('Kérem írja be a nevét!');
            gname.focus();
            return false;
        }
        // alert the visitor if email is empty or the format is not correct 
        else if(trim(gemail.value) != '' && !isEmail(trim(gemail.value)))
        {
            alert('Kérem érvényes e-mail címet adjon meg, vagy hagyja üresen!');
            gemail.focus();
            return false;
        }
        // alert the visitor if message is empty
        else if(trim(gmessage.value) == '')
        {
            alert('Nincs beírás! ');
            gmessage.focus();
            return false;
        }
        else
        {
            // when all input are correct 
            // return true so the form will submit        
            return true;
        }
    }
    
    /*
    Strip whitespace from the beginning and end of a string
    Input  : a string
    Output : the trimmed string
    */
    function trim(str)
    {
        return str.replace(/^\s+|\s+$/g,'');
    }
    
    /*
    Check if a string is in valid email format. 
    Input  : the string to check
    Output : true if the string is a valid email address, false otherwise.
    */
    function isEmail(str)
    {
        var regex = /^[-_.a-z0-9]+@(([-a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
        return regex.test(str);
    }
    </script>
    </head>
    <body>
    <form method="post" name="guestform">
     <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="ffffff">
      <tr> 
       <td width="125">N&#233v *</td> 
       <td> 
        <input name="txtName" type="text" id="txtName" size="30" maxlength="30"></td>
     </tr>
      <tr> 
       <td>Email</td>
       <td> 
        <input name="txtEmail" type="text" id="txtEmail" size="30" maxlength="50"></td>
     </tr>
      <tr> 
       <td>Weboldal URL</td>
       <td> 
        <input name="txtUrl" type="text" id="txtUrl" value="http://" size="30" maxlength="50"></td>
     </tr>
      <tr> 
       <td>Beir&#225s *</td> 
       <td><textarea name="mtxMessage" cols="80" rows="5" id="mtxMessage"></textarea></td>
     </tr>
      <tr> 
       <td>&nbsp;</td>
       <td> 
        <input name="btnSign" type="submit" id="btnSign" value="Adatok bevitele" onClick="return checkForm();"></td>
     </tr>
    </table>
    </form>
    <?
    // include the database configuration and
    // open connection to database
    include 'library/config.php';
    include 'library/opendb.php';
    
    $query   = "SELECT COUNT(id) AS numrows FROM guestbook";
    $result  = mysql_query($query) or die('Error, query failed. ' . mysql_error());
    $row     = mysql_fetch_array($result, MYSQL_ASSOC);
    $numrows = $row['numrows'];
    ?>
    <table width="830" border="0" cellpadding="2" cellspacing="0" bgcolor="d0e4e4">
    <tr>
    	<td align="left" class="text">
    	<a href="new_entry.php" class="new">&#250j bejegyz&#233s</a>
    	<p class="content">Osszesen : <? print ($numrows); ?> bejegyzes!</p>
    	</td></tr>
    </table><br>
    PHP Code:
    <?php
    // =======================
    // Show guestbook entries
    // =======================

    // how many guestbook entries to show per page
    $rowsPerPage 10;

    // by default we show first page
    $pageNum 1;

    // if $_GET['page'] defined, use the value as page number
    if(isset($_GET['page']))
    {
        
    $pageNum $_GET['page'];
    }

    // counting the offset ( where to start fetching the entries )
    $offset = ($pageNum 1) * $rowsPerPage;

    // prepare the query string
    $query "SELECT id, name, email, url, message, DATE_FORMAT(entry_date, '%d.%m.%Y') ".
             
    "FROM guestbook ".
             
    "ORDER BY id DESC ".            // using ORDER BY to show the most current entry first
             
    "LIMIT $offset$rowsPerPage";  // LIMIT is the core of paging

    // execute the query 
    $result mysql_query($query) or die('Error, query failed. ' mysql_error());

    // if the guestbook is empty show a message
    if(mysql_num_rows($result) == 0)
    {
    ?>
    <p><br>
     <br>Nincs beir&#225s!!!!</p>
    <?php
    }
    else
    {
        
    // get all guestbook entries
        
    while($row mysql_fetch_array($result))
        {
            
    // list() is a convenient way of assign a list of variables
            // from an array values 
            
    list($id$name$email$url$message$date) = $row;

            
    // change all HTML special characters,
            // to prevent some nasty code injection
            
    $name    htmlspecialchars($name);
            
    $message htmlspecialchars($message);        

            
    // convert newline characters ( \n OR \r OR both ) to HTML break tag ( <br> )
            
    $message nl2br($message);
    ?>
    <table width="830" border="1" cellpadding="2" cellspacing="0" bgcolor="ffffff">
     <tr> 
      <td width="110" align="left"> <a href="mailto:<?=$email;?>" class="new"> 
       <?=$name;?>
       </a> </td>
      <td align="right"><small> 
       <?=$date;?>
       </small></td>
     </tr>
     <tr> 
      <td colspan="2"><p class="content">
       <?=$message;?></p>
       <?php
               
    // if the visitor input her homepage url show it
            
    if($url != '')
            {   
                
    // make the url clickable by formatting it as HTML link
                
    $url "<a href='$url' target='_blank'>$url</a>";
    ?>
       <br> <small>Weboldal : <?=$url;?></small> 
       <?php
            
    }
    ?>
      </td>
     </tr>
    </table>
    <br>
    <?php
        
    // end while

    // below is the code needed to show page numbers

    // count how many rows we have in database
    $query   "SELECT COUNT(id) AS numrows FROM guestbook";
    $result  mysql_query($query) or die('Error, query failed. ' mysql_error());
    $row     mysql_fetch_array($resultMYSQL_ASSOC);
    $numrows $row['numrows'];

    // how many pages we have when using paging?
    $maxPage  ceil($numrows/$rowsPerPage);
    $nextLink '';

    // show the link to more pages ONLY IF there are 
    // more than one page
    if($maxPage 1)
    {
        
    // this page's path
        
    $self     $_SERVER['PHP_SELF'];
        
        
    // we save each link in this array
        
    $nextLink = array();
        
        
    // create the link to browse from page 1 to page $maxPage
        
    for($page 1$page <= $maxPage$page++)
        {
            
    $nextLink[] =  "<a href=\"$self?page=$page\">$page</a>";
        }
        
        
    // join all the link using implode() 
        
    $nextLink "Oldal megjelen&#237t&#233se : " implode(' &raquo; '$nextLink);
    }

    // close the database connection since
    // we no longer need it
    include 'library/closedb.php';
    ?>
    <table width="830" border="0" cellpadding="2" cellspacing="0" bgcolor="d0e4e4">
     <tr> 
      <td align="right" class="text"> 
       <?=$nextLink;?>
      </td>
     </tr>
    </table>
    <?php
    }
    ?>
    </body>
    </html>
    When these 3 "segments" are saved as one php file, the browser retrieves the mentioned error message. I have separated the code into a file for input data to the d'base and one for displaying the entries from d'base. It's not the best solution, but until I don't figure out what is wrong, I have to satisfy with what i have...

  21. #21
    Who turned the lights out !! Mandes's Avatar
    Join Date
    May 2005
    Location
    S.W. France
    Posts
    2,496
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by dujmovicv View Post
    When these 3 "segments" are saved as one php file, the browser retrieves the mentioned error message.
    Can you post the code you have that creates the error, its not obvious from your previous post how you combine these 3 pieces of code, and its the way they are combined that is causing the problem.
    A Little Knowledge Is A Very Dangerous Thing.......
    That Makes Me A Lethal Weapon !!!!!!!!

    Contract PHP Programming

  22. #22
    a fresh, new start... dujmovicv's Avatar
    Join Date
    Aug 2006
    Location
    Earth
    Posts
    559
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    It seems I finally get to work that thing. The problem was that I 'included' the above code (guestbook.php) with another .php file like:
    PHP Code:
    include ('guestbook.php'); 
    ... i suppose that was the problem, because after i used the 'guestbook.php' "directly" in browser, the script is operating like it suppose to... I'm not sure if what i wrote is correct, but after all, my probleme is solved


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •