Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Jos kuvaa ei ole, niin...

Sivun loppuun

Rocceri [03.04.2009 16:01:15]

#

Heippa

Kirjoitin tässä aikani kuluksi seuraavanlaisen koodin:

Syötä kuvan URL:
<form action="#" method="POST">
<input type="name" name="box">
<input type="submit" value="Lähetä">
<input type="reset" value="Tyhjennä">
</form>
<hr>
<?php
$url = $_POST["box"];
$kuva = "<img src=\"$url\">";
echo $kuva;
?>

Tuo printtaa kuvan, minkä url on lisätty laatikkoon ja painettu entteriä.
Jos kuvan url'tä ei ole määritetty, tai sivulle on juuri saavuttu, niin siinä näkyy laatikko jonka sisällä on X, eli tämä ihan normaali asia joka näkyy jollei kuvaa löydy.

Saisikos jollain null käskyllä sen printtaamaan jotain muuta.
Koitin jo seuraavaa, mikä ei auttanut koska se printtaa kuitenkin tämän X'n:

if ($kuva == null)
echo "Ei kuvaa";

Saako vaikka serverin asetuksista muutettua niin, että se tulostaisi oman kuvansa jollei kuvaa löydy, tai näin ensiksi tuohon ongelmaan, miten saa PHP'llä tuosta tuon X'n pois.

-Rocceri kiittää

juha127 [03.04.2009 16:05:26]

#

Tuosta saan itse sen kuvan, että kuvat on valmiiksi palvelimella, joten tarkistus on hyvin yksinkertainen.

<?php

if (file_exists($url))
  $kuva = "<img src=\"$url\">";
else
  $kuva = "<img src=\"oletus.jpg\">";

echo $kuva;

?>

Rocceri [03.04.2009 16:11:14]

#

Mahtavaa, kiitos paljon :)

Pienellä hienosäädöllä toimii tarkoituksessani paremmin:

<?php
$url = $_POST["box"];
if ($url == !null)
  $kuva = "<img src=\"$url\">";
else
  $kuva = "Ei kuvan osoitetta annettu";
echo $kuva;
?>

TeNDoLLA [03.04.2009 17:15:18]

#

Tuo sun vertailus on kyllä ihan hämärä. Ensinnäkin $_POST['box'] -muuttuja ja sen myötä myös $url tulee formilta aina stringi tyyppisenä jos sen tyyppiä ei välissä vaihdeta. Ja sitten vertaat sitä null arvoon. Ja tuo vertauskin on vielä ihan ihmeellinen. Jos haluaisit verrata onko joku muuttuja tyyppiä null tai ei-null niin näin:

<?php
// Onko null?
if (is_null($url))

// tai negaatio is not null
if (!is_null($url))
?>

Tai jos vertaa tuohon sun tyyliin niin:

<?php
// is null
if ($url === null)

// vastaava is not null
if ($url !== null)
?>

Eli mun ymmärtääkseni tuossa sun koodissa tuo $url -muuttuja ei ole ikinä null/tyhjä. Vaan siellä on aina vähintään 0 merkkiä pitkä stringi. Eli jos haluaisit tarkastaa antoiko kukaan mitään osoitetta kuvalle niin varmaan tekisin sen tyyliin jotenkin näin:

<?php
if (strlen(trim($url)) > 0)
   $kuva = "<img src=\"$url\">";
else
   $kuva = "Ei kuvan osoitetta annettu";
echo $kuva;
?>

Edit: testasin tuota ja kyllä se näyttää noinkin toimivan niin kauan kun ei anneta esim välilyöntejä pelkästään osoitteeksi (joka hoituu tuolla trimmillä). Tosin jotenkin tuo näyttää niin härö viritykseltä, että entiä.. voin olla väärässäkin.

Rocceri [03.04.2009 17:36:15]

#

:DD Ehkä se voi olla vähän kummallinen, mutta kyllä se toimii :D

trilog [03.04.2009 18:48:11]

#

Todellakin tuo vertailu on kieltämättä outo, mutta kuten Rocceri totesi, se kyllä toimii halutulla tavalla. En ole koskaan nähnyt tuollaista vertailua tällaisessa yhteydessä.

TeNDoLLA kirjoitti:

Eli mun ymmärtääkseni tuossa sun koodissa tuo $url -muuttuja ei ole ikinä null/tyhjä. Vaan siellä on aina vähintään 0 merkkiä pitkä stringi.

Totta, mutta kannattaa muistaa kuitenkin, että PHP:n vertailu "==" on löysä, eli tyhjä stringi on tällöin NULL jne. Tosin Roccerin tapauksessa ei ole merkitystä onko operaattorina "==" vai "===".

Rocceri [03.04.2009 20:01:20]

#

No, en väitä että TeNDoLLA:n vastauksessa olisi moitittavaa, mutta tämä minun versioni on vähän yksinkertaisempi.

Metabolix [03.04.2009 22:14:15]

#

Rocceri kirjoitti:

:DD Ehkä se voi olla vähän kummallinen, mutta kyllä se toimii :D

$url = $_POST["box"];
# Jos arvoa ei ole, "Notice: Undefined index: box in koodi.php on line 123"

# if ($url == !null), !null === true, joten
# if ($url == true), lyhennetään
if ($url)
  $kuva = "<img src=\"$url\">";
else
# tässä tapauksessa else tarkoittaa
# if ($url === null || $url === "" || $url === "0")
  $kuva = "Ei kuvan osoitetta annettu";

"Toimii" on hyvin suhteellinen käsite, ja vaikka koodi toimisikin, kannattaa muuttaa se jollain tavalla mielekkääseen muotoon. Ehdossa ($url == !null) ei ole järkeä, koska se ei tarkoita sitä, mitä luulit sen tarkoittavan.

Juhko [03.04.2009 22:14:30]

#

...mutta käytä silti TeNDoLLA:n versiota. Se on parempi. :)

Triton [04.04.2009 10:34:07]

#

Ja yks vaihtoehtoinen tapa on näin:

<?php

	if (!empty($_POST['box'])) {
		echo "<img src=\"{$_POST['box']}\">";
	}

?>

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta