2017-05-30 1 views
0

J'ai une page d'accueil qui montre quelques images téléchargées.Comment utiliser strpos() pour vérifier le chemin d'une variable?

Je déduis de la base de données et j'utiliser strpos() pour vérifier l'URL en raison de problèmes d'annuaire, et il fonctionne très bien:

if(strpos($row['cImage'],"http://") === FALSE){ 
    echo "<img src='serintercement/".$row['cImage']."' style='width: 107px; height:102px;' />";  
}else{ 
    echo "<img src='".$row['cImage']."' style='width: 107px; height:102px;' />";  
} 

je dois utiliser la même logique dans une page qui montre l'image cliquée , mais il a une variable pour et je me bats pour résoudre ce problème, car il est une autre façon d'écrire:

<img src='<?php echo $resultData->cImage; ?>'/> 

Je ne peux pas résoudre le problème du répertoire. Comment puis-je utiliser strpos() de la même manière pour ce deuxième code?

+0

Voulez-vous utiliser '$ resultData-> cImage', comme vous le faisiez pour' $ row ['cImage'] '? –

+0

oui @SahilGulati.Je veux que cette image provienne de cette variable pour avoir son chemin vérifié, donc je peux le corriger si nécessaire – paulocholla

Répondre

1

Vous pouvez le faire comme ceci.

if(strpos($resultData->cImage,"http://") === FALSE){ 
    echo "<img src='serintercement/".$resultData->cImage."' style='width: 107px; height:102px;' />";  
}else{ 
    echo "<img src='".$resultData->cImage."' style='width: 107px; height:102px;' />";  
} 

meilleure option est que vous pouvez définir une fonction comme celui-ci et l'appeler

checkImage($row['cImage']);//to be called in your first page 
checkImage($resultData->cImage);//to be called in your second page 
function checkImage($image) 
{ 
    if(strpos($image,"http://") === FALSE){ 
     echo "<img src='serintercement/".$image."' style='width: 107px; height:102px;' />";  
    }else{ 
     echo "<img src='".$image."' style='width: 107px; height:102px;' />";  
    } 
} 
1

Vous devriez pouvoir vérifier le chemin de la même façon - tant que la propriété de l'objet est définie et qu'une chaîne, strpos() peut être utilisée.

if(strpos($resultData->cImage,"http://") === FALSE){ 
    echo "<img src='serintercement/".$resultData->cImage."' />";  
}else{ 
    echo "<img src='".$resultData->cImage."' />";  
} 
+0

a également fonctionné parfaitement! Merci beaucoup! – paulocholla

0

Si ces chaînes cImage proviennent de la base de données, vous pouvez simplement les corriger dans l'appel de requête.

Par exemple, si vous utilisez MySQL, vous pouvez préparer les données à l'aide LOCATE() ET CONCAT() comme ceci:

SELECT 
    IF(LOCATE('http',`cImage`)!=1,CONCAT('serintercement/',`cImage`),`cImage`) `new_cImage` 
FROM ... 

Déplacement du processus conditionnel à votre requête, fera lire plus facilement votre code « affichage » parce que toutes les préparations sont terminées à l'avance.


En dehors de cela, vous pouvez rendre votre code plus DRY en ne répétant pas les parties html qui viennent avant et après la variable d'image ...

C'est un écho avec une condition en ligne (pas tout le monde aime ce style):

echo "<img src=\"",(strpos($resultData->cImage,"http")===0?'':'serintercement/'),"{$resultData->cImage}\" style=\"width:107px;height:102px;\" />\n"; 

Ceci est une condition séparée:

echo "<img src=\""; 
    if(strpos($resultData->cImage,"http")!==0){ 
     echo 'serintercement/' 
    } 
echo "{$resultData->cImage}\" style=\"width:107px;height:102px;\" />\n"; 

Ceci est un appel de fonction si vous devez faire plusieurs fois dans le même script:

function fixPath($img){ 
    if(strpos($img,"http")===0){ 
     return $img; 
    } 
    return "serintercement/$img"; 
} 
echo "<img src=\"",fixPath($resultData->cImage),"\" style=\"width:107px;height:102px;\" />\n"; 

Notez que je ne fais que la vérification des http et que je vérifie de façon très précise qu'il vient de la première position dans la chaîne. À travers toutes ces alternatives, le point que je fais est DRYness (qui est une poursuite typique de tous les programmeurs). La façon dont vous avez choisi de l'implémenter dépend de vos préférences personnelles.