Search code examples
phpmysqlhtmlformscomments

PHP comment form


I have a comment form that I have created. It gets the id from the database and prints out the data that goes with that id, but it also prints out the information into the form. How can I get a blank form, so that the user can add a comment to the record?

This the code for the form:

<form method="post" action="pv.php?id=<?php echo $row['ID']?>&action=<?php echo $form_action ?>">
    <fieldset>
        <legend></legend>
        <p>
            <label for="cname">Date Of Birth</label>  *
            <input id="cname" name="dateofbirth" class="required date"  value="<?php echo $row['Date_Of_Birth']?>" />  (eg 1978.11.11)
        </p>

        <p>
            <label for="cgender">Gender</label>   *
            <input type="radio"
                   name="gender"
                   value="Male"
                   <?php if($row['Gender']=='male'){echo 'checked';}?>/>
                   Male
            <input type="radio"
                   name="gender"
                   value="Female"
                   <?php if($row['Gender']=='female'){echo 'checked';}?>/> Female </td>
        </p>

        <p>
            <label for="curl">Title</label>   *
            <select name="title"   id="title"  class="required">
                <option value="">Please Select</option>
                <option value="Mr" <?php if($row['Title']=='Mr'){echo 'selected';}?>>Mr</option>
                <option value="Ms" <?php if($row['Title']=='Ms'){echo 'selected';}?>>Ms</option>
                <option value="Mrs" <?php if($row['Title']=='Mrs'){echo 'selected';}?>>Mrs</option>
                <option value="Miss" <?php if($row['Title']=='Miss'){echo 'selected';}?>>Miss</option>
                <option value="Other" <?php if($row['Title']=='Other'){echo 'selected';}?>>Other</option>
                </select>
        </p>

        <p>
            <label for="ccomment">First Name</label>     *
            <input type="text" name="firstname" value="<?php echo $row['First_Name']?>" maxlength="50" />
        </p>

        <p>
            <label for="cemail">Last Name</label> *
            <input id="cemail" type="text" name="lastname"
                   value="<?php echo $row['Last_Name']?>" maxlength="75" />
        </p>

        <p>
            <label for="ccomment">Address 1</label>*
            <input type="text" name="address1"
                   value="<?php echo $row['Address_Line_1']?>" maxlength="50" />
        </p>

        <p>
            <label for="ccomment">Address 2</label>
            <input type="text" name="address2"
                   value="<?php echo $row['Address_Line_2']?>" maxlength="50" />
        </p>

        <p>
            <label for="ccomment">City</label>*
            <input type="text" name="city"
                   value="<?php echo $row['City']?>"  maxlength="50" />
        </p>

        <p>
            <label for="ccomment">Postcode</label>*
            <input type="text" name="postcode"
                   value="<?php echo $row['Postcode']?>" maxlength= "10" />  (eg LE5 5QE)
        </p>

        <p>
            <label for="ccomment">Contact No</label>*
            <input type="text" name="contactno"
                   value="<?php echo $row['Contact_No']?>" maxlength= "12" />  (eg 077448825723)
        </p>

        <p>
            <label for="ccomment">Email</label>*
            <input type="text" name="email"
                   value="<?php echo $row['Email']?>" maxlength= "40"/>  (eg info@example.com)
        </p>

        <p>
            <label for="ccomment">Comment</label>
            <textarea rows="10" cols="30" name="note"
                      maxlength= "500"><?php echo $row['Additional_Comment']?></textarea>
        </p>

        <p>
            <input class="submit" type="submit" value="Submit"/>
        </p>

        <p>
            <a href='pv.php'>Main Page</a>
       </p>

    </fieldset>
</form>

This is the code for printing out the data on the page:

if($_GET['action'] == 'comment') {
    $form_action = 'comment_ok';
    $id = $_GET['id'];
    $result = mysql_query("SELECT * FROM project_data WHERE id='$id'");
    $row = mysql_fetch_array($result);

    echo'<b>';
        echo $row['Date_Of_Birth'];
        echo '&nbsp&nbsp';
        echo $row['Gender'];
        echo '&nbsp&nbsp';
        echo $row['Title'];
        echo '&nbsp&nbsp';
        echo $row['First_Name'];
        echo '&nbsp&nbsp';
        echo $row['Last_Name'];
        echo '&nbsp&nbsp';
        echo $row['Address_Line_1'];
        echo '&nbsp&nbsp';
        echo $row['Address_Line_2'];
        echo '&nbsp&nbsp';
        echo $row['City'];
        echo '&nbsp&nbsp';
        echo $row['Postcode'];
        echo '&nbsp&nbsp';
        echo $row['Contact_No'];
        echo '&nbsp&nbsp';
        echo $row['Email'];
        echo '&nbsp&nbsp';
        echo $row['Additional_Comment'];
    echo '</b>';
}

And a snippet of the code I am using to send the id to the form:

echo "<td><a href='pv.php?action=edit&id=" . $row['ID'] .
     "'>Edit</a>&nbsp&nbsp<a href='pv.php?action=delete_ok&id=" . $row['ID'] .
     "'>Delete</a>&nbsp&nbsp**<a href='pv.php?action=comment&id=" . $row['ID'] .
     "'>Comment</a></td>"**;
echo "</tr>";

How can I do it?


Solution

  • If you want one page that allows the user to fill in a blank form, see a filled out form and update a form.

    You can do the blank form or filled form by checking if an id exist, like this:

    <?
        if (isset(id)) // Here you can check if the id exists, which means you will be doing an update to the SQL query
            echo'
            <form method="post" action="pv.php?id=' . $row['ID'] . '&action=' . $form_action . '">
    
                <!-- Your form here with values -->
                e.g. <label for="cemail">Last Name</label> *
                <input id="cemail" type="text" name="lastname" value="' . $row['Last_Name'] . '" maxlength="75" />
            </form>';
    
            // Put your SQL update here to take the values from the above form
        }
        elseif (!isset(id)) // Here there is no id so you will want to insert
        {
            echo'
            <form method="post" action="pv.php?id=' . $row['ID'] . '&action=' . $form_action . '">
                <!-- Your form here with values -->
                e.g. <label for="cemail">Last Name</label> *
                <input id="cemail" type="text" name="lastname" maxlength="75" /> // No value here because will insert new record
            </form>';
    
            // Put your SQL insert here to create a new record
        }
    ?>
    

    If you may want the user to be able to add a new comment entirely rather than editing the one already associated with their id, I think you would have to do this by giving them the option to add another comment. To do this, I would create a new table and then insert the comments into that, so you have one table, example_users with the user information, and then another table, user_comments, with the user comments, for example:

    Table example_users

    id = 1
    fname=Joe
    lname=Bloggs
    email=jbloggs@example.com
    

    Table user_comments

    id=1
    user_id=1
    comment=Comment will be saved here
    

    This way, any user can have any number of comments. You could render this on the page by using a foreach statement to render a text box with all their existing comments and then have a blank one at the end for any new ones. Then they can edit any comment and add a new comment.