Question

I'm running into a server notice that doesn't seem to effect the loading of my pages but nonetheless creates a new entry in the error log every time a page is loaded... That error is: PHP Notice: Undefined index: thing in C:\File Location\htdocs\index.php on line 1

I'm not sure whether the problem is actually on the first line or on a subsequent line, so I included a modified version of the whole file. The weird thing for me is that there's an identical line of code on several other files and it doesn't raise an issue in them. Also, the value is correctly extracted and all is well, I just don't know what to change in order to avoid the notice.

$thingvalue = $_REQUEST['thing'];

include("mdetect.php");

  $iphoneTierHomePage = 'mobilemain.php';
  $iphoneTierMobilePage = 'mobilepage.php?thing=' . $thingvalue;
  $genericMobileDeviceHomePage = 'mobilemain.php';
  $genericMobileDeviceMobilePage = 'mobilepage.php?thing=' . $thingvalue;
  $line1 = define('WP_USE_THEMES', true);
  $line2 = require('./wp-blog-header.php');
  $desktopPage == $line1 + $line2;

  $uagent_obj = new uagent_info();

  function AutoRedirectToProperHomePage()
  {
  global $thingvalue, $uagent_obj, $iphoneTierHomePage, $genericMobileDeviceHomePage, $iphoneTierMobilePage, $genericMobileDeviceMobilePage, $desktopPage;

  if ($thingvalue == ''){

      if ($uagent_obj->isTierIphone == $uagent_obj->true) 
      header ('Location: '.$iphoneTierHomePage);

      else if ($uagent_obj->DetectMobileQuick() == $uagent_obj->true) 
      header ('Location: '.$genericMobileDeviceHomePage);

      else
      header ('Location: '.$desktopHomePage);
    }
    if ($thingvalue != ''){
        if ($uagent_obj->isTierIphone == $uagent_obj->true) 
        header ('Location: '.$iphoneTierMobilePage);

        else if ($uagent_obj->DetectMobileQuick() == $uagent_obj->true) 
        header ('Location: '.$genericMobileDeviceMobilePage);

        else
        header ('Location: '.$desktopPage);
    }
  }

AutoRedirectToProperHomePage();
Was it helpful?

Solution

It's referring to the array index for the first line in index.php: Try this:

$thingvalue = empty($_REQUEST['thing']) ? '' : $_REQUEST['thing'];

OTHER TIPS

It is trying to reference the index thing inside the $_REQUEST superglobal. If someone is viewing that page directly and was not posted via a form or directed with a ?thing=foobar in the query string, PHP will show that notice. I'd recommend not using $_REQUEST as it checks both $_GET and $_POST which is not very secure/practical - then check if it is set, and if not, taking some failsave action:

try
{
    if(!isset($_POST['thing']))
    {
        throw new Exception('No direct access. Please use our <a href="http://www.mysite.com/contact">Contact form</a>');
    }
    else
    {
        $thingvalue = $_POST['thing'];
    }
}
catch(Exception $e)
{
    echo $e->getMessage();
    exit();
}

The issue is that you are trying to get the value of thing here $thingvalue = $_REQUEST['thing']; before checking if the value exists first.

try this first

if( !isset( $_REQUEST['thing']) )
{
  do something because its missing
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top