왜 지구에서 “ undefined_index ” 오류가 발생합니까?

맞습니다. 저는 여기 벽에 머리를 부딪 히고 있습니다. 믿을 수 없을 정도로 간단하지만 정의되지 않은 색인 오류가 계속 발생합니다. 이러한 변수의.

function meta_genus_species() { global $post; if (isset($post)) { $custom = get_post_custom($post->ID); } if (isset($custom)) { $genus = $custom["genus"][0]; $species = $custom["species"][0]; $etymology = $custom["etymology"][0]; $family = $custom["family"][0]; $common_names = $custom["common_names"][0]; } ?> <label>Genus:</label> <input name="genus" value="<?php if(isset($genus)) { echo $genus; } ?>" /> <label>Species:</label> <input name="species" value="<?php if(isset($species)) { echo $species; } ?>" /> <p><label>Etymology:</label><br /> <textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology)) { echo $etymology; } ?></textarea></p> <label>Family:</label> <input name="family" value="<?php if(isset($family)) { echo $family; } ?>" /> <label>Common Names:</label> <input name="common_names" value="<?php if(isset($common_names)) { echo $common_names; } ?>" /> <?php } 

모든 변수에 대해 다음 정보를 얻습니다.

알림 : 정의되지 않은 색인 : genus in […] sf-species-profiles.php on line 207

아이디어가 있습니까?

설명

  • 코드의 어떤 줄이 207 행입니까?
  • $ genus = $ custom [" genus "] [0];

답변

그것 ” 일반적으로 존재하지 않는 키로 배열 구성원에 액세스하려고 할 때 일반적인 PHP 오류입니다.

$array = array( "hello" => "world" ); echo $array["foobar"]; // undefined index 

UPDATE : 이 경우에는 변수를 설정하는 루프에서 r 과정의 색인.

foreach ( array( "genus", "species", "etymology", "family", "common_names" ) as $var ) $$var = isset( $custom[ $var ][0] ) ? $custom[ $var ][0] : ""; echo $genus; // prints value of $custom["genus"][0] if set, otherwise empty 

댓글

  • (pseudo) isset ($ custom [genus]) > $ genus = $ custom [genus]? 확실히 그것은 ' 일을하는 지옥처럼 긴 바람의 방법입니다. $ post에서 isset을 사용하고 $ custom을 사용하면 해당 변수가 iv id =가 아니라는 것을 의미합니다. '이 문제가 처음 발생했습니다. “9d6711ae97″>

$ post에 데이터가없는 한 ' 존재하지 않습니까?

  • 전혀 아니지만 어느 쪽이든 X가 존재한다고 가정해서는 안됩니다. 업데이트 된 답변보기 🙂
  • Answer

    당신은 이미 인쇄 할 때마다 isset ()을 호출하고 있습니다. 데이터를 화면에 표시합니다.

    이 부분을 건너 뛰지 않는 이유 :

    if (isset($custom)) { $genus = $custom["genus"][0]; $species = $custom["species"][0]; $etymology = $custom["etymology"][0]; $family = $custom["family"][0]; $common_names = $custom["common_names"][0]; } 

    입력을 인쇄 할 때 다음을 수행하십시오.

    <label>Genus:</label> <input name="genus" value="<?php if( isset( $custom["genus"][0] ) ) { print $custom["genus"][0]; } ?>" /> 

    추가 변수 할당이 필요하지 않으며 여기에 알림이 생성됩니다.

    BTW …

    출력을 양식으로 인쇄하기 전에 이스케이프해야합니다.

    <label>Genus:</label> <input name="genus" value="<?php if(isset($genus)) { echo esc_attr( $genus ); } ?>" /> <label>Species:</label> <input name="species" value="<?php if(isset($species)) { echo esc_attr( $species ); } ?>" /> <p><label>Etymology:</label><br /> <textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology)) { echo esc_textarea( $etymology ); } ?></textarea></p> <label>Family:</label> <input name="family" value="<?php if(isset($family)) { echo esc_attr( $family ); } ?>" /> <label>Common Names:</label> <input name="common_names" value="<?php if(isset($common_names)) { echo esc_attr( $common_names ); } ?>" /> 

    댓글

    • 예 , 나는 ' 작업 코드를 얻을 때까지 ' 도피하지 않습니다 .. 🙂 나는 당신의 방식으로 작업을 고려했습니다. ' 제안했지만 ' 나는 코드 미학의 괴물이자 추악 해 보이는 사랑하는 주님입니다! 감사합니다.
    • 그때는 다른 것 같아요 … ' 데이터가 이스케이프되고 불필요한 정보를 소개하지 않는 한 화면에 인쇄하지 않습니다. 복잡성은 코드를 " 예쁘게 " 만듭니다.
    • LOL! IMHO 바닥 글에 제약 링크가있는 해킹 된 사이트가 그 코드보다 더 못 생겼다고 생각합니다. 😉
    • ' $custom["genus"][0]가 "$genus보다 div> 못생긴 ". @mfields ' 코드는 그렇지 않으면 귀하의 코드와 정확히 동일하지만 ' 오류를 반환하지 않습니다. 작업을 완료하는 데 필요한만큼의 코드를 작성하십시오. 더 이상도 그 이하도 아닙니다 .
    • 아, EAMann이 지적했듯이 ' 내가보기에 추악한 탈출구가 아닙니다. ' s $ custom [" 속 "] [0]입니다. 저는 ' 데이터를 추악하게 만들었 기 때문에 ' 데이터를 이스케이프하지 않겠다고 제안하지 않았습니다 .. 🙂

    답변

    이 게시물에 대한 트위터 토론에서 나온 대안은 방법 을 변경하는 것입니다. em> you “re getting your data. get_post_custom() 는 배열의 배열을 반환하며 골칫거리입니다. . 대신 get_post_custom_values() 를 사용하는 것이 좋습니다.

    function meta_genus_species() { global $post; $genus = get_post_custom_values( "genus", $post->ID ); $species = get_post_custom_values( "species", $post->ID ); $etymology = get_post_custom_values( "etymology", $post->ID ); $family = get_post_custom_values( "family", $post->ID ); $common_names = get_post_custom_values( "common_names", $post->ID ); ?> <label>Genus:</label> <input name="genus" value="<?php if(isset($genus[0])) { echo esc_attr( $genus[0] ); } ?>" /> <label>Species:</label> <input name="species" value="<?php if(isset($species[0])) { echo esc_attr( $species ); } ?>" /> <p><label>Etymology:</label><br /> <textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology[0])) { echo esc_attr( $etymology ); } ?></textarea></p> <label>Family:</label> <input name="family" value="<?php if(isset($family[0])) { echo esc_attr( $family ); } ?>" /> <label>Common Names:</label> <input name="common_names" value="<?php if(isset($common_names[0])) { echo esc_attr( $common_names ); } ?>" /> <?php } 

    맞춤 값에 대한 더 나은 대안은 맞춤 메타를 사용하는 것입니다. 고유 한 것으로 정의 할 수 있습니다. 그러면 사용자 지정 메타를 DB에서 다시 가져 오면 “하나의 멤버 만있는 인덱스 배열이 아닌 하나의 값을 갖게됩니다. 고려할 사항입니다.

    댓글

    댓글

    • EAMann에게 감사드립니다. ' 집에 도착하면 맞춤 값 / 메타를 조사한 다음 그 접근 방식을 고려합니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다