2010-12-16 6 views
10

PHP에서 장바구니를 사용하고 있으며 모든 장소에서이 오류 "알림 : 정의되지 않은 색인 :"이 표시되는 것 같습니다. 오류는 다른 장소에서 유사한 코딩 비트를 나타냅니다. 예를 들어 사용자가 구독하기로 결정한 달을 기준으로 패키지 가격을 계산하는 코드가 있습니다. 오류가 지칭 여기서 I는 다음과 같은 변수를 가지고PHP 오류 : 알림 : 정의되지 않은 색인 :

$month = $_POST['month']; 
    $op = $_POST['op']; 

는 $ 개월 변수는 숫자 형태의 사용자 입력이, 그리고 $ 연산 변수는 값이 사용자가있는 vriable에 저장되어있는 다른 패키지이며 양식의 라디오 버튼에서 선택합니다.

나는 그것이 어떤면에서 분명하기를 바랍니다.

당신에게

편집 감사합니다 죄송합니다 사용자가 데이터를 전송할 때 그들이 사라 않음을 언급하는 것을 잊었다. 그러나 처음 페이지에 올 때이 오류가 표시됩니다. 내가 그것을 어떻게 없애 버릴 수 있도록 그것을 제거 할 수 있습니까?

<?php 
    $pack_1 = 3; 
    $pack_2 = 6; 
    $pack_3 = 9; 
    $pack_4 = 12; 
    $month = $_POST['month']; 
    $op = $_POST['op']; 
    $action = $_GET['action']; 

    if ($op == "Adopter") { 
     $answer = $pack_1 * $month; 
    } 

    if ($op == "Defender") { 
     $answer = $pack_2 * $month; 
    } 

    if ($op == "Protector") { 
     $answer = $pack_3 * $month; 
    } 

    if ($op == "Guardian") { 
     $answer = $pack_4 * $month; 
    } 

    switch($action) { 
     case "adds": 
      $_SESSION['cart'][$answer][$op]; 
      break; 
    } 
?> 
+1

나머지 코드는 게시하십시오. 정의되지 않은 색인 오류는 해당 키의 게시물 데이터가 보내지지 않고 색인이 '월'및 'op'임을 의미합니다. 뭔가를 다시 NULL로 설정하거나 그들은 전혀 보내지 않고 있고 폼에 문제가 있습니다. – DeaconDesperado

+0

전체 코드를 입력하여 검토 할 수 있습니다. –

+1

편집 : 죄송합니다. 사용자가 데이터를 제출할 때 사라지는 것을 잊어 버렸습니다. 그러나 처음 페이지에 올 때이 오류가 표시됩니다. 내가 그것을 어떻게 없애 버릴 수 있도록 그것을 제거 할 수 있습니까? – PHPNOOB

답변

27

당신은 설정되지 않은 배열 내에서 모든 인덱스에 액세스를 시도하고 있습니다 : -

이 코드입니다. 이것은 통지를 제기합니다.

코드가 php.ini의 error_reportingE_NOTICE을 포함하도록 설정된 서버로 옮겨 졌기 때문에 대부분 알아 차릴 수 있습니다. 어느 (권장하지 않음) E_ALL & ~E_NOTICE로는 error_reporting을 설정하여 통지를 억제하거나 액세스하기 전에 인덱스가 있는지 확인 : 나는 이름 '달'또는 '영업 이익'에 의해 더 폼 요소가 없을 수 있다고 생각

$month = array_key_exists('month', $_POST) ? $_POST['month'] : null; 
0

을 . HTML 소스 (제출시 오류가 발생하는 페이지의)에 실제로 이름 위에 html 요소가 있는지 확인할 수 있습니까?

0

정의되지 않은 색인은 배열 키가 설정되지 않았다는 것을 의미하므로 오류가 발생한 행 앞에 var_dump($_POST);die(); 존재하지 않는 배열 키를 얻으려고하는 것을보십시오.

0

이 경우 $ _POST 배열에는 오류에서 정의되지 않은 요소가 없다는 것을 의미합니다. PHP는 WARNING of FATAL ERROR 대신에 NOTICE를 발행합니다.

당신은 편집 php.ini 파일을 통해 작은 이벤트를 기록하거나 항목이 실제로는 isset을 사용하여 이미 초기화되어있는 경우 먼저 확인하여 처리 할 수 ​​있습니다()

3

분명히 $ _POST는 [ '달'] 설정되어 있지 않습니다. 어쩌면 HTML 양식 정의에 실수가 있거나 어쩌면 다른 것이 원인 일 수 있습니다. 원인이 무엇이든간에, 당신은 항상 변수가 사용하기 전에 존재하는지 확인, 그래서

