Jump to content

How can i stop duplication of code when using ajax. It seems to keep happening!


tyweed

Recommended Posts

I can't seem to figure out to more effectively use ajax so that i do not have to keep repeating code in separate files. So, here is an example of what i'm talking about. Let's say you have a login page written in php.

<html>
<body>

<div id="main">
<img src="logo.gif" alt="You bet your ass logo" width="212" height="120">


<?php

     include_once("./classes/MysqlManager.php");
     include_once("./classes/UserFunctions.php");


  if(isset($_POST['submit']) )
  {





          if(get_magic_quotes_gpc())
          {

                  $email = trim($_POST['email']);
                  $password = trim($_POST['password']);
          }
          else
          {
           		 $email = mysql_real_escape_string(trim($_POST['email'] ) );
		         $password = mysql_real_escape_string( trim($_POST['password'] ));
          }

         $mysqlmanager = new MysqlManager();
		 $query ="SELECT * FROM users  WHERE email  = '$email' AND password = '$password'";


         if(!$r = $mysqlmanager->executeQuery($query))//bad sql command
         {

         	$mysqlmanager->printSqlError();
         	printLogin();

          }
          //check for error input empty password or userID
          else if( $email == "" || $password == "")
           {
             print "<p class='warning'> You forgot to enter in either your email or password.</p>";
                printLogin();

  		  }
           //check for error input incorrect password or userID
           else if(mysql_num_rows($r) == 1)
           {
                         $userFunc = new UserFunctions();
                         $row = mysql_fetch_array($r);
                         $_SESSION['name'] = $row['username'];
			             $_SESSION['email'] = $email;
			             $_SESSION['password'] = $password;
			             $_SESSION['user_id'] = $row['user_id'];
			             // no longer need this thus far $_SESSION['grouplist'] = $userFunc->getGroupList($row['user_id']);




                         if($email == "admin")
                         header("Location:admin.php");
                         else
                         header("Location:main.php");


			  }
			  else
			  {

   			     print "<p class='warning'> Incorrect Login or Password!</p>";
                  printLogin();
			  }



           }
           else
           {
             printLogin();
           }



function printLogin()
{
print <<< HTMLBLOCK
              <center>
              <div id="error" >      </div>
             <form  method = "post" action="login.php" id="form">
             <table>
             <tr>
             <td align = left>
             <fieldset>
             <legend> Login</legend>
		     <label for="email">Email :</label>
  		     <br/>
  		     <input type = 'text' name = 'email' class="required" size = '40'/>
  		     <br/>
		     <label for="password">Password :</label>
  		     <br/>
  		     <input type = 'password' name = 'password'  class="required"  size = '25'/>
  		     <br/> <br/>
  		     <input type = 'submit' name = 'submit' id='submit' value = 'submit'/>
  		     <br/>  <br/>
  		     <a href='LostPassword.php'> Forgot Password?</a> | <a href="Signup.php"> Add New Group </a>
  		     <br/>
  		     </fieldset>
  		     </td>
      		 </tr>
  		     </table>
  		     <br>
  		     <br>
HTMLBLOCK;


}



?>

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

 

So this was a fully working php login page now i'd like to use ajax to make it better. The problem is i can't seem to figure out how to call this same page with ajax to use the existing code. Instead i create a new file that copies almost exactly the php chunk of code.  Here is the example ajax php file called

 

<?php
session_start();

     include_once("./classes/MysqlManager.php");
     include_once("./classes/UserFunctions.php");

         //validate all form fields were filled in
         header('Content-Type:text\xml');


         $mysqlmanager = new MysqlManager();
         $email = trim($_POST['email']);
         $password = trim($_POST['password']);
		 $query ="SELECT * FROM users  WHERE email  = '$email' AND password = '$password'";


         if(!$r = $mysqlmanager->executeQuery($query))//bad sql command
         {

         	$mysqlmanager->printSqlError();

          }
          else if(mysql_num_rows($r) == 1)
          {
                          $userFunc = new UserFunctions();
                          $row = mysql_fetch_array($r);
                          $_SESSION['name'] = $row['username'];
  			             $_SESSION['email'] = $email;
  			             $_SESSION['password'] = $password;
  			             $_SESSION['user_id'] = $row['user_id'];

                         print "redirect";


  			  }
  			  else
  			  {


    			  print "<p class='warning'> Incorrect Login or Password!</p>";

  			  }


?>

 

 

you see how that test.php class is just a cut n paste of code from the login.php class. It just seems so inefficient to code this way. I'd like to use my existing php code that calls itself in the ajax request. It just does not seem correct.Does my problem make any sense? It seems to be a common dilemma for me?

Link to comment
Share on other sites

I personally write separate files for my AJAX calls, and I name them with an extension of .ajax (requires some code in my .htaccess file to make this work), and keep them in a folder called /ajax. This allows me to keep track of what is going on.

 

But, if you really want to use the same script, and only take a part of it, the jquery library has a function called...import I believe, in which you can state the ID of the elements that you want to import into your page.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.