Miksi maan päällä saan “ undefined_index ” -virheitä?

Oikea, törmään täällä pääni seinää vasten. Olen varma, että se on jotain uskomattoman yksinkertaista, mutta saan jatkuvasti määrittelemättömiä hakemistovirheitä kaikilla näistä muuttujista.

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 } 

Saan tämän jokaiselle muuttujalle:

Huomautus : Määrittelemätön hakemisto: suku […] sf-species-profiles.php -rivillä 207

Onko sinulla ideoita?

Kommentit

  • mikä koodirivi on rivi 207?
  • $ genus = $ custom [” -suku ”] [0];

Vastaa

Se ” yleinen PHP-virhe, yleensä kun yrität käyttää taulukon jäsentä olemattomalla avaimella;

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

Tarkista avain ensin isset( $array["foobar"] );

PÄIVITYS: Tässä tapauksessa halusin silmukassa, joka asettaa muuttujat puolestasi tarkistamalla r indeksoi prosessissa.

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 

Kommentit

  • Ehdotatko, että käytän issetiä jokaisessa rivi, kuten (pseudo) isset ($ custom [genus]) > $ genus = $ custom [genus]? Varmasti se ’ on helvetin pitkävetoinen tapa tehdä asioita. Minusta tuntui (ja tämä on ensimmäinen kerta, kun ’ olen kohdannut tämän ongelman), että issetin käyttäminen $ postissa ja sitten myös $ custom tarkoittaa, että muuttujia ei ole ’ t set / don ’ ei ole olemassa, ellei tietoja ole $ postissa?
  • Ei lainkaan – mutta kumpi tahansa, sinä ei pitäisi koskaan olettaa, että X on olemassa. Katso päivitetty vastaukseni 🙂

Vastaa

Soitat jo issetille () joka kerta, kun tulostat tiedot näytölle.

Miksi ei vain ohittaa tätä osaa:

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]; } 

ja tee tämä, kun tulostat syötteen:

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

Muuttujan ylimääräisiä määrityksiä ei tarvita, ja ne aiheuttavat ilmoitusten luomisen tähän.

BTW …

Sinun on poistuttava tulosteesta, ennen kuin se tulostetaan muodossa:

<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 ); } ?>" /> 

Kommentit

  • Joo , En vaivaudu pakenemaan, kunnes olen ’ saanut toimintakoodin .. 🙂 Ajattelin tehdä sitä samalla tavalla kuin sinäkin ’ id = ”9d6711ae97”>

olen ehdottanut, mutta minä ’ olen vähän koodiestetiikkafriikki ja rakas Herra, joka näyttää rumalta! Kiitos.

  • Luulemme, että olemme erilaisia silloin … En vaivaa ’ vaivaudu tulostamaan ruudulle, ellei tietoja ole pakenemassa enkä koskaan aiheuta tarpeetonta monimutkaisuus tee koodista ilmeinen ” melko ”.
  • LOL! IMHO mielestäni hakkeroidut sivustot, joissa on farmaseuttisia linkkejä alatunnisteessa, ovat ruma kuin koodi. 😉
  • Älä ’ älä ripustu $custom["genus"][0] ollessaan ” rennompi ” kuin $genus. @mfields ’ -koodi on muuten täsmälleen sama kuin sinun, mutta se voitti ’ ei palauta virhettä. Kirjoita niin paljon koodia kuin tarvitset työn saamiseksi, ei enempää, ei vähemmän .
  • Heh, kuten EAMann huomauttaa, se ei ole ’ t pakeneminen, jonka pidän rumana – se ’ s $ custom [” suku ”] [0] pikemminkin kuin $-suku, johon viittasin. ’ en todellakaan ole ehdottanut, ettet ’ pakenisi tietoja, koska se teki niistä ruma .. 🙂
  • vastaus

    Vaihtoehto, joka on tullut tämän viestin Twitter-keskustelusta, on muuttaa miten saat tietosi. get_post_custom() palauttaa matriisiryhmän ja aiheuttaa sinulle päänsärkyä . Suosittelen käyttämään sen sijaan 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 } 

    Parempi vaihtoehto mukautetuille arvoille olisi käyttää mukautettua metaa. Voit määritellä nämä ainutlaatuisiksi, ja kun saat mukautetun metatiedoston takaisin tietokannasta, sinulla on yksi arvo pikemminkin kuin indeksoitu taulukko, jossa on vain yksi jäsen. Huomioitavaa.

    Kommentit

    • Kiitos EAMann. I ’ ll tutkii mukautettuja arvoja / metaa, kun palaan kotiin, mieti sitten tätä lähestymistapaa.

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *