Solved

Alert message after sql query PHP

Posted on 2009-04-11
5
560 Views
Last Modified: 2013-12-13
Hey,

I have been on this question for a while now and I just can't seem to find anything that works. First I will explain what my pages do.

The exerciseTest page will list an exercise found in the exercise table. From that page I have a form that will allow the user to add the displayed exercise to the exercise of the month table. They will have the option of picking which month they would like to add it to. Only one exercise per month can be added.

If an exercise is already occupied by the month they have chosen, an alert message will come up asking them if they would like to replace the exercise. I would like it so if the user clicks OK then it will send it to the AddUpdateMonthlyExercise page and it will update. If the user clicks cancel then it will do nothing.

Basically, the alert message must go through a function that checks if the exercise month is in the exercise_of_month table after the user clicks on the add button. If it is not then the exercise will simply be added to the exercise_of_month.

Here I have supplied the exerciseTest page and the AddUpdateMonthlyExercise page.




<!-- Test page to view exercises and add an exercise to exercise of the month -->

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    </head>

    <body>

        <?php

            $exerciseID = 3;

 

            include('connection.php');

                mysql_connect($ip,$username,$password);

                @mysql_select_db($database) or die('Could not connect to database: ' . mysql_error());

            

            // First, fetch all the unique Exercise_Month's

            $checkMonth = mysql_query("SELECT Exercise_Month FROM Exercise_of_Month GROUP BY Exercise_Month");

            $PhpArray = array();

            while($row = mysql_fetch_array($checkMonth, MYSQL_NUM)) {

                $PhpArray[] = $row[0];

            }

            // Echo the javascript stuff to the client.

            ?>

            <script language="javascript">

                var JavaArray = ['<?php echo implode("', '", $PhpArray) ?>'];

                

                function in_array(stringToSearch, arrayToSearch) {  

                    for (s = 0; s < arrayToSearch.length; s++) {

                        thisEntry = arrayToSearch[s].toString();

                        if (thisEntry == stringToSearch) {

                           return true;

                        }

                    }

                    return false;

                }

                function CheckExistance(month_name) {

                    if (in_array(month_name, JavaArray)) {

                        var answer = confirm("An exercise already exists for this month. Would you like to replace the exercise?");

                        if (answer) {

                            document.addMonthlyExercise.addUpdate.value="Update";

                            document.addMonthlyExercise.addExercise.value="Update";

                        }

                        else {

                            document.addMonthlyExercise.addUpdate.value="Add";

                            document.addMonthlyExercise.addExercise.value='Add';

                        }

                    }

                }

            </script>

            <?php

 

            $result = mysql_query("SELECT * FROM Exercise WHERE Exercise_Id = '$exerciseID'");

            while($row = mysql_fetch_array($result)) {

                $exerciseID = $row["Exercise_Id"];

                $exerciseName = $row["Exercise_Name"];

                $desc = $row["Description"];

                $disabled = $row["Disabled"];

                $dateCreated = $row["Date_Created"];

                $version = $row["Version"];

                $createdBy = $row["Created_By"];

            }

        ?>

        <form name="displayExercise" method="POST">

            Exercise ID: <input type="text" name="ExerciseID"  value="<?php echo $exerciseID;?>" /><br/>

            Exercise Name: <input type="text" name="ExerciseName"  value="<?php echo $exerciseName;?>" /><br/>

            Description: <input type="text" name="Description" value="<?php echo $desc; ?>"/><br/>

            Disabled: <input type="text" name="Disabled"  value="<?php echo $disabled;?>" /><br/>

            Date Created: <input type="text" name="Date Created" value="<?php echo $dateCreated; ?>"/><br/>

            Version: <input type="text" name="Version"  value="<?php echo $version;?>" /><br/>

            Created By: <input type="text" name="CreatedBy" value="<?php echo $createdBy; ?>"/><br/>

        </form>

        <form name="addMonthlyExercise" action="AddUpdateMonthlyExercise.php" method="POST">

            <input type="hidden" name="addUpdate" value="" />

            Add to Exercise of the Month: <select id="Month" name="Month">

                                            <option value="01">January</option>

                                            <option value="02">February</option>

                                            <option value="03">March</option>

                                            <option value="04">April</option>

                                            <option value="05">May</option>

                                            <option value="06">June</option>

                                            <option value="07">July</option>

                                            <option value="08">August</option>

                                            <option value="09">September</option>

                                            <option value="10">October</option>

                                            <option value="11">November</option>

                                            <option value="12">December</option>

                                        </select>

            <input type="hidden" name="exerciseID" value="<?php echo $exerciseID;?>" />

            <input type="submit" name="addExercise" value="Add" onclick="CheckExistance(document.Month.value);" />

        </form>

    </body>