if(isset($_POST['month'])) { 
    $month = $_POST['month']; 
} else { 
    //month is not set, do something about it, raise an error, throw an exception, orwahtever 
} 
+0

'$ _POST [ 'month']'가'null'로 설정되면 false를 반환하므로 'is_set'을 개인적으로 피합니다. 배열 키가 존재하는지 정말로 묻는다면,'array_key_exists'를 사용하십시오. – meagar

+2

@meagar :'$ _POST []'var은'multipart/form-data'에서 시작된 경우'NULL'을 포함하지 않을 것입니다. 하위 함수가 $ _POST를 통해 상태를 주입하는 경우에만 문제가 될 수 있습니다.이 상태는 널 (null)과 설정되지 않은 상태를 구별하는 데 더 많은 걱정이됩니다. – mario

2
한다

How I can get rid of it so it doesnt display it?

여기

사람들은 전문가가 아닌 (그리고 그것이) 사실을 말하려고하고 있지만 귀하의 경우에는 단순히해야 응용 프로그램 시작 부분에 다음을 추가하십시오.

error_reporting(E_ERROR|E_WARNING); 

이렇게하면 E_NOTICE보고가 비활성화됩니다. E_NOTICES는 이름이 말하는 것처럼 오류가 아니라주의 사항입니다. 이 내용을 확인하고 정의되지 않은 변수로 인해 오류가 발생하지 않는다는 것을 증명하는 것이 좋습니다.그러나 일반적인 경우는 PHP로 양식 입력을 처리하기 위해 비공식적이고 완벽하게 정상적인 것입니다.

또한 다음 번에 Google에 오류 메시지가 표시됩니다.

+0

그의 마지막 코멘트를 보면, 나는 그가 폼 제출을 먼저 확인하지 않는다고 생각한다. 통지는 아직 보내지 않은 데이터에 대해 처리가 이루어지기 때문에 발생합니다. – DeaconDesperado

+0

@DeaconDesperado : 가능합니다. 하나의 스 니펫은 마치 $ _POST 입력 변수가 무엇이든간에 스크립트 시작 부분에 현지화 된 것처럼 보입니다. 처리는 그 변수들 중 하나의 다른 'if'또는 단지 부울 상태에 의해 트리거 될 수 있습니다. ... 우리는 결코 알 수 없을 것입니다 :} – mario

+1

그리고 그것은 우리 시대의 위대한 신비 중 하나가 될 것입니다 ... 그것은 몇번이고 계속해서 게시되는 것을 멈추지 않을 것입니다. – DeaconDesperado

13

양식 처리기를 양식과 동일한 스크립트에 넣으시겠습니까? 그렇다면 포스트 값이 설정되기 전에 처리를 시도하고 있습니다 (모든 것이 실행 중입니다).

양식이 전송되었는지 검사하는 조건부에 모든 처리 코드를 포함하십시오.

if(isset($_POST) && array_key_exists('name_of_your_submit_input',$_POST)){ 
//process form! 
}else{ 
//show form, don't process yet! You can break out of php here and render your form 
} 

스크립트는 절차 적으로 프로그래밍 할 때 위에서 아래로 실행됩니다. 양식을 보내지 않은 경우 프로그램에서 처리 논리를 무시할 수 있는지 확인해야합니다. 마찬가지로, 처리 한 후, 당신은 내가 억누르고 통지 또는 오류의 습관을하지 않을

header('Location:http://www.yourdomainhere.com/formsuccess.php'); 

처럼 뭔가 성공 페이지로 리디렉션합니다.

이러한 문제가 발생하여 장바구니를 만들려고 시도하는 대신 Magento 또는 OsCommerce와 같은 성숙한 전자 상거래 솔루션을 활용하는 것이 좋습니다. 장바구니는 높은 수준의 보안이 필요한 인터페이스이며, 이러한 종류의 POST 문제로 고생하는 경우 나중에 두통을 겪을 수 있음을 보장 할 수 있습니다. 몇 가지 훌륭한 안정적인 릴리스가 있습니다. 일부는 단순한 개체 모델처럼 단순하며 다운로드 할 수 있습니다.

+0

안녕하세요, 네 양식은 스크립트와 같은 페이지에, 그래서 내가 그 문제 중 하나입니다, 오류보고 코드 퍼팅 오류가 지금은 있지만, 다른 코드의 문제가있는 메신저, 그래서 내가 생각합니다 정말 모든 것을 재구성해야합니다! – PHPNOOB

+0

