Я читаю изображения из каталога «images», который содержит несколько папок с изображениями. Я хочу показать каждое изображение в div и с флажком, чтобы решить, мода это или нет. Я использую следующий код для чтения файлов из каталога и отображения их в браузере. Дивы идут один за другим:
<?php
function listFolderFiles($dir){
$html = '';
// Init the session if it did not start yet
if(session_id() == '') session_start();
$html .= '<ol>';
foreach(new DirectoryIterator($dir) as $folder){
if(!$folder->isDot()){
if($folder->isDir()){
// $html .= '<li>';
$user = $dir . '/' . $folder;
foreach (new DirectoryIterator($user) as $file) {
if($file != '.' && $file != '..'){
$image = $user . '/' . $file;
// Check the pictures URLs in the session
if(isset($_SESSION['pictures']) && is_array($_SESSION['pictures'])){
// Check if this image was already served
if(in_array($image, $_SESSION['pictures'])){
// Skip this image
continue;
}
} else {
// Create the session variable
$_SESSION['pictures'] = array();
}
// Add this image URL to the session
$_SESSION['pictures'][] = $image;
// Build the form
//echo $image, "</br>";
$html .= '
<style>
form{
font-size: 150%;
font-family: "Courier New", Monospace;
display: inline-block;
align: middle;
text-align: center;
font-weight: bold;
}
</style>
<form class = "form" action="' . action($image) . '" method="post">
<div>
<img src="' . $image . '" alt="" />
</div>
<label for="C1">FASHION</label>
<input id="fashion" type="radio" name="fashion" id="C1" value="fashion" />
<label for="C2"> NON FASHION </label>
<input id="nfashion" type="radio" name="nfashion" id="C2" value="nfashion" />
<input type="submit" value="submit" />
</form>';
// Show one image at a time
// Break the loop
break 2;
}
}
// $html .= '</li>';
}
}
}
$html .= '</ol>';
return $html;
}
//##### Action function
function action($img){
$myfile = fopen("annotation.txt", "a");
if (isset($_POST['fashion'])) {
fwrite($myfile, $img." -- fashion\n");
// echo '<br />' . 'fashion image';
}
else{
fwrite($myfile, $img." -- nonFashion\n");
// echo '<br />' . ' The submit button was pressed<br />';
}
}
echo listFolderFiles('images//');
?>
Когда я делаю вызов действия ($ image) из внутреннего тега формы, я заметил, что значение по умолчанию для отправки анализируется в функцию, поэтому оно сохраняет имя изображения со значением по умолчанию и выбранным значением для первого image разбирается на второе изображение, выбранное значение второго изображения сохраняется в файл с третьим изображением и так далее. Когда я делаю вызов в теге отправки бокового ввода, он начинает сохранять в файл второе изображение со значением первого и так далее. Мне не удалось сохранить в файл правильное соответствие между изображением и выбранным значением. Где я должен вызвать функцию действия, чтобы сделать это правильно?
РЕДАКТИРОВАТЬ: когда я делаю вызов внутри формы, функция действия вызывается непосредственно перед тем, как пользователь нажимает кнопку отправки. Как я могу вызвать именно мою функцию при отправке формы? Я пытался использовать if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {}
:
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
action($image);
}
Я добавляю приведенный выше код перед тегом html, однако получаю те же результаты, что и в случае, когда я помещаю функцию действия внутрь тега ввода ввода. Любая идея, как разобрать правильное изображение для записи значения?