user10313661
user10313661

Reputation:

PHP echo several <img> from a folder

So I basically have this code:

<?php
    $lang = isset($_GET['lang']) ? $_GET['lang'] : NULL;
    $langArray = array('en', 'de', 'fr', 'es', 'it');

    $img = "<img src='img/".$lang."/1.png' />";
?>

[some useless code here...]

<div class="col ">
    <?php echo $img; ?>
    <p>Here some text under the img</p>
</div>

It will display a different image depending on the language chosen. As you can see, the image is stored in a folder with the name of the language. For example, if you choose 'en' for english, the picture display will be /img/en/1.png.

My problem is that I have multiple pictures in these folders (1.png, 2.png... 5.png). Instead of writing this :

<?php
    $lang = isset($_GET['lang']) ? $_GET['lang'] : NULL;
    $langArray = array('en', 'de', 'fr', 'es', 'it');

    $img = "<img src='img/".$lang."/1.png' />";
    $img = "<img src='img/".$lang."/2.png' />";
    $img = "<img src='img/".$lang."/3.png' />";
    $img = "<img src='img/".$lang."/4.png' />";
    $img = "<img src='img/".$lang."/5.png' />";

?>

Is there a way to echo these pictures with a loop? I'm new to PHP and not sure of what I should write.

Thanks.

Upvotes: 0

Views: 75

Answers (3)

MrG
MrG

Reputation: 382

As an addition to the answer made by @Jouby (that is the loop you need) I would like you to point that your code is not really safe...

Directly using $_GET parameters in your output is asking for trouble. Please escape the value first (eg with htmlspecialchars()) or even better: Check if the value of $lang is an element in the $langArray (eg by using in_array()). That way you know what values will be put in your code.

Just a thought: what if $_GET['lang'] would contain something like this?

"<script>alert('I can steal your session (or worse!)');</script>

Upvotes: 1

Jouby
Jouby

Reputation: 2471

  • You can use for to loop, with a $i.
  • Don't forget to concat your values with .=.

You can loop like this :

<?php
    $lang = isset($_GET['lang']) ? $_GET['lang'] : NULL;
    $langArray = array('en', 'de', 'fr', 'es', 'it');

    if (!is_null($lang)) {
        $img = '';
        for($i=1;$i<=5;$i++) {
            $img .= "<img src='img/".$lang."/".$i.".png' />";
        }
    }
?>

Upvotes: 2

AwesomeGuy
AwesomeGuy

Reputation: 1089

You can use loops in html like so

<?php for($i = 1; $i <= 5; $i++): ?>
    <img src="img/<?= $lang ?>/<?= $i ?>.png" />
<?php endfor; ?>

<?= is short from <?php echo

Upvotes: 0

Related Questions