불행히도 내가 선반 카트를 벗어 버릴 수있는 곳은 사용자가 동물 등을 입양 할 수있는 PHP 웹 사이트를 동적 웹 사이트에 구축해야하므로 배제해야합니다. 강사가 모든 것을 끝내기를 원하는 방식으로, – PHPNOOB

+0

아, 그러면 숙제 일 것입니다. 이것은이 부분들을 둘러싼 다소 까다로운 단어입니다. http://www.webforcecart.com/ – DeaconDesperado

-1

분명히 GET 및/또는 POST 변수가 존재하지 않습니다. 단순히 "isset"을 테스트하십시오. (의사) : 이것은 단지 PHP는 통지 메시지가

if(isset($_GET['action'];)) {$action = $_GET['action'];} else { RECOVER FROM ERROR CODE } 
2

, 그것은 php.ini의 구성은 vtiger 표준을 따라하지 않는 것, 당신에에 E_ALL & ~ E_NOTICE을보고 오류를 설정하여이 메시지를 해제 할 수 있습니다 php.ini 예를 들어 error_reporting(E_ALL&~E_NOTICE) 다음에 아파치를 다시 시작하여 변경 사항을 반영하십시오.

0

데이터를 보내는 양식에 method = "post"를 사용했는지 확인하십시오.

-3

올바른 입력 삭제가없는 POST 또는 GET 된 VAR을 절대 신뢰해서는 안됩니다. 예를 들어, $ month이 있더라도 숫자라고 확신 할 수 없습니다.

// Stop PHPs dangerous name handling 
function undefined_name_error($errno, $errstr, $errfile='', $errline=0, $errcontext=NULL) { 
    if (stripos($errstr, 'undefined') !== false) 
     return trigger_error("$errstr in $errfile on line $errline;\t", E_USER_ERROR); 
    else 
     return false; 
} 
set_error_handler('undefined_name_error', E_NOTICE); 

을 그리고 스크립트가 나중에 작동하지 않을 경우, 당신은 당신의 코드를 수정해야한다 : 즉, 스크립트의 상단에 이런 식으로 뭔가를 추가해야합니다 먼저 말했다.

+1

이 답변은 이전 것에 아무 것도 추가하지 않습니다.대답하기 전에 이전 대답을 읽으십시오. 특히 4 세의 질문에. –

1

이 시도 :

$month = (isset($_POST['month'])) ? $_POST['month'] : ''; 

$op = (isset($_POST['op'])) ? $_POST['op'] : ''; 
0
<?php 
if ($_POST['parse_var'] == "contactform"){ 


     $emailTitle = 'New Email From KumbhAqua'; 
     $yourEmail = '[email protected]'; 

     $emailField = $_POST['email']; 
     $nameField = $_POST['name']; 
     $numberField = $_POST['number']; 
     $messageField = $_POST['message']; 

     $body = <<<EOD 
<br><hr><br> 
    Email: $emailField <br /> 
    Name: $nameField <br /> 
    Message: $messageField <br /> 


EOD; 

    $headers = "from: $emailField\r\n"; 
    $headers .= "Content-type: text/htmml\r\n"; 
    $success = mail("$yourEmail", "$emailTitle", "$body", "$headers"); 

    $sent ="Thank You ! Your Message Has Been sent."; 

} 

?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>:: KumbhAqua ::</title> 

    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 
     <link rel="stylesheet" href="style1.css" type="text/css"> 

</head> 

