2010-12-03 24 views
0

J'essaie de faire fonctionner cette fonction où elle renvoie l'emplacement du fichier sur le serveur. Au bas du codage, je montre comment j'essaie d'afficher le codage dans mes autres pages. Ai-je raison de faire écho à la dernière ligne de codage pour l'afficher lors de l'appel de la fonction?fonction d'appel, résonance des résultats

function record_loc($id,$type) 
{ 
    $recdir = mysql_result(mysql_query(
     "SELECT rec_loc FROM names WHERE com_id = '".$id."'"), 0 , "rec_loc"); 

    $ver = ($type == 'n' ? '-n.wav' : '-s.wav'); 
    // echo '/doc_rec/' . $recdir . '/' . $id . $ver; 
return '/doc_rec/' . $recdir . '/' . $id . $ver; 
} 

// echo record_loc(120,n); or <?= record_loc(120,n) 
?> 

Répondre

2

Votre exemple serait, en fait, la production des données (juste en raison de la simplicité de la déclaration), mais ce qui est vraiment passe la fonction est l'écho en premier lieu, l'écho [commenté dans ce cas] est effectué. par exemple.

sortie
function return_some_value(){ 
    return 'abc'; 
} 
function echo_some_value(){ 
    echo 'def'; 
} 

echo return_some_value() . echo_some_value(); 

entraînerait echo_some_value figurent en premier (et le retour nul), qui est ensuite transmis à l'écho pour exécution ultérieure. par exemple.

defabc 

(si vous attendez abcdef)

EDIT par demande en commentaire à cette réponse EDIT

function record_loc($id,$type) 
{ 
    if (($query = mysql_query("SELECT rec_loc FROM names WHERE com_id = '".(int)$id."'")) !== false) 
    { 
    if (mysql_num_rows($query) > 0) 
     return '/doc_rec/'.mysql_result($query,0,'rec_loc').'/'.$id.'-'.($type=='n'?'n':'s').'.wav'; 
    } 
    return 'Error Not Found'; 
} 

S'il vous plaît noter que vous devriez vérifier votre connexion, la vérification pour les erreurs sql et la validation de l'entrée. Je n'ai pas épuisé tous les contrôles, juste en faisant votre code faire ce que vous avez demandé.

+0

J'ai fait le changement et supprimé l'écho et ajouté le retour ... cela vous semble-t-il correct? J'utiliserai alors pour afficher le codage sur mes autres pages. – acctman

+0

Oui, votre nouvelle version semble exacte. Vous pouvez également raccourcir le retour avec 'return '/ doc_rec /'. $ recdir. '/'. $ id. '-' ($ type == 'n'? 'n': 's'). '. wav'; 'si vous le souhaitez. (De plus, si $ type doit être une chaîne, appelez la fonction en utilisant 'record_loc (120, 'n');') –

+0

est-il un moyen de le faire retourner une chaîne d'erreur comme "Erreur introuvable" quand un sql l'entrée n'est pas là? – acctman

3

Il y a une différence fonctionnelle entre l'utilisation return et un opérateur de sortie comme echo, print, print_r, sprint etc.

Voir ici pour return et ici pour echo

A savoir:

'retour' renvoie son argument en tant que valeur de t il appel de fonction

« echo » sorties une ou plusieurs chaînes

Ainsi, le retour dans votre fonction transmet le résultat en tant que valeur que vous pouvez donner à une variable, à savoir $myvar=myfunction();, alors vous devrez echo $myvar (ou echo myfunction();), alors qu'avec écho dans votre fonction, il suffit d'avoir myfunction(); pour accomplir la même chose. Utilisez return lorsque vous voulez passer le résultat d'une fonction à travers d'autres opérations.

1

Ou vous revenez le chemin et utiliser echo record_loc(120,n);

Ou vous écho le chemin du retour (comme l'échantillon) et utiliser <?php record_loc(120,n) ?>

3

Je ne sais pas si je comprends bien la question. Mais vous ne pouvez pas répercuter une fonction si elle ne renvoie rien.

Voici une fonction simple qui renvoie une valeur:

<?php 
function do_stuff() { 
    return rand(1, 10); 
} 

echo do_stuff(); 
?> 

<?= do_stuff() ?> 
+0

lorsque l'écho est à l'intérieur de la fonction dois-je mettre les variables aussi ...echo record_loc (120, n); à l'intérieur de la fonction alors dans mes autres pages – acctman

+0

'' est l'abréviation de ' ' – demux