2017-12-30 15 views
0

양식의 일부 항목을 products이라는 내 표에 삽입하려고합니다. 양식은 다음과 같습니다정의되지 않은 색인 오류 메시지 PHP

form

당신은 내가 더 많은 공급 업체를 추가하는 링크를 언급 볼 수 있듯이 : + 단순히 폼에 새 행을 추가을. 그리고 그 뒤에 스크립트는 이것이다 :

<script> 
     $("#addbtn").click(function(){ 
      var next = parseInt($('#counter').val()) + 1; 
      $("#group").append("<table class='table table-hover'><tr><th style='padding-left:10px'>Name of supplier ("+next+")</th><th>Terms of sending</th><th>Guarantee</th><th>Price</th><th>Colors (use , for separation)</th></tr><tr><td style='padding-left:10px'><input name='supplier_name_("+next+")' type='text'></input></td><td><input name='supplier_sending_("+next+")' type='text'></input></td><td><input name='supplier_guarantee_("+next+")' type='text'></input></td><td><input name='supplier_price_("+next+")' type='text'></input></td><td><input name='supplier_colors_("+next+")' type='text'></input></td></tr></table>"); 
      $('#counter').val(next); 
     }); 
     </script> 

이제 어떻게 내가 원하는 것은 사용자가 배열 테이블에 양식에 입력 한 모든 값을 삽입하는 것입니다.

// supplier info 
    $supplier_name_1 = $_POST['supplier_name_1']; 
    $supplier_sending_1 = $_POST['supplier_sending_1']; 
    $supplier_guarantee_1 = $_POST['supplier_guarantee_1']; 
    $supplier_price_1 = $_POST['supplier_price_1']; 
    $supplier_colors_1 = $_POST['supplier_colors_1']; 
    $supplier_info_1 = array($supplier_name_1, $supplier_sending_1, $supplier_guarantee_1, $supplier_price_1, $supplier_colors_1); 
    $proSupply_1 = json_encode($supplier_info_1); 

    for($p=2;$p<=5;$p++){ 
     $supplier_name_ . $p = isset($_POST['supplier_name_'.$p.'']); 


$supplier_sending_ . $p = isset($_POST['supplier_sending_'.$p.'']); 
      $supplier_guarantee_ . $p = isset($_POST['supplier_guarantee_'.$p.'']); 
      $supplier_price_ . $p = isset($_POST['supplier_price_'.$p.'']); 
      $supplier_colors_ . $p = isset($_POST['supplier_colors_'.$p.'']); 
      $supplier_info_ . $p = array($supplier_name_ . $p, $supplier_sending_ . $p, $supplier_guarantee_ . $p, $supplier_price_ . $p, $supplier_colors_ . $p); 
      $proSupply_ . $p = json_encode($supplier_info_ . $p); 
      $supplier_info_ . $p = array($supplier_name_ . $p, $supplier_sending_ . $p, $supplier_guarantee_ . $p, $supplier_price_ . $p, $supplier_colors_ . $p); 
      $proSupply_ . $p = json_encode($supplier_info_ . $p); 

      if(!empty($supplier_name_ . $p)&&(!empty($supplier_sending_ . $p))&&(!empty($supplier_guarantee_ . $p))&&(!empty($supplier_price_ . $p))&&(!empty($supplier_colors_ . $p))){ 
       if($p == 2){ 
        $sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_1"; 
       }else if($p > 2){ 
        $i = $p-1; 
        $sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_".$i; 
       } 
       if ($con->query($sql) === TRUE){ 
        $insert_suppliers = " 
        INSERT INTO `products` (`supplier_info_" . $p . "`) 
        VALUES ('$proSupply_" . $p . "') 
        "; 
        $run_suppliers = mysqli_query($con,$insert_suppliers); 
        if(!$run_product){ 
         error_reporting(E_ALL); 
         die(mysqli_error($con)); 
        } 
       }else{ 
        error_reporting(E_ALL); 
        die(mysqli_error($con)); 
       } 
      } 
     } 

어떤이 코드가하는 일은이 기본적으로 FIRST 공급 업체에 대한 사용자가 + 기호를 클릭 한 경우 그 다음, FOR LOOP가 시작 모든 정보를 얻을 수 있다는 것입니다 : 그래서하기 위해,이 코딩 모든 필요한 정보를 얻습니다.

그런 다음 정의 된 변수가 비어 있지 않으면 해당 테이블에 새 FIELD를 추가합니다. 그런 다음 해당 사용자 정의 필드에 배열을 삽입하기 시작합니다.