</html>

 

 

 

 

<?php

/*

	AddUpdateMonthlyExercise.php

    Adds or updates an exercise on the monthly exercise table

*/

	include('connection.php');

        mysql_connect($ip,$username,$password);

        @mysql_select_db($database) or die( "Unable to select database");

	

	$exerciseID = mysql_real_escape_string(stripslashes($_POST['exerciseID']));

	$exerciseMonth = mysql_real_escape_string(stripslashes($_POST['Month']));

    $addUpdate = mysql_real_escape_string(stripslashes($_POST['addUpdate']));

 

    echo "Month: ".$exerciseMonth;

    echo "<br>ID: ".$exerciseID;

    echo "<br>SQL Query: ".$addUpdate;

 

//    Check if value passed in is add or update

    if ($addUpdate == "Update") {

        $sql = mysql_query("UPDATE Exercise_of_Month

            SET Exercise_Id = '$exerciseID'

            WHERE Exercise_Month = '$exerciseMonth'");

 

        if (mysql_query($sql)) {

            echo "<br>Exercise of the month updated";

        }

        else

            echo "<br>Update Failed";

 

        mysql_close();

    }

    else {

        $sql = "INSERT INTO Exercise_of_Month

            SET Exercise_Id = '$exerciseID', Exercise_Month = '$exerciseMonth'";

 

        if (mysql_query($sql)) {

            echo "<br>New exercise of the month added";

        }

        else

            echo "<br>Insert Failed";

 

        mysql_close();

    }

 

//    header('Location: ViewMonthlyExercises.php' );

 

?>

Open in new window

0
Comment
Question by:tqrecords
  • 2
  • 2
5 Comments
 
LVL 50

Accepted Solution

by:
Steve Bink earned 250 total points
ID: 24127890
I'd use AJAX for this.  Forcing a page refresh during this operation will be a little unwieldy because PHP pushed into javascript, not the other way around.  By using AJAX, you let javascript call a PHP script in the background, return and act on the results, then submit the final information.

With AJAX, a submit button causes the add request to be sent to the server.  The server runs PHP to determine if the month is taken.  If it is, return a specific error to the calling page.  If not, return OK.  When the AJAX gets the response, check for the error.  If it exists, display an alert box with OK/Cancel.  If OK is selected, send a second request to the server with an 'override' option set.

Without AJAX, the client hits the submit button on the form.  Your page tries to add, finds the month is taken.  Now you have to build the javascript routine to ask the user, and a hidden form to handle reposting the information back to the server.  The user clicks OK or Cancel, the javascript sets a form field as appropriate and programmatically triggers a submit.
0
 

Author Comment

by:tqrecords
ID: 24127912
Hey,

Thank you for the reply. I am fairly new at this and I do not know much about AJAX. If what I am trying to do can be accomplished without AJAX then I would really like to know how to do it.

However I am running out of time for this project so if you do know how to code the submit button with AJAX, please help me out. Is there anything I will have to install for it?

Right now the submit button does not go to the function CheckExistance..
0
 
LVL 108

Assisted Solution

by:Ray Paseur
Ray Paseur earned 250 total points
ID: 24133730
May have already posted this for you, but just for good measure, here is a sample that shows all the moving parts of what has come to be known as AJAX.  Read it over and I am sure it will be clear to you.  Even though AJAX is a somewhat advanced concept, the structure is quite straightforward and this is an elegant presentation of the subject.  

Best, ~Ray
I find a lot of this AJAX stuff a bit of a hype.  Lots of people have

been using similar things long before it became "AJAX".  And it really

isn't as complicated as a lot of people make it out to be.  Here is a

simple example from one of my apps.  
 

First the Javascript:
 

function createRequestObject() {

    var ro;

    var browser = navigator.appName;

    if(browser == "Microsoft Internet Explorer"){

        ro = new ActiveXObject("Microsoft.XMLHTTP");

    }else{

        ro = new XMLHttpRequest();

    }

    return ro;

}
 

var http = createRequestObject();
 

function sndReq(action) {

    http.open('get', 'rpc.php?action='+action);

    http.onreadystatechange = handleResponse;

    http.send(null);

}
 

function handleResponse() {

    if(http.readyState == 4){

        var response = http.responseText;

        var update = new Array();
 

        if(response.indexOf('|' != -1)) {

            update = response.split('|');

            document.getElementById(update[0]).innerHTML = update[1];

        }

    }

}
 

This creates a request object along with a send request and handle

response function.  So to actually use it, you could include this js in

your page.  Then to make one of these backend requests you would tie it

to something.  Like an onclick event or a straight href like this:
 

  <a href="javascript:sndReq('foo')">[foo]</a>
 

That means that when someone clicks on that link what actually happens

is that a backend request to rpc.php?action=foo will be sent.
 

In rpc.php you might have something like this:
 

  switch($_REQUEST['action']) {

    case 'foo':

      / do something /

      echo "foo|foo done";

      break;

    ...

  }
 

Now, look at handleResponse.  It parses the "foo|foo done" string and

splits it on the '|' and uses whatever is before the '|' as the dom

element id in your page and the part after as the new innerHTML of that

element.  That means if you have a div tag like this in your page:
 

  <div id="foo">

  </div>
 

Once you click on that link, that will dynamically be changed to:
 

  <div id="foo">

  foo done

  </div>
 

That's all there is to it.  Everything else is just building on top of

this.  Replacing my simple response "id|text" syntax with a richer XML

format and makine the request much more complicated as well.  Before you

blindly install large "AJAX" libraries, have a go at rolling your own

functionality so you know exactly how it works and you only make it as

complicated as you need.  Often you don't need much more than what I

have shown here.
 

Expanding this approach a bit to send multiple parameters in the

request, for example, would be really simple.  Something like:
 

  function sndReqArg(action,arg) {

    http.open('get', 'rpc.php?action='+action+'&arg='+arg);

    http.onreadystatechange = handleResponse;

    http.send(null);

  }
 

And your handleResponse can easily be expanded to do much more

interesting things than just replacing the contents of a div.
 

-Rasmus

Open in new window

0
 
LVL 50

Expert Comment

by:Steve Bink
ID: 24134906
@Ray: I'm stealing that.  Outstanding explanation and sample.

@tqrecords: If you want to see more in-depth information on what is available with AJAX, and how everything fits together, see some of these links:

https://developer.mozilla.org/en/AJAX/Getting_Started
http://w3schools.com/ajax/default.asp
http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 24137649
@routinet: Take it and spread it widely!  I cannot recall where I got it but since it is signed "rasmus" I think it may be "lerdorf" of PHP fame.  Wish I had written it myself.  Best to all, ~Ray
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Foreword (July, 2015) Since I first wrote this article, years ago, a great many more people have begun using the internet.  They are coming online from every part of the globe, learning, reading, shopping and spending money at an ever-increasing ra…
Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

747 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