Jump to content

Undefined index cmd using switch case


YinYangKim
Go to solution Solved by Ch0cu3r,

Recommended Posts

<html>

<head>
  <!--title>Hello</title-->
  <link rel="stylesheet" href="uvcs.css" type="text/css" />
</head>

<body>
  <div id=everything>
    <div id=header>
      This is the header
    </div>
    <div id=clear></div>
    <div id=navmenu>
      <div id=navmenu>
        <ul>
          <li>
            <a href="index.php?cmd=home">HOME</a>
          </li>
          <li>
            <!--submenu-->
            <a>VIEW</a>
            <ul>
              <li>
                <a href="index.php?cmd=student">STUDENT PROFILE</a>
              </li>
              <li>
                <a href="index.php?cmd=employee">EMPLOYEE</a>
                <!--subsubmenu-->
                <!--ul>
                  <li>
                    <a href=#>subsubmenu1</a>
                    <a href=#>subsubmenu2</a>
                  </li>
                </ul-->
              </li>
            </ul>
          </li>
          <li>
            <a href="index.php?cmd=courses">COURSES</a>
          </li>
          <li>
            <a href="index.php?cmd=aboutus">ABOUT UVCS</a>
          </li>
          <li>
            <a href="index.php?cmd=itsupport">IT SUPPORT</a>
          </li>
          <li>
            <a href="index.php?cmd=login">LOGIN</a>
          </li>
        </ul>
      </div>
    </div>
    <div id=clear></div>
    <div id=maincontent>
      <?php include("selector.php"); ?>
    </div>
    <div id=sidebar>
      side bar
    </div>
    <div id=clear></div>
    <div id=footer>
      Footer
    </div>
  </div>
</body>

</html>
<?php
  $cmd =$_GET['cmd'];
  switch($cmd)
  {
    case 'home': include_once "home.php";
    break;

    case 'student': include_once "student.php";
    break;

    case 'employee': include_once "employee.php";
    break;

    case 'courses': include_once "courses.php";
    break;

    case 'aboutus': include_once "aboutus.php";
    break;

    case 'itsupport': include_once "itsupport.php";
    break;

    case 'login': include_once "login.php";
    break;

    default: include_once "home.php";
    break;
  }
?>

These are my codes that supposedly would show home.php (which contains only the text "you are viewing home.php"), when you open the index.php. But for some reason I would get the line

 

Notice: Undefined index: cmd in C:\xampp\htdocs\UVCSPortal\selector.php on line 2

you are viewing home.php

 

I thought with these codes with would go directly to default case. But instead it reads the <?php include("selector.php"); ?> in index.php twice, I think.  I tried using isset, but couldn't understand it.

Link to comment
Share on other sites

 

Check $_GET['cmd'] exists using isset

$cmd = isset($_GET['cmd']) ? $_GET['cmd'] : 'home'; // if $_GET['cmd'] does not exist, set $cmd to home by default 

 

Hi, I did as you told and got home as output after <?php echo $cmd; ?>

 

I'm still wondering why it looks like my cmd gets checked twice. O_O

Link to comment
Share on other sites

What?

Notice: Undefined index: cmd in C:\xampp\htdocs\UVCSPortal\selector.php on line 2

you are viewing home.php

 

This is the output when I open index.php. Those two lines. If I click on the link with cmd = home, the first line disappears. Following that logic, on the first load of index.php, it checks the content of cmd twice, printing the first line that way because cmd is null and the 2nd line because it already contains home.

Link to comment
Share on other sites

The error is caused by this line:

 

$cmd =$_GET['cmd'];
The 'cmd' does not yet exist and you have done nothing to set a default.

 

This line:

 

default: include_once "home.php";
break;
Then causing the output "you are viewing home.php" because $cmd has fallen through all your switch statements and into the default clause.
Link to comment
Share on other sites

The error is caused by this line:

 

$cmd =$_GET['cmd'];
The 'cmd' does not yet exist and you have done nothing to set a default.

 

This line:

 

default: include_once "home.php";
break;
Then causing the output "you are viewing home.php" because $cmd has fallen through all your switch statements and into the default clause.

 

 

got a fix for this?

Link to comment
Share on other sites

  • Solution

didn't work. or maybe i used it wrong. i placed it before <?php include("selector.php"); ?> in my index.php

My code is to replace this line   $cmd =$_GET['cmd'];  in selector.php, so the first three lines should read like this in selector.php

<?php
  $cmd = isset($_GET['cmd']) ? $_GET['cmd'] : 'home';
  switch($cmd)
Link to comment
Share on other sites

 

My code is to replace this line   $cmd =$_GET['cmd'];  in selector.php, so the first three lines should read like this in selector.php

<?php
  $cmd = isset($_GET['cmd']) ? $_GET['cmd'] : 'home';
  switch($cmd)

It worked! Thanks a lot. Although I still don't get why this happened, considering I've used this code on other projects. Oh well.

Edited by YinYangKim
Link to comment
Share on other sites

You other project most probably didn't have display_errors enabled, or error_reporting was set to ignore notices.

 

When developing a script you should make sure error_reporting is set to E_ALL and display_errors is enabled.

Edited by Ch0cu3r
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.