OneClick. When that's done I get another form (form2) with a TwoClick submit button dynamically populated. The issue comes here. When I click the button TwoClick the whole 'form2' disappears. can some one throw me a clue as to where I have gone wrong?

Thanks.

    <?php session_start(); ?>
<DOCTYPE html>
<html>
<head><title></title>
</head>
<body>
<div id="One">
    <form name="form1" method="post" action="#">
        <?php echo "<input type='text' name='txt1' id='txt1'>"; // This text box is dynamically populated ?>
              <input type="submit" name="sendone" id="sendone" value="OneClick">
    </form>
</div>

<div id="two">


            <?php
            if(isset($_POST['sendone']))
            {   if($_POST['txt1'] == '')
                {echo 'txt1 is empty!'; return;} else {$_SESSION['txt1'] = $_POST['txt1'];}

                        if(isset($_SESSION['txt1'])) 
                        echo $_SESSION['txt1']; 
                        echo "<form name='form2' method='post' action='#'><table border='1'><tr><td>form 2 is here!<br></td></tr><tr><td><input type='text' name='txt123' id='txt123'></td></tr> <tr><td><input type='submit' name='sendtwo' id='sendtwo' value='TwoClick'></td></tr></table></form>";



            }   
                        if(isset($_POST['sendtwo']))
                        if(isset($_POST['sendtwo'])) 
                        {
                            if($_POST['txt123'] == '')
                            {echo "Text box is empty..."; return;}
                        }               
                        ?>

        </div>
    </body>
</html> 

try this

<?php
    session_start();
    function putForm2(){
    $myForm = "<form name='form2' method='post' action='#'><table border='1'><tr><td>form 2 is here!<br></td></tr><tr><td><input type='text' name='txt123' id='txt123'></td></tr> <tr><td><input type='submit' name='sendtwo' id='sendtwo' value='TwoClick'></td></tr></table></form>";
    return $myForm;
    }
?><!DOCTYPE html>
    <html>
<head><title></title>
</head>
<body>
<div id="One">
    <form name="form1" method="post" action="#">
        <?php echo "<input type='text' name='txt1' id='txt1'>"; // This text box is dynamically populated ?>
              <input type="submit" name="sendone" id="sendone" value="OneClick">
    </form>
</div>

<div id="two">


            <?php
            if(isset($_POST['sendone']))
            {   if($_POST['txt1'] == '')
                {echo 'txt1 is empty!'; return;} else {$_SESSION['txt1'] = $_POST['txt1'];}

                        if(isset($_SESSION['txt1'])) 
                        echo $_SESSION['txt1']; 
                        echo putForm2();



            }   
                        if(isset($_POST['sendtwo']))
                        if(isset($_POST['sendtwo'])) 
                        {
                            if($_POST['txt123'] == '')
                            {
                                echo putForm2();
                                echo "Text box is empty..."; return;
                            }
                        }               
                        ?>

        </div>
    </body>
</html>

  1. Session_start() must be called before outputting any output (in the beggining of the script).

  2. Sendtwo form disappears because of your logic - when you submit Sendtwo, $_POST['sendone'] is not set, therefore not being echoed. To fix that you could for example change the first condition to:

if (isset($_POST['sendone']) || isset($_POST['sendtwo']))

try putting

if(isset($_POST['sendtwo']))
         if(isset($_POST['sendtwo'])) 
         {
             if($_POST['txt123'] == '')
                      {echo "Text box is empty..."; return;}
         }

at the very end. i mean after the last }

Try this example and read the code comments. Though really its unclear to me what your trying todo so ive just ported code to what I think your trying todo, tho there are better ways handle processing forms. Also You should really think about your form value keys, txt1 and txt123 are not helpful and dont explain the type of variable you want from the form. Perhaps its of interest.

<?php 
session_start();
if($_SERVER['REQUEST_METHOD']=='POST'){
    $form = null;
    //Handle form 1
    if(isset($_POST['sendone'])){
        //reset session vars if new request
        unset($_SESSION['txt1']);
        unset($_SESSION['txt123']);

        //validate txt1
        if(!empty($_POST['txt1'])){
            //set into session
            $_SESSION['txt1'] = $_POST['txt1'];
            //or you could put the value in a <input type="hidden" name="txt1" value="'.htmlspecialchars($_POST['txt1']).'"/>

            $form = "
    <form name='form2' method='post' action=''>
        <table border='1'>
        <tr>
            <td>form 2 is here!<br></td>
        </tr>
        <tr>
            <td><input type='text' name='txt123' id='txt123'></td>
        </tr>
        <tr>
            <td><input type='submit' name='sendtwo' id='sendtwo' value='TwoClick'></td>
        </tr>
        </table>
    </form>";
        } else {
            $error['txt1'] = 'txt1 is empty!';
        }
    }

    //do second form
    if(isset($_POST['sendtwo'])){
        //validate
        if(!empty($_POST['txt123'])){
            //set session
            $_SESSION['txt123'] = $_POST['txt123'];
        }else{
            $error['txt123'] = 'txt2 is empty!';
        }
    }

    //check then do something with both form values
    if(empty($error) && isset($_SESSION['txt1']) && isset($_SESSION['txt123'])){
        $form = "Both txt1=".htmlspecialchars($_SESSION['txt1'])." and txt123=".htmlspecialchars($_SESSION['txt123'])." was set into session";
    }

}
?>
<DOCTYPE html>
<html>
<head><title></title>
</head>
<body>

    <div id="One">
        <form name="form1" method="post" action="">
            <input type='text' name='txt1' id='txt1'> 
            <input type="submit" name="sendone" id="sendone" value="OneClick"> 
            <?php echo isset($error['txt1'])?$error['txt1']:null;?>
        </form>
    </div>

    <div id="two">
      <?php echo isset($form)?$form:null;?>
    </div>
    </body>
</html>

相关推荐