Egyszerű helyzet, de miért ad hibát?
Sziasztok!
Lett egy pici gondom, eddig egész jól haladtam, viszont gondoltam a későbbi munkám könnyítése miatt megírtam az első functionom. A function működik, a hiba maradt...
Ez a kód:
<?php
function nincs_adat($x){
if(empty($x)){
$x="Nincs adat";
return $x;
break;
}
else{
return $x;
}
}
$file = fopen("animelista.txt","r") or exit("Nem lehet megnitni a fájlt!");
echo('<a href="animeleltar.php">Vissza.</a><br />');
while(!feof($file)) {
$sor = fgets($file);
$tomb = explode(", ", $sor);
$sortomb= array();
for($i=0;$i<count($tomb);$i++){
$sortomb[$i] = $tomb[$i];
}
$mentesiido = nincs_adat($sortomb[4]);
print $sortomb[0].", ".$sortomb[1].", ".$sortomb[2].", ".$sortomb[3].", ".$mentesiido;
echo("<br />");
}
echo('<a href="animeleltar.php">Vissza.</a>');
fclose($file);
?>
A proglémám az, hogy functionba elküldöm a nemlétező változót, és kiadja a hibaüzenetet, ugyanakkor beírja a változóba azt amit szeretnék hogy bent legyen. Ezt hogy tudnám megoldani?
(kezdő programozó vagyok, nagyon kezdő)
Internetre ez nem kerülne fel, ez csak nekem készül itthonra.
Egy txt fájlból kinyerem az adatokat, soronként egy tömbben, és ezeket akarom kiíratni, hibakód nélkül.
Viszont vannak adatok, amiknél a tömböm azon indexe még nem került legenerálásra ($sortomb[4]). Az adatokat változókhoz rendelem, viszont a $mentesiido = nincs_adat($sortomb[4]) valamiért hibát is dob, ugyanakkor elvégzi nekem azt, amint előtte functionban el akarok végeztetni vele (Vagyis ha a változó üres, akkor a változóba a "Nincs adat" szöveg kerüljön).
A hibát erre a sorra dobja ki:
$mentesiido = nincs_adat($sortomb[4]);
A készített függvény hozzá az elején van, de ide teszem azt is:
function nincs_adat($x){
if(empty($x)){
$x="Nincs adat";
return $x;
break;
}
else{
return $x;
}
}
Jesszum, miért kell ezt így agyon bonyolítani? Eleve, minek a break, ha már előtte van egy return?
Ezt így kellene:
function nincs_adat($x){
return empty($x) ? "Nincs adat" : $x;
}
Sajnálom, amatőr szinten programozok, mondhatni a magam szórakoztatása miatt. :)
Pill gyorsan kipróbálom.
A hiba megmaradt, meg a szöveget is ugyanúgy odatette:
Notice: Undefined offset: 4 in C:\xampp\htdocs\proba\animelistazas.php on line 18
próba, 12, 24 perc, TV; , Nincs adat
a 18. sorban ez van:
$mentesiido = nincs_adat($sortomb[4]);
$sor = fgets($file);
$tomb = explode(", ", $sor);
$sortomb= array();
for($i=0;$i<count($tomb);$i++){
$sortomb[$i] = $tomb[$i];
}
Tehát először beolvasol egy sort, explode-olod, majd a kapott tömböt átmásolod egy új tömbbe? Könyörgöm, miért?! Nem lenne egyszerűbb eleve az explodeolt tömböt használni?
$mentesiido = nincs_adat($sortomb[4]);
Itt meg, ha a $sortomb[4] nincs definiálva, még szép, hogy hibát ad. Talán isset($sortomb[4])-tel meg kellene vizsgálni, hogy egyáltalán létezik-e.
Ezt a vizsgálatot akartam áttenni functionba, viszont ha issetet, ha emptyt használtam, mindig kiadta a hibákat.
külön minden változóra le tudom vezetni az issetet is, meg az emptyt is, viszont akkor a functionnak nem lenne értelme az elején. Vagy legalábbis szerintem nem sok.
jelenleg a functionnak számomra az az értelme, hogy ne kelljen minden változóhoz feltételt kötnöm, hogy írja ki a szöveget, ha nincs adat abban a változóban.
ezen kívül ezt a funkciót más helyen is használnám ilyenre, ez mellett meg (szerintem) számomra egy ideális gyakorlási lehetőség lenne.
Viszont a kérdésem akkor így már az, hogy ezt a fajta változó ellenőrzést egy functionon belül el lehet végezni valahogy, vagy nem?
Nem értek hozzá, esetleg így?
function nincs_adat(&$x){
...
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!