그래서보기 좋고 깨끗하지만 많은 오류를 반환합니다!

정의되지 않은 인덱스 : 줄에 supplier_name_2 11

그리고 선 (11)가 여기에 표시됩니다 :

$supplier_name_ . $p = $_POST['supplier_name_'.$p.'']; 

다른 모든 오류이 하나 (정의되지 않은 인덱스처럼 & 정의되지 않은 제 1 회 오류는 이것이다 For 루프에서 지정한 모든 입력 이름의 변수).

당신이 이것에 대해 조금이라도 궁금한 점이 있으면 알려주세요. 정말 고마워요. 감사합니다 :)

UPDATE :

:

["supplier_name_1"]=> 
    string(10) "supplier 1" 
    ["supplier_sending_1"]=> 
    string(7) "terms 1" 
    ["supplier_guarantee_1"]=> 
    string(11) "guarantee 1" 
    ["supplier_price_1"]=> 
    string(7) "price 1" 
    ["supplier_colors_1"]=> 
    string(8) "colors 1" 
    ["supplier_name_2"]=> 
    string(10) "supplier 2" 
    ["supplier_sending_2"]=> 
    string(7) "terms 2" 
    ["supplier_guarantee_2"]=> 
    string(11) "guarantee 2" 
    ["supplier_price_2"]=> 
    string(7) "price 2" 
    ["supplier_colors_2"]=> 
    string(8) "colors 2" 
    ["supplier_name_3"]=> 
    string(10) "supplier 3" 
    ["supplier_sending_3"]=> 
    string(7) "terms 3" 
    ["supplier_guarantee_3"]=> 
    string(11) "guarantee 3" 
    ["supplier_price_3"]=> 
    string(7) "price 3" 
    ["supplier_colors_3"]=> 
    string(8) "colors 3" 
    ["counter"]=> 
    string(1) "3" 

그리고 지금 얻을 오류 다음과 같습니다

내가 넣어 위해서 var_dump ($ _ POST),이 얻을

정의되지 않은 변수 : supplier_name_

정의되지 않은 변수 : supplier_sending_

정의되지 않은 변수 : supplier_guarantee_

정의되지 않은 변수 :

정의되지 않은 변수를 supplier_price_ : supplier_colors_

+0

$ supplier_name_을 (를) 사용할 수 있습니다. $ p = isset ($ _ POST [ '공급자 _ 이름'. $ p. '']); – Deep

+0

PHP에서 정의되지 않은 오류가 발생하는 곳에서 isset()을 사용합니다. – Deep

+0

undefined가 아닌 경우 값을 사용하십시오. – Deep

답변

1

당신은 HTML에서 supplier_name_("+next+")하지만, PHP에서 $_POST['supplier_name_'.$p.''] 있습니다. 그것은()와 다릅니다.var_dump ($_POST); PHP에서 및 HTML 입력 이름이 오류 생존 라인의 POST 키 이름과 일치하는지 확인하십시오.

업데이트 :

가변 변수를 사용중인 것으로 보입니다. 대신

$supplier_name_ . $p = isset($_POST['supplier_name_'.$p.'']); 

${'supplier_name_' . $p} = isset($_POST['supplier_name_'.$p.'']); 

또는

${"supplier_name_$p"} = isset($_POST['supplier_name_'.$p.'']); 

가 작동하는지 http://php.net/manual/en/language.variables.variable.php

가 'supplier_name_'다른 사람에게 적용을 참조하십시오.

+0

고마워, 그랬어. 그 결과를 내 질문에 대한 업데이트로 게시했다. 그것을보십시오. 감사! – dudousloubou

+0

Ok ... 내 대답을 업데이트했습니다 –

0

당신의 업데이트 된 질문에 따르면, 나는 그 루프가 $ p = 3까지 망가져 있다고 믿습니다. 그러나 조건을 위해 정적 번호 5를 사용했습니다.

$ p 값이 비어 있거나 반복 번호가 존재하지 않는다고 말할 수 있습니다. 4와 5가 그 이유입니다.

$ p < = 5를 직접 사용하지 말고 정확한 길이를 사용하고 루프에서이 조건을 수정하고 5를 동적 숫자로 바꾸십시오.

5는 길이 변수로 대체해야합니다.

+0

for 루프를 $ p = 3으로 설정하여 여러 번 시도했지만이 문제는 여전히 남아 있습니다. – dudousloubou

+0

먼저 내 대답에 제발 제안하십시오. 여러 문제를 다루고있는 것일 수 있습니다. 업데이트의 오류를 감안할 때 $ p는 아직 아무 관련이 없습니다. –

관련 문제