0

可能重复:
PHP:“注意:未定义的变量”和“注意:未定义的索引”

我收到此通知:

PHP 通知:未定义索引:第 2 行 /home/.../savevote.php 中的 votefor

我怎样才能解决这个问题?

这是我在 savevote.php 中的第 2 行:

<?php
  $votefor = $_REQUEST["votefor"];

谢谢

这是代码:

<?php
  $votefor = $_REQUEST["votefor"];

  // Returns a random RGB color (used to color the vote bars)
  function getRandomColor()
  {
       $r = rand(128,255); 
       $g = rand(128,255); 
       $b = rand(128,255); 
       $color = dechex($r) . dechex($g) . dechex($b);
       echo "$color";
  }
  //Get the IP of the user
  $domain = $_SERVER["REMOTE_ADDR"];
  $today = date("m/d/Y");

  echo "<table id=\"tblResults\" align=\"center\">";

  //If votefor is null, then we're just viewing results, so don't log the IP
  if ($votefor != "")
  {

    //Load the addresses XML file
    $doc = new DOMDocument();
    $doc->load("../vote_dir/xml/addresses.xml");
    $addresses = $doc->getElementsByTagName("address");
    $pVoted = false;
    $pFound = false;

    //Loop through the addresses nodes and see if the person has voted before
    foreach( $addresses as $address )
    {
    $lastvisits = $address->getElementsByTagName("lastvisit");
    $lastvisit = $lastvisits->item(0)->nodeValue;

    $ips = $address->getElementsByTagName("ip");
    $ip = $ips->item(0)->nodeValue;

    if ($ip == $domain)
    {
         $pFound = true;
         if ($lastvisit == $today)
              $pVoted = true;
         else
         {
        $lastvisits->item(0)->nodeValue = $today;
        $doc->save("../vote_dir/xml/addresses.xml");
         }
         break;
    }
    else
         continue;
    }

    if ($pVoted == true) //Already voted
    {
        echo "<tr><td colspan=\"3\" class=\"message\">Έχετε ήδη ψηφίσει!</td></tr>";
    }
    else //Update the XML files
    {
    if ($pFound == false) //Add new node for IP and date to addresses.xml
    {
         echo "<tr><td colspan=\"3\" class=\"message\">Ευχαριστούμε που ψηφίσατε!</td></tr>";

         $newAddy = $doc->getElementsByTagName('addresses')->item(0);
         $newAddressElement = $doc->createElement('address');

         $newLastVisitElement = $doc->createElement('lastvisit');
         $newAddressElement->appendChild($newLastVisitElement);
         $newIPElement = $doc->createElement('ip');
         $newAddressElement->appendChild($newIPElement);

         $dayvalue = $doc->createTextNode($today);
         $dayvalue = $newLastVisitElement->appendChild($dayvalue);

         $ipvalue = $doc->createTextNode($domain);
         $ipvalue = $newIPElement->appendChild($ipvalue);

         $newAddy->appendChild($newAddressElement);

         $doc->save("../vote_dir/xml/addresses.xml");
    }
    else
    {
         echo "<tr><td colspan=\"3\" class=\"message\">Ευχαριστούμε για την ψήφο σας.</td></tr>";
    }
    // Update the vote
    $doc = new DOMDocument();
    $doc->load("../vote_dir/xml/results.xml");
    $pollitems = $doc->getElementsByTagName("pollitem");
    foreach( $pollitems as $pollitem )
    {
        $entries = $pollitem->getElementsByTagName("entryname");
        $entry = $entries->item(0)->nodeValue;
        if ($entry == $votefor)
        {
             $votes = $pollitem->getElementsByTagName("votes");
             $count = $votes->item(0)->nodeValue;
             $votes->item(0)->nodeValue = $count + 1;
             break;
        }
    }
    $doc->save("../vote_dir/xml/results.xml");
    }
  }
  else
  {
     echo "<tr><td colspan=\"3\" class=\"message\">Αποτελέσματα Ψηφοφορίας Μέχρι Στιγμής</td></tr>";
  }

  // Get max vote count
  $doc = new DOMDocument();
  $doc->load("../vote_dir/xml/results.xml");
  $maxvotes = 0;
  $pollitems = $doc->getElementsByTagName("pollitem");
  foreach( $pollitems as $pollitem )
  {
    $votes = $pollitem->getElementsByTagName("votes");
    $vote = $votes->item(0)->nodeValue;
    $maxvotes = $maxvotes + $vote;
  }
  // Generate the results table
  $doc = new DOMDocument();
  $doc->load("../vote_dir/xml/results.xml");
  $pollitems = $doc->getElementsByTagName("pollitem");
  foreach( $pollitems as $pollitem )
  {
    $entries = $pollitem->getElementsByTagName("entryname");
    $entry = $entries->item(0)->nodeValue;
    $votes = $pollitem->getElementsByTagName("votes");
    $vote = $votes->item(0)->nodeValue;
    $tempWidth = $vote / $maxvotes;
    $tempWidth = 300 * $tempWidth;
    $votepct = round(($vote / $maxvotes) * 100);
    echo "<tr><td width=\"20%\" class=\"polls\">$entry</td>";
    echo "<td width=\"30%\" class=\"resultbar\"><div class=\"bar\" style=\"background-color: ";
        getRandomColor();
        echo "; width: $tempWidth px;\">$votepct%</div></td><td width=\"20%\">($vote votes)</td></tr>";
  }
  echo "<tr><td class=\"total\" colspan=\"3\">$maxvotes άτομα ψήφισαν μέχρι τώρα.</td>";
  echo "</table>";
?>

@布莱恩

<script language="javascript">
         function setVote(voteName)
         {
            document.getElementById("votefor").value = voteName;
         }
         function confirmSubmit() 
         { 
        if (document.getElementById("votefor").value == "")
        {
             var agree=confirm("Παρακαλώ επιλέξτε μια απάντηση, για να ψηφίσετε"); 
             return false; 
        }
         } 
    </script>
4

5 回答 5

3

请求参数没有被传递。如果您知道为什么它可能会丢失并且只是想阻止通知,您可以说:

$votefor = isset( $_REQUEST["votefor"] ) ? $_REQUEST["votefor"] : null;
于 2012-05-21T15:03:02.760 回答
1

使用它是不安全的,$_REQUEST因为它可以是$_GETor $_POST,更好的是指定您想要的。

其次,您需要检查数组键是否存在。这可以通过array_key_exists(). 但不幸的是,这个功能有点慢。您可以使用该isset()函数替换它,但这表示null未设置值并false在它为空时返回。最好的方法是同时使用它们,首先是isset,然后是array_key_exists

<?php
if (isset($_POST['votefor']) || array_key_exists($_POST['votefor'])) {
    // do something
}
?>

或者仅isset在您确定该值不会为null.


如果您几乎 100% 确定votefor数组中存在索引,则需要对其进行调试。var_dump数组以查看其中有$_REQUEST哪些项目(和索引)并查看您做错了什么。

于 2012-05-21T15:04:15.577 回答
0

像这样处理它:

if(array_key_exists("votefor", $_REQUEST)) {
...
}
于 2012-05-21T15:02:03.387 回答
0

1/ 检查你有一个名为的请求参数votefor

2/ 检查你没有拼错

于 2012-05-21T14:59:46.743 回答
-2

您可以通过设置 error_reporting no 来忽略通知报告以显示它们

error_reporting(E_ALL & ~E_NOTICE);

于 2012-05-21T15:01:50.017 回答