Updating a MySQL table value through HREF link

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • AutumnsDecay
    New Member
    • Mar 2008
    • 170

    Updating a MySQL table value through HREF link

    Hey everyone.

    I have been writing a testimonials backend for a client who wishes to use the feature. How it is supposed to work is like this:

    The user writes a testimonial of their experience at the salon into a basic HTML form. When the user clicks send it runs a PHP script inserting it into a MySQL table.

    The table has 4 fields: id, msg, name, active

    When the testimonial is submitted it obtains a default value of 0 for the 'active' field. This makes the testimonial 'inactive'.

    The salon owner wants to login and see all the pending testimonials (where active = 0). She can then review each one individually. If she wants to accept that testimonial she then clicks on the 'Activate' link, which will update the active value for that testimonial ID to 1 instead of 0.

    When users come to the website one random testimonial will be pulled where the active value is 1 (meaning its active). Each time the page is loaded it will be a different one, again where the active value is 1.

    My question is how to set the active value to 1. I've been trying an array of different codes, both written by me for this piece or by other developers who've freely posted simple solutions. I'm at a loss and it's needed by tomorrow morning.

    Here's the code for what I have tried, most recently.

    Code:
    <?
     			if($_SESSION['access'] == 1)
    			{
                $db = new DB();
    			$rows = $db->getRows();
    			$id = $_REQUEST[$row["id"]];
    			$str = "SELECT * FROM testimonials WHERE active = 0";
    			$db->query($str);
    			$rows = $db->getRows();
    			foreach($rows as $row)
    			print '<div style="border: 1px dotted #fff; padding: 5px; width: 400px; margin-bottom:10px;"><b><u>' . 
    			$row["name"] . '</b></u><br />' . $row["msg"] . '<br/><p align="left">Testimonail ID ' . $row["id"] . ' - 
    			<a href="testimonialsindex.php?mode=activate"><img src="images/activate.jpg"></a><br/></div>';
    			}	
    			else
    			{
    			print 'You are not logged in! Please login to view this page.';
    			}
    				
    		//if logged in, add a javascript file
    if($_SESSION['access'] == 1)
    {
    	if($_REQUEST['mode'] == 'activate')
    		{
    		$db = new DB();
    		$db->query("UPDATE testimonials SET active 1 WHERE id = " . $row["id"]);
    								
    		}
    	}
    		
    
    ?>
    I really need help and hope that somebody will able to help me.

    Thanks very much!
  • Markus
    Recognized Expert Expert
    • Jun 2007
    • 6092

    #2
    Are you just trying to update the value in the MySQL table?

    If so, check out MySQL UPDATE. Otherwise, could you explain a little more concisely?

    Comment

    • AutumnsDecay
      New Member
      • Mar 2008
      • 170

      #3
      Well that helped a little bit, Markus. It now updates the table value, however it's only letting it activate from bottom to top.

      What I mean is this:

      I have the testimonials displayed vertically like so:

      -------------------------------------
      | Name: Mat |
      | this place is great! |
      | |
      |Testimonial ID 1 |
      ------------------------------------

      -------------------------------------
      | Name: Sandy |
      | this place is rocks! |
      | |
      |Testimonial ID 2 |
      ------------------------------------

      -------------------------------------
      | Name: Liz |
      | this place is cool. |
      | |
      |Testimonial ID 3 |
      ------------------------------------


      I have to activate ID 3 first, then ID 2, then ID 1. I can't just choose one from the list to activate. Let's say I want to leave ID 3 and ID 2 in pending (active = 0) and activate ID 1, I'd have to activate all three and then unactivate ID 3 and ID 2 from a seperate page.

      Why's that happening?

      Comment

      • hoopy
        New Member
        • Feb 2009
        • 88

        #4
        You have to pass the ID in the URL string..

        So something like:

        <a href="testimoni alsindex.php?mo de=activate&id= ID_OF_THE_RECOR D">

        Then when you do the update only update that ID.

        Comment

        • AutumnsDecay
          New Member
          • Mar 2008
          • 170

          #5
          Excellent. I had tried that once before but wasn't sure if it would work. Used the '&id=' thing, and had the 'activate' mode use the $_GET to obtain the id from the url.

          It works perfectly.

          Thanks.

          Comment

          • AutumnsDecay
            New Member
            • Mar 2008
            • 170

            #6
            Hmm. I have to refresh in order for the testimonial to not be displayed. I've included a 'header' function into my script but when the page is loaded I get the

            Warning: Cannot modify header information - headers already sent by (output started at...

            error. Is there anyway I can add a refresh or header into my script? Here's what it looks like now, by the way:

            Code:
             <?
             			if($_SESSION['access'] == 1)
            			{
                        $db = new DB();
            			$rows = $db->getRows();
            			$str = "SELECT * FROM testimonials WHERE active = 0";
            			$db->query($str);
            			$rows = $db->getRows();
            			foreach($rows as $row)
            			print '<div style="border: 1px dotted #fff; padding: 5px; width: 400px; margin-bottom:10px;"><b><u>' . 
            			$row["name"] . '</b></u><br />' . $row["msg"] . '<br/><p align="left">Testimonail ID ' . $row["id"] . ' - 
            			<a href="testimonialsindex.php?mode=activate&id='. $row["id"] .'"><img src="images/activate.jpg"></a><br/></div>';
            			}	
            			else
            			{
            			print 'You are not logged in! Please login to view this page.';
            			}
            			
            ?>
            
            <?		
            if($_SESSION['access'] == 1)
            	{
            	if($_REQUEST['mode'] == 'activate')
            		{
            		$db = new DB();
            		$id = $_GET['id'];
            		$db->query("UPDATE testimonials SET active='1' WHERE id =" .$id);
            		header ('Location:testimonialsindex.php');
            		}
            	}
            ?>
            That's how the the testimonials are printed, and then the lower half is how they're activated. I would think that if an 'IF' statement were present it would be okay to have the header in there to automatically 'refresh' the page. However, it won't.

            Suggestions?

            Comment

            • Markus
              Recognized Expert Expert
              • Jun 2007
              • 6092

              #7
              You're updating the records after you have displayed them. Do it the other way around. No need for a header refresh.

              Comment

              • hoopy
                New Member
                • Feb 2009
                • 88

                #8
                You cant send a header request having already sent data, You would do better to have your update before the display so using your code something like:

                Code:
                <?
                if($_SESSION['access'] == 1)
                {
                if($_REQUEST['mode'] == 'activate')
                  {
                  $db = new DB();
                  $id = $_GET['id'];
                  $db->query("UPDATE testimonials SET active='1' WHERE id =" .$id);
                  header ('Location:testimonialsindex.php');
                  }
                }
                
                if($_SESSION['access'] == 1)
                {
                  $db = new DB();
                  $rows = $db->getRows();
                  $str = "SELECT * FROM testimonials WHERE active = 0";
                  $db->query($str);
                  $rows = $db->getRows();
                  foreach($rows as $row)
                  print '<div style="border: 1px dotted #fff; padding: 5px; width: 400px; margin-bottom:10px;"><b><u>' . 
                  $row["name"] . '</b></u><br />' . $row["msg"] . '<br/><p align="left">Testimonail ID ' . $row["id"] . ' - 
                  <a href="testimonialsindex.php?mode=activate&id='. $row["id"] .'"><img src="images/activate.jpg"></a><br/></div>';
                  }    
                  else
                  {
                  print 'You are not logged in! Please login to view this page.';
                }
                ?>

                Comment

                • Markus
                  Recognized Expert Expert
                  • Jun 2007
                  • 6092

                  #9
                  ... deja vĂș

                  Comment

                  • AutumnsDecay
                    New Member
                    • Mar 2008
                    • 170

                    #10
                    I'm now getting this error:

                    Warning: Cannot modify header information - headers already sent by (output started at /home/hairstre/public_html/testimonialsind ex.php:20) in /home/hairstre/public_html/testimonialsind ex.php on line 42

                    Warning: mysql_fetch_ass oc(): supplied argument is not a valid MySQL result resource in /home/hairstre/public_html/lib/db.php on line 53

                    Warning: mysql_free_resu lt(): supplied argument is not a valid MySQL result resource in /home/hairstre/public_html/lib/db.php on line 57

                    I switched up my code with the code that hoopy posted. It did refresh correctly, however with those errors above the testimonials.

                    Any ideas?

                    Comment

                    • hoopy
                      New Member
                      • Feb 2009
                      • 88

                      #11
                      I dont understand why you are calling $rows = $db->getRows(); before even running a query. Can you just post all your code as this refers to line 42.

                      Comment

                      • AutumnsDecay
                        New Member
                        • Mar 2008
                        • 170

                        #12
                        I didn't realize I had that in there.

                        Removed it and the header function. Works great.

                        Thanks guys.

                        Comment

                        Working...