2009-06-04 4 views
0

Dans mon dossier je comprend une fonction ...Stockage et accéder à un bout de code dans une fonction

function storelistingUno() { 

$itemnum=mysql_real_escape_string($_POST['itemnum']); 
$msrp=mysql_real_escape_string($_POST['msrp']); 
$edprice=mysql_real_escape_string($_POST['edprice']); //This value has to be the same as in the HTML form file 
$itemtype=mysql_real_escape_string($_POST['itemtype']); 
$box=mysql_real_escape_string($_POST['box']); 
$box2=mysql_real_escape_string($_POST['box2']); 
$box25=mysql_real_escape_string($_POST['box25']); 
$box3=mysql_real_escape_string($_POST['box3']); 
$box4=mysql_real_escape_string($_POST['box4']); 
$box5=mysql_real_escape_string($_POST['box5']); 
$box6=mysql_real_escape_string($_POST['box6']); 
$box7=mysql_real_escape_string($_POST['box7']); 
$box8=mysql_real_escape_string($_POST['box8']); 
$itemcolor=mysql_real_escape_string($_POST['itemcolor']); 
$link=mysql_real_escape_string($_POST['link']); 
$test = "yes!"; 

} 

Je ferai référence à cela dans environ 8 pages et j'ai décidé qu'il serait plus facile de faire une fonction hors de celui-ci et seulement toucher à partir de maintenant. Donc, j'ai référencé storelistingUno(); dans mon code, mais je ne pense pas que cela a fonctionné, parce que j'ai essayé d'exécuter echo $test; et rien ne s'est passé. Ai-je besoin de retourner quelque chose?

Merci.

+0

le test $ ne fait pas partie du code, je sorta simplement mis là-dedans pour voir si mon code fonctionnait ou non. Global résout effectivement mon problème, alors merci pour cela. Cependant, je vois que vous n'êtes pas friands de cette méthode? Je veux simplement avoir cet extrait de code à un endroit pour pouvoir le modifier ici au lieu des 8 pages. Je ne fais que php depuis quelques mois, et je ne suis pas encore très familier avec OOP. les meilleures façons de le faire? Merci beaucoup – asdfasdfasdfasdf

Répondre

1

Regardez dans extract(). Vous pouvez faire quelque chose comme ceci:

<?php 

function getEscapedArray() 
{ 
    $keys = array('itemnum', 'msrp', 'edprice', 'itemtype', 'box', 'box2', 'box25', 'box3', 'box4', 'box5', 'box6', 'box7', 'box8', 'itemcolor', 'link'); 

    $returnValues = array(); 
    foreach ($keys as $key) { 
    $returnValues[$key] = mysql_real_escape_string($_POST[$key]); 
    } 

    $returnValues['test'] = 'yes!'; 

    return $returnValues; 

} 

extract(getEscapedArray()); 
echo $test; 

Bien que - Ce n'est toujours pas la meilleure façon de le faire. Le mieux serait d'utiliser simplement le retour de cette fonction comme tableau.

$parsedVals = getEscapedArray(); 
echo $parsedVals["test"]; 
1

$ test est une variable locale dans cette fonction - vous devez soit pour le rendre global (en mettant global $test; au début de la fonction ou à l'aide $GLOBALS['test'] au lieu de simplement $test ou retourner la valeur

-vous penser. d'utiliser cette fonction pour simplement échapper aux valeurs? Peut-être que vous pourriez lui faire exécuter la requête aussi, alors vous ne devriez pas retourner/utiliser globals

Modifier: Une façon différente serait d'inclure le code au lieu de en utilisant une fonction - non recommandé si ...

0

vous devez marquer chaque variable globale avant de commencer à les modifier dans la fonction ... ce n'est pas recommented car il est mauvais style de codage, mais il peut vous aider à

$test = ''; 
function foo() { 
    global $test; 
    $test = 'bar'; 
} 
echo $test; //prints nothing 
foo(); 
echo $test; // prints "bar" 
1

Si vous avez absolument besoin de ces variables a GLOBALS

function storelistingUno() 
{ 
    $desiredGlobals = array( 
     'itemnum' 
     ,'msrp' 
     ,'edprice' 
     ,'itemtype' 
     ,'box' 
     ,'box2' 
     ,'box25' 
     ,'box3' 
     ,'box4' 
     ,'box5' 
     ,'box6' 
     ,'box7' 
     ,'box8' 
     ,'itemcolor' 
     ,'link' 
    ); 
    foreach ($desiredGlobals as $globalName) 
    { 
     if (isset($_POST[$globalName])) 
     { 
      $GLOBALS[$globalName] = mysql_real_escape_string($_POST[$globalName]); 
     } 
    } 
} 
Questions connexes