<body> 
    <div class="container"> 
     <div class="mainHeader"> 
      <div class="transbox"> 

       <p><font color="red" face="Matura MT Script Capitals" size="+5">Kumbh</font><font face="Matura MT Script Capitals" size="+5" color=                   "skyblue">Aqua</font><font color="skyblue"> Solution</font></p> 
       <p ><font color="skyblue">Your First Destination for Healthier Life.</font></p> 
        <nav><ul> 
         <li> <a href="KumbhAqua.html">Home</a></li> 
         <li> <a href="aboutus.html">KumbhAqua</a></li> 
         <li> <a href="services.html">Products</a></li> 
         <li class="active"> <a href="contactus.php">ContactUs</a></li> 

        </ul></nav> 
       </div> 
      </div> 
     </div> 
        <div class="main"> 
         <div class="mainContent"> 
          <h1 style="font-size:28px; letter-spacing: 16px; padding-top: 20px; text-align:center; text-transform: uppercase; color:         #a7a7a7"><font color="red">Kumbh</font><font color="skyblue">Aqua</font> Symbol of purity</h1> 
           <div class="contactForm"> 
            <form name="contactform" id="contactform" method="POST" action="contactus.php" > 
             Name :<br /> 
             <input type="text" id="name" name="name" maxlength="30" size="30" value="<?php echo "nameField"; ?>" /><br /> 
             E-mail :<br /> 
             <input type="text" id="email" name="email" maxlength="50" size="50" value="<?php echo "emailField"; ?>" /><br /> 
             Phone Number :<br /> 
             <input type="text" id="number" name="number" value="<?php echo "numberField"; ?>"/><br /> 
             Message :<br /> 
             <textarea id="message" name="message" rows="10" cols="20" value="<?php echo "messageField"; ?>" >Some Text...          </textarea> 
             <input type="reset" name="reset" id="reset" value="Reset"> 
             <input type="hidden" name="parse_var" id="parse_var" value="contactform" /> 
             <input type="submit" name="submit" id="submit" value="Submit"> <br /> 

             <?php echo "$sent"; ?> 

            </form> 
             </div> 
          <div class="contactFormAdd"> 

            <img src="Images/k1.JPG" width="200" height="200" title="Contactus" /> 
            <h1>KumbhAqua Solution,</h1> 
            <strong><p>Saraswati Vihar Colony,<br /> 
            New Cantt Allahabad, 211001 
            </p></strong> 
            <b>DEEPAK SINGH &nbsp;&nbsp;&nbsp; RISHIRAJ SINGH<br /> 
            8687263459 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;8115120821 </b> 

          </div> 
         </div> 
        </div> 

          <footer class="mainFooter"> 
          <nav> 
          <ul> 
           <li> <a href="KumbhAqua.html"> Home </a></li> 
           <li> <a href="aboutus.html"> KumbhAqua </a></li> 
           <li> <a href="services.html"> Products</a></li> 
           <li class="active"> <a href="contactus.php"> ContactUs </a></li> 
          </ul> 
           <div class="r_footer"> 


      Copyright &copy; 2015 <a href="#" Title="KumbhAqua">KumbhAqua.in</a> &nbsp;&nbsp;&nbsp;&nbsp; Created and Maintained By- <a title="Randheer                                                        Pratap Singh "href="#">RandheerSingh</a>                   </div> 
          </nav> 
          </footer> 
    </body> 
</html> 

    enter code here 
+0

두 가지 오류가 있습니다. 1) 정의되지 않은 색인 : parse_var 2) 정의되지 않은 변수가 전송되었습니다. – RandheerPratapSingh

-1

모든 오류를 숨기려면, 그것을위한 코드는입니다 :

<?php 
     error_reporting(0); 
     @ini_set(‘display_errors’, 0); 
//THE REST OF THE CODE 
?> 
0

내가 먼저했다 모든 변수를 정의 않았다 I 확인했다. 나는 그것이 PHP에서는 필요하지 않다는 것을 알고 있지만 오래된 습관은 많이 죽는다.물론 test_input의

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name1"])) { 
    $name1Err = " First Name is a required field."; 
    } else { 
     $name1 = test_input($_POST["name1"]); 
    // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$name1)) { 
     $name1Err = "Only letters and white space allowed"; 

는 트림, strilashes, 그리고 반드시 htmlspecialchars 않는 또 다른 기능입니다 : 그럼이 같은 정보를 sanatized. 나는 입력이 꽤 잘 소독되었다고 생각한다. 내가 한 일을 보여주는 것을 무례하게하려고하지는 않습니다. 이메일에 올 때 나는 적절한 형식인지 확인하기 위해 점검했다. 나는 실제 변수가 지역 변수이고 일부 변수가 글로벌 변수라는 사실에 진정한 답이 있다고 생각한다. 지금 당장은 오류없이 작동하고 있습니다. 지금은 매우 바빠서 대답은 오류로 처리하지 않을 것입니다. 걱정하지 마라. 지금 당장 비판적으로 중요하지는 않다.

-1

태그가 올바르게 닫혔는지 확인하십시오. 그리고 닫는 태그는 루프 안에 포함되지 않습니다. (루프 구조에 포함 된 경우).

+0

솔루션에 대한 자세한 설명을 입력하십시오. – clemens

+0

제 경우에는 양식 태그를 대체하여 문제를 해결했습니다. \t \t <양식 ID = "idsent 'NAME ="idsent "METHOD ="POST "조치 =" "> \t \t \t \t \t \t \t \t \t <= $ 행 [ 'ID']?> \t <= $ 행 [ 'ADRS를']; ?> \t <= $ 행 [ '의 ownr']?> \t <= $ 행 [ 'rmrk']?> \t \t 에코 ''; \t} ?> \t 이렇게하면; 라디오 버튼 태그가 루핑 된 후 닫음 블록. –

+0

답변을 편집하고 형식이 지정된 소스 코드를 추가해야합니다. 읽을 수 없습니다. – clemens

관련 문제