2015-04-23 14 views
6

ho una funzione semplice, che ha due parametri, uno per l'URL dell'immagine, e altri per gli attributi per l'immaginecosa c'è di sbagliato in questo pezzo di codice? html + php

function image_found($url,$attributes) 
{ 
    if(@getimagesize($url)) 
    { 
     echo '<img src="'.$url.'" '.$attributes.'/>'; 
    } 
    else 
    { 
     echo '<img src="'.base_url().'/site_images/image_not_found.svg" '.$attributes.'/>'; 
    } 
} 

Ora quello che sto cercando di fare è creare un cliccabile immagine, se viene trovato l'immagine, ora questo è il codice html

echo '<div class="panel-body">'; 
echo '<div class="col-md-12 col-lg-12 col-sm-12 text-center">'; 
$url = base_url().'product_images/'.$result->product_image.'.'.$result->image_type; 
$attributes = 'height="200px" width="100%"'; 
echo '<a href="product.com/full/url">'.image_found($url,$attributes).'</a>'; 
echo '</div>'; 
echo '</div>'; 

e questo è l'uscita sto ottenendo

<div class="panel-body"> 
    <div class="col-md-12 col-lg-12 col-sm-12 text-center"> 
     <img src="http://localhost/nsc/product_images/7908076366784972032090.jpg" height="200px" width="100%"/> 
     <a href="#"></a> 
    </div> 
</div> 

non so ciò che è sbagliato qui, sto usando bootstrap

+4

Utilizzare 'return' invece di' echo' all'interno della funzione. –

+0

Sei sicuro che questo è l'output che stai ottenendo? L'output non è congruente con il tuo 'echo's. –

risposta

1

Basta usare le dichiarazioni di ritorno al posto di eco nella tua funzione e il tuo problema dovrebbe essere risolto ;-)

0

Quando è necessario restituire un valore da una funzione, utilizzare return dichiarazione invece di echo

Quando echo viene usato l'uscita immediatamente viene stampato invece di ottenere restituito al luogo in cui la chiamata di funzione è. Ecco un'illustrazione

function printer(){ 
    echo 'second'; 
} 

echo 'first'.' '.printer().' '.'last'; 

l'output:

secondfirst last 

Questa è esattamente la stessa cosa che accade con il codice. L'eco in image_found() viene stampato come

<img src="http://localhost/nsc/product_images/7908076366784972032090.jpg" height="200px" width="100%"/> 

Il resto l'istruzione echo viene stampato come

<a href="#"></a> 

Quindi, utilizzando l'istruzione return dovrebbe risolvere il tuo problema

+0

utilizzando @ non è corretto, dovresti utilizzare try catch blocks. non è buono nascondere semplicemente un errore quando sappiamo che ci sarà uno – Vignesh

0

Il modo migliore è verificare se l'immagine esiste (rimuovere @) e quindi retu rn (invece di echo):

... 

if(file_exists('your/path/to/image')) 
    return '<img src="'.$url.'" '.$attributes.'/>'; 
else 
    return '<img src="'.base_url().'/site_images/image_not_found.svg" '.$attributes.'/>' 

... 
+0

a cosa serve @? – runningmark

+0

Stai usando "@" (@getimagesize ($ url) per nascondere qualsiasi avviso che dovrebbe essere visualizzato, quindi penso che sia meglio controllare se il file esiste veramente e poi fare qualsiasi cosa tu voglia ... –

Problemi correlati