Solved

competition form with php/mysql?

Posted on 2002-05-19
9
363 Views
Last Modified: 2006-11-17
I've been asked to run a cd giveaway/competition on my site and would like to have a popup box load on the way into my site with some info about the cd, a graphic of the CD cover and a form with fields for Name and Email Address. Once submitted I'd like the user to be shown and "thankyou for entering" screen and then have a "close this window" link and not be shown the popup next time they visit the site (cookies?). I'd also like to store the names and email addresses in a mysql table.

I can do the html bit but I'm still a bit of a noob on the php/mysql side and was wondering if anyone could suggest what code I would need to achieve this.

thanks in advance :)

0
Comment
Question by:1524
  • 5
  • 4
9 Comments
 
LVL 7

Expert Comment

by:axis_img
ID: 7020629
Hello...

I am just going to throw this out here, since your request does not really warrant a simple answer. It is a bit more involved.

First thing to take care of is setting up the database table. I am assuming that you are using mysql. Please let me know.

For this example, I just created a simple table named "cd_submissions", with the fields "user_email" and "user_name".

An example create command would be:

CREATE TABLE cd_submissions (
user_email varchar(255) not null,
user_name varchar(100) not null);

// Prevent duplicate emails
CREATE UNIQUE INDEX cd_submissions_ux1 ON cd_submissions(user_email);

I prefer using unique indexes of primary keys when possible, but that is just a habit I picked up from my use of oracle. You can choose for yourself.

When that is done, you can begin with the files. The first file is the main page, which will launch the popup window.

main.php
*****************

<html>
<head>
<title>Main Page</title>

<script language="javascript">
<!--
// Do not change
var popup_seen  = <?=(isset($HTTP_COOKIE_VARS["popup_seen"]))?"true":"false";?>;

// Change as needed
var popup_url   = "http://www.you.com/popup.php";
var popup_width = 300;
var popup_height= 300;

function show_popup() {

        // If the cookie is set, do nothing
        if(popup_seen) return;

        // Cookie was not found, show window
        var popup = window.open(popup_url, "popup", "width=" + popup_width + ",height=" + popup_height);
}

//-->
</script>

</head>

<body onLoad="show_popup();">
Your main page is here...
</body>
</html>


popup.php
*******************

<?
// If the form was submitted, act upon it...
if($form_active == 1) {

        // Cookie expiration time [currently 1 year]
        $expire_time    = 86400 * 365;

        // DB configuration values
        $db_host        = "localhost";
        $db_username    = "username";
        $db_password    = "password";
        $db_name        = "database_name";

        // Initialize the error array
        $form_errors = array();

        // Validate name
        if($HTTP_POST_VARS["user_name"] == "") {
                $form_errors["user_name"] = "Please enter your name";
        }

        // Validate email
        if($HTTP_POST_VARS["user_email"] == "") {
                $form_errors["user_email"] = "Please enter your email address";
        }

        // No errors were found, so go ahead and submit into the DB
        if(sizeof($form_errors) == 0) {
                $user_name      = addslashes($user_name);
                $user_email     = addslashes($user_email);

                // Create a connection to your database...
                // Change the values to your environment's specific setup
                if( ($my_conn = mysql_connect($db_host, $db_username, $db_password)) != false) {;

                        // Select database name...
                        mysql_select_db($db_name, $my_conn);

                        // Create query for the insert...
                        $insert_query   = "INSERT INTO cd_submissions VALUES('$user_email', '$user_name')";
                        $insert_result  = mysql_query($insert_query, $my_conn);

                        // If insert worked, include thank you file
                        if($insert_result != false) {

                                // Set cookie so they do not see the popup again
                                setcookie("popup_seen", "1", $expire_time, "/");
                                include_once("thank_you.php");

                                // Close DB connection
                                mysql_close($my_conn);
                                exit;
                        }
                }
        }
}
?>
<html>
<head>
<title>Popup Window</title>
</head>

<body>

Your info and CD graphics would most likely go here somewhere...
<p>

<form action="popup.php" method="post">
<input type="hidden" name="form_active" value="1">

<?=($form_errors["user_name"] != "") ? $form_errors["user_name"] . "<br>":"";?>
Your Name: <input type="text" name="user_name" value="<?=$HTTP_POST_VARS['user_name']?>"><br>

<?=($form_errors["user_email"] != "") ? $form_errors["user_email"] . "<br>":"";?>
Your Email:: <input type="text" name="user_email" value="<?=$HTTP_POST_VARS['user_email']?>"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>


thank_you.php
**********************

<html>
<head>
<title>Thank You</title>
</head>

<body>
<center>
<b>Thank you</b>
<p>
<a href="javascript:;" onClick="window.close(); return false;">Close this window</a>
</body>
</html>

**************************************


I am not sure what parts of this you will have questions on, so you let me know as you have problems. I will be on and off tonight, so I will get back as time permits. Good luck.


Regards,
Barry
0
 
LVL 7

Expert Comment

by:axis_img
ID: 7020633
Just an FYI. I used basic examples in some of the code above. There is not a lot of error checking, etc. For instance, you may want a better email validator. There are plenty floating around on the web, which can be plugged in.

Also, the layout is nasty. It is just simple text. I didn't want to waste time trying to make the html look pretty, since you will obviously need to customize it to your needs.

And finally... I am not sure which version of PHP you are using. If you are using a newer version, you can substitute the $HTTP_POST_VARS with $_POST, and $HTTP_COOKIE_VARS with $_COOKIE. The reason for this is because $HTTP_*_VARS has been deprecated in the newer versions (although they are still functional).

Regards,
Barry
0
 

Author Comment

by:1524
ID: 7021739
Hi Barry, thanks for your help, much appreciated.

here's the result: http://undergroundhouse.net/main_page.php

I've got everything working apart from I've still got one small problem.

my site has an index.htm which is the index page of the site and an index.php already I can't easily rename the exsiting index.php and It's a hosting account so I can't change the name of the default index page. The new file main_page.php needs to somehow my site index page. any ideas??

thanks in advance!
0
 
LVL 7

Expert Comment

by:axis_img
ID: 7021808
Cool! Glad it worked. Looks good, actually... heh.

Hmmm.. Let me make sure I understand the problem fully.

The default directory index page for your site is set up as: index.htm index.php, in that order?

Also, your server doesn't allow .htaccess files to override the directory indexes, or to add .htm as a parsed type?

Bummer :)

Offhand, the only thing I can think of is for you to simply redirect the user from the index.htm page to the main_page.php page using a meta tag. I know it is a bit sloppy, but it is a workaround; at least until you happen to change hosts to one that grants a little more privileges.

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://undergroundhouse.net/main_page.php">

Just try sticking that at the top of your index.htm page, so the user is sent to main_page.php instead. Hope that helps out.

Regards,
Barry
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:1524
ID: 7021819
"Also, your server doesn't allow .htaccess files to override the directory indexes, or to add .htm as
a parsed type?"

actually I didn't know that you could overide the directory indexes.

what code do I need in a .htaccess file to do that? I reckon that could solve the problem, although I'll need to amend my existing htaccess unless I can have more than one.

Cheers


Ben
0
 
LVL 7

Expert Comment

by:axis_img
ID: 7021846
Hey Ben...

Yeah... you can only have one .htaccess file. Try putting this line in there as well:

# SET DEFAULT INDEX ORDER
DirectoryIndex main_page.php index.php index.html index.htm


Let me know if that works. If it doesn't, it either means there is an error in the htaccess file, or they do not allow overriding this feature (which would be strange, as it is harmless).

Let me know...
Barry
0
 
LVL 7

Accepted Solution

by:
axis_img earned 300 total points
ID: 7021852
Oops... "Yeah... you can only have one .htaccess file"

I meant "per directory". It sounded a bit confusing when I re-read it. :)
0
 

Author Comment

by:1524
ID: 7021903
I did exactly what you said and it still doesn't work, but I guess I should probably speak to my hosting guys now. Thanks for all your help, much appreciated :)
0
 

Author Comment

by:1524
ID: 7392712
Hi Barry, just a quick question for you on the subject of this popup code... I can post this as another question if you like...

I'm changing this for a new competition each month now, but I figured that people who entered the comp the month before, won't be seeing the popup for the new comp, unless they have deleted the cookie... any ideas how to work around this... I'm just about to put a new comp live now...

thanks in advance


-


Ben
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now