Reputation: 181
the following code is only running once , while the number of times it should run is 4 , any help ?
PHP::
<?php
header("Content-Type: application/json");
require_once("config.php");
if(isset($_GET["m"])) {
$dirname = "images/main/";
$arr = array();
$conn = new mysqli(HOST, USERNAME, PASSWORD, DATABASE);
if(!$conn) {
echo "Error connecting to database";
exit();
}
if($stmt = $conn->prepare("SELECT name_ FROM projects")) {
$stmt->execute();
$stmt->bind_result($n);
//$stmt->store_result();
$result = $stmt->get_result();
if($result->num_rows == 0) {
echo "No Projects";
$stmt->close();
$conn->close();
exit();
}else {
while ($row = $result->fetch_assoc()) {
$dirname = $dirname . $row["name_"] . "/";
$images = glob($dirname . "*.*", GLOB_BRACE);
foreach($images as $image) {
echo $row["name_"];
echo$result->num_rows; // returns 4 !!!!
$image = base64_encode($image);
//$arr[] = $image;
array_push($arr, $image);
$image = "";
}
}
echo json_encode($arr); // returns 1 json row oonly
}
}
$stmt->close();
$conn->close();
exit();
}
?>
num rows return 4 so why it runs or loops for one time only ?
I am trying to get images from images folder to echo it back
FIX::
according to jhilgeman's answer I added this part to the end of foreach:
$dirname = "images/main/";
Upvotes: 1
Views: 249
Reputation: 1583
If I had to guess, I'd say that it's looping correctly, but the problem is this line:
$dirname = $dirname . $row["name_"] . "/";
Each time you loop, you're APPENDING the $row["name"] value to whatever $dirname is. So let's say that you get 4 rows back like this:
name
----
houses
boats
computers
animals
At the beginning of the loop, let's say $dirname is just "/images/". So the first loop would change $dirname to be:
/images/houses/
Then the second loop would change it to be:
/images/houses/boats/
The third loop would then make it:
/images/houses/boats/computers/
And finally the fourth loop:
/images/houses/boats/computers/animals/
So unless you're expecting the $dirname to be appended that way, you probably want to instead REPLACE $dirname instead of appending to it each time.
Try this instead for your loop:
while ($row = $result->fetch_assoc()) {
$images_dirname = $dirname . $row["name_"] . "/";
$images = glob($images_dirname . "*.*", GLOB_BRACE);
foreach($images as $image) {
...etc...
}
}
Upvotes: 2