2015-04-23 3 views
6

i eine einfache Funktion haben, die zwei Parameter hat, eine für die Bild-URL und andere für die Attribute für das BildWas ist mit diesem Code falsch? 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.'/>'; 
    } 
} 

jetzt, was ich versuche, eine anklickbare zu tun ist, erstellen Bild, wenn das Bild gefunden wird, jetzt dies der hTML-Code ist

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>'; 

und dies ist der Ausgang ich erhalte

<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> 

ich weiß nicht, was hier falsch ist, Ich verwende Bootstrap

+4

Verwenden Sie 'return' anstelle von' echo' in Ihrer Funktion. –

+0

Sind Sie sicher, dass dies die Ausgabe ist, die Sie bekommen? Der Ausgang stimmt nicht mit Ihren Echos überein. –

Antwort

1

Verwenden Sie einfach return-Anweisungen statt Echo lösen in deiner Funktion und dein Problem sollte gelöst werden ;-)

0

Wenn Sie einen Wert aus einer Funktion zurückkommen müssen, verwenden return Anweisung anstelle echo

Wenn echo die Ausgabe verwendet wird, sofort an den Ort, anstatt sich wieder gedruckt wird, wo der Funktionsaufruf ist. Hier ist eine Illustration.

function printer(){ 
    echo 'second'; 
} 

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

Der Ausgang:

secondfirst last 

Dies ist genau das gleiche mit Ihrem Code geschieht. Das Echo in image_found() wird als

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

Der Rest der echo-Anweisung als

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

gedruckt wird eine return-Anweisung So verwenden, sollten Sie Ihr Problem

+0

mit @ ist schlecht, sollten Sie versuchen, catch-Blöcke zu verwenden. es ist nicht gut, einfach einen Fehler zu verstecken, wenn wir wissen, dass es einen geben wird – Vignesh

0

Der bessere Weg ist zu verifizieren, ob dein Bild existiert (entferne @) und dann retu rn (statt 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

Was ist die Verwendung von @? – runningmark

+0

Du verwendest "@" (@getimagesize ($ url), um jede Warnung auszublenden, die angezeigt werden sollte, also denke ich, dass es besser ist zu überprüfen, ob die Datei wirklich existiert und dann, was auch immer du willst ... –