0

I am a certifid newbie so pls be patient with me if my question might sound very idiotic to you.

Hi guys. Im trying to get the value of an html <input type="hidden"> using PHP. The value of that hidden element is passed from Javascript and I need to display the value of that hidden element by using php echo. From what I understand (I hope I understood it right) when you do something like $description = isset($_GET['description']) ? $_GET['description'] : null; and also <input type="hidden" id="description" value="<?php echo $description; ?>" /> you can access/display the value of the hidden element by using <?php echo $_GET['description']; ?> but I am getting an undefined index: description. I am a total noob so I am really confused about this. I hope my question is not that confusing. Anyway I am very willing to answer probing questions.

BTW, here are the codes:

index.php

<?php include('functions.php'); ?>

<?php 
 $yr = isset($_GET['year_list']) ? $_GET['year_list'] : null;
 $evnt = isset($_GET['event_list']) ? $_GET['event_list'] : null; 
 $description = isset($_GET['description']) ? $_GET['description'] : null; 
?>

<html>
<head>
 <script type="text/javascript" src="myscripts.js"></script>
 <style type='text/css'>
  #show_description {
   min-height: 100px;
   min-width: 500px;
   max-height: 100px;
   max-width: 500px;
   background-color: #000;
   color: #fff;
   padding: 10px;
  }
 </style>
</head>
<body onload="check_year_event();">
 <div>
  <form name="myform" action="index.php" method="get" >
   <input type="hidden" id="hidden_year_list" value="<?php echo $yr; ?>" />
   <input type="hidden" id="hidden_event_list" value="<?php echo $evnt; ?>" />
   <input type="hidden" id="description" value="<?php echo $description; ?>" />

   Select Year: <?php echo hspacer(1); ?>
   <select id="year_list" name="year_list" onchange="check_year_event();" >
   <?php  
    for($year = (date('Y') - 100); $year <= (date('Y') + 100); $year++ ) {
     if ($year == date('Y'))  echo "<option value='$year' name='$year' selected='' >" . $year . "</option>";
     else echo "<option value='$year' name='$year' >" . $year . "</option>";
    }
   ?>
   </select>
   <?php echo hspacer(5); ?>
   Select Event:  <?php echo hspacer(1); ?>
   <select id="event_list" name="event_list" onchange="check_year_event();" >
   <?php  
    $events = array("Karate Tournament", "Beauty Pageant", "Film Festival", "Singing Contest", "Wedding");

    foreach($events as $event) echo "<option value='$event' name='$event' >" . $event . "</option>";
   ?>
   </select>
   <?php echo vspacer(2); echo hspacer(22); ?>
   <input type="submit" id="send_notice" value="Send Notice" onclick="check_year_event(); return false; "/> 
  </form>
 </div>

 <div id="show_description" >
  <?php echo $_GET['description']; ?>
 </div>

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

functions.php

<?php
 function hspacer($num_of_spaces) {
  $spaces = "";
  if ($num_of_spaces > 0)  for($i=0; $i<$num_of_spaces; $i++ )  $spaces .= "&nbsp;";

  return $spaces;
 }

 function vspacer($num_of_linefeeds) {
  $linefeeds = "";
  if ($num_of_linefeeds > 0)  for($i=0; $i<$num_of_linefeeds; $i++ )  $linefeeds .= "<br />";

  return $linefeeds;
 }
?>

myscripts.js

function create2DArray(row, col){
 var array2D = new Array(row);

 for (var i = 0; i < row; i++) {
  array2D[i] = new Array(col);
 }

 return array2D;
}


function check_year_event() {
 var years_and_events = create2DArray(10, 3);


 years_and_events[0][0] = 2001; 
 years_and_events[0][1] = "Karate Tournament"; 
 years_and_events[0][2] = "Annual karate tournament held globally"; 
 years_and_events[1][0] = 2002; 
 years_and_events[1][1] = "Beauty Pageant"; 
 years_and_events[1][2] = "Beauty pageant held globally"; 
 years_and_events[2][0] = 2003; 
 years_and_events[2][1] = "Film Festival"; 
 years_and_events[2][2] = "Film festival held globally"; 
 years_and_events[3][0] = 2004; 
 years_and_events[3][1] = "Singing Contest"; 
 years_and_events[3][2] = "Singing contest tournament held globally"; 
 years_and_events[4][0] = 2005; 
 years_and_events[4][1] = "Wedding"; 
 years_and_events[4][2] = "Wedding tournament held globally"; 
 years_and_events[5][0] = 2007; 
 years_and_events[5][1] = "Karate Tournament"; 
 years_and_events[5][2] = "Annual karate tournament held globally"; 
 years_and_events[6][0] = 2008; 
 years_and_events[6][1] = "Beaty Pageant"; 
 years_and_events[6][2] = "Beauty pageant held globally"; 
 years_and_events[7][0] = 2009; 
 years_and_events[7][1] = "Film Festival"; 
 years_and_events[7][2] = "Film festival held globally"; 
 years_and_events[8][0] = 2010; 
 years_and_events[8][1] = "Singing Contest"; 
 years_and_events[8][2] = "Singing contest tournament held globally"; 
 years_and_events[9][0] = 2011; 
 years_and_events[9][1] = "Wedding"; 
 years_and_events[9][2] = "Wedding tournament held globally"; 


 var year = document.getElementById('year_list').value;
 var event = document.getElementById('event_list').value;
 var found = false;

 for (var i = 0; i < years_and_events.length; i++) {
  if ((year == years_and_events[i][0]) && (event == years_and_events[i][1])) {
    document.getElementById('description').value = years_and_events[i][2];
    document.getElementById('send_notice').style.visibility = "hidden";
    document.getElementById('show_description').style.visibility = "visible";
    found = true;
    break;
   }
  }

 if (found == false) {
  document.getElementById('show_description').style.visibility = "hidden";
  document.getElementById('send_notice').style.visibility = "visible";
 }
}

4 Answers 4

2

You need to give the input a name. So:

<input name="description" />
Sign up to request clarification or add additional context in comments.

2 Comments

is it OK to have the ID as well?
It doesn't need an id attribute - that's just for CSS or JavaScript. Name is what's needed for the server.
1

Inside the show_description div replace $_GET['description'] with $description.

EDIT: I think I understand why you are confused now. If you want to display the value of the description input in the show_description div, you need to use javascript to do that. PHP is server side and it only runs once, when the page is requested by the browser. If you are doing anything that happens after the page is loaded, you need to use javascript. That said, make this change to your check_year_event() function.

 for (var i = 0; i < years_and_events.length; i++) {
  if ((year == years_and_events[i][0]) && (event == years_and_events[i][1])) {
    document.getElementById('description').value = years_and_events[i][2];
    document.getElementById('show_description').innerHTML = years_and_events[i][2];
    document.getElementById('send_notice').style.visibility = "hidden";
    document.getElementById('show_description').style.visibility = "visible";
    found = true;
    break;
  }
 }

And remove the echo $_GET['description'] from the index.php file

5 Comments

I just changed it to <?php echo $description; ?> but it doesn't show anything. It seems that the $description is an empty variable. How is it possible?
I think I got what you need now.
OMG... It worked!!! BTW, what is innerHTML??? Is that what made it work??? Can tell me what is that???
innerHTML is the javascript property of an element that specifies all the text inside of it. Mozilla - innerHTML
@exahex - innerHTML is a DOM property, it should be provided by any language implementing the W3C HTML5 draft, not just javascript.
1

You would need to set the name of the <input type="hidden"> like <input type="hidden" name="hiddenfield">

Then you can reference this field in the PHP by $_GET['hiddenfield']. Make sure the input is in the form.

Comments

1

You need to give your input a name, an id or both: <input type="hidden" id="foo">

A few side notes...

There's a very useful javascript library that you might want to try:

http://jquery.com/

It comes with multitudes of UI elements and plugins, and allows to do many things in a much simpler way than what you're currently writing.

You might also want to document yourself a bit on SQL injections, cross-site scripting and cross-site request forgery. A lot of stuff needs to be escaped in your code.

4 Comments

I did something like <input type="hidden" id="description" name="description" value="<?php echo $description; ?>" and then <?php echo $_GET['description']; ?>, still having the same error
That's because you've another field with the same name or id.
My bad, I had only scanned your code. Your description field is missing a name; without it, it won't be sent for use by $_GET. I'm suspecting that your undefined index is a php notice that comes from <?php echo $_GET['description']; ?>. It should likely be <?php echo $description; ?>.
I just changed it to <?php echo $description; ?> but it doesn't show anything. It seems that the $description is an empty variable. How is it possible?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.