Bobik4556Ttft
@Bobik4556Ttft
Тот ещё Мухтар

Как исправить ошибку с заполнением select-ов формы вакансии данными из файла?

<?php
//Переменные,  которыми заполняется форма
$profession;
$work_schedule;
$education;
$salary;
$comment;

$surname;
$name;
$middlename;
//Когда открываем вакансию 
if(isset($_POST["surname"]) && isset($_POST["name"]) && isset($_POST["middlename"])){
	echo "1<br>";
	$surname = $_POST["surname"];
	$name = $_POST["name"];
	$middlename = $_POST["middlename"];
	try{
		$fd = fopen($_POST["surname"] . " " . $_POST["name"] . " " . $_POST["middlename"] . " Вакансия", 'r');
		if(!$fd){//Если файл не открывается, значит его нет,
			fclose($fd);
			$fd = fopen($file, 'w');//необходимо его создать
			fclose($fd);
		}else{//Если он есть, то прочитать и проинициализировать переменные, нужные для заполнения открываемой вакансии
			$surname = fgets($fd);
			$name = fgets($fd);
			$middlename = fgets($fd);
			$profession = fgets($fd);
			$work_schedule = fgets($fd);
			$education = fgets($fd);
			$salary = fgets($fd);
			while(!feof($fd)){
				$comment .= fgets($fd); 
			}
			fclose($fd);
		}
	}catch(Throwable $ex){
		echo $ex -> getMessage . "<br>";
	}
	echo $surname . "<br>";
	echo $name . "<br>";
	echo $middlename . "<br>";

	echo $profession . "<br>";
	echo $work_schedule . "<br>";
	echo $education . "<br>";
	echo $salary . "<br>";
	echo $comment . "<br>";
}
//Когда после редактирования сохраняем вакансию, то выполнение скрипта заходит сюда, а в первый if не заходит
if(isset($_POST["formsurname"]) && isset($_POST["formname"]) && isset($_POST["formmiddlename"]) && isset($_POST["profession"]) && isset($_POST["work_schedule"]) && isset($_POST["education"]) && isset($_POST["salary"]) && isset($_POST["comment"])){
	echo "2<br>";
	$surname = $_POST["formsurname"];
	$name = $_POST["formname"];
	$middlename = $_POST["formmiddlename"];
	$profession = $_POST["profession"];
	$work_schedule = $_POST["work_schedule"];
	$education = $_POST["education"];
	$salary = $_POST["salary"];
	$comment = $_POST["comment"];
	//Перезаписываем данные в файл
	$fd = fopen($_POST["formsurname"] . " " . $_POST["formname"] . " " . $_POST["formmiddlename"] . " Вакансия", 'w');
	fwrite($fd, $surname . "\n");
	fwrite($fd, $name . "\n");
	fwrite($fd, $middlename . "\n");
	fwrite($fd, $profession . "\n");
	fwrite($fd, $work_schedule . "\n");
	fwrite($fd, $education . "\n");
	fwrite($fd, $salary . "\n");
	fwrite($fd, $comment);
	fclose($fd);
	
	echo $surname . "<br>";
	echo $name . "<br>";
	echo $middlename . "<br>";

	echo $profession . "<br>";
	echo $work_schedule . "<br>";
	echo $education . "<br>";
	echo $salary . "<br>";
	echo $comment . "<br>";
}


//Заполнение формы вакансии переменными, перечисленными в самом начале
echo "<form method='POST' action='Create_Vacancy.php'>
		<input type='hidden' name='formsurname' value='" . $surname . "'>
		<input type='hidden' name='formname' value='" . $name . "'>
		<input type='hidden' name='formmiddlename' value='" . $middlename . "'>
		<h1>Вакансия</h1>
		<p>Работодатель " . $surname ." " . $name . " " . $middlename . "</p>
		<table>
			<tr><th></th><th></th></tr>
			<tr><td>Требуемая должность</td><td>
			<select name='profession'>";
			$conn = new PDO("mysql:host=localhost;dbname=Recruitment_Agency", "root", "mypassword");
			$sql = "SELECT profession FROM Prof_list";
			$stmt = $conn -> prepare($sql);
			$stmt -> execute();
			foreach($stmt as $row){//Список профессий 
				if($row["profession"] == "Профессии сервиса" or $row["profession"] == "Экономика" or $row["profession"] == "IoT" or $row["profession"] == "Медицина" or $row["profession"] == "Транспорт" or $row["profession"] == "Преподавание" or $row["profession"] == "Техническая сфера" or $row["profession"] == "Правоохранительные органы" or $row["profession"] == "Сельское хозяйство"){
					echo "<option value='" . $row["profession"] . "' disabled>" . $row["profession"] ."</option>";
				}elseif($row["profession"] == $profession){
					echo "<option value='" . $row["profession"] . "' selected>" . $row["profession"] . "</option>";
				}else{
					echo "<option value='" . $row["profession"] . "'>" . $row["profession"] . "</option>";
				}
			}
echo "			</select>
			</td></tr>
			<tr><td>График работы</td><td><select name='work_schedule'>";//Типы графиков работ
			$conn = new PDO("mysql:host=localhost;dbname=Recruitment_Agency", "root", "mypassword");
			$sql = "SELECT work_schedule FROM Work_schedule";
			$stmt = $conn -> prepare($sql);
			$stmt -> execute();
			foreach($stmt as $row){
				if($row["work_schedule"] == $work_schedule){
					echo "<option value='" . $row["work_schedule"] . "' selected>" . $row["work_schedule"] . "</option>";
				}else{
					echo "<option value='" . $row["work_schedule"] . "'>" . $row["work_schedule"] . "</option>";
				}
			}
echo "		</td></tr>
			<tr><td>Образование</td><td><select name='education'>";
			$conn = new PDO("mysql:host=localhost;dbname=Recruitment_Agency", "root", "mypassword");
			$sql = "SELECT education FROM Education";
			$stmt = $conn -> prepare($sql);
			$stmt -> execute();
			foreach($stmt as $row){
				if($row["education"] == $education){
					echo "<option value='" . $row["education"] . "' selected>" . $row["education"] . "</option>";
				}else{
					echo "<option value='" . $row["education"] . "'>" . $row["education"] . "</option>";
				}
			}
echo "		</td></tr>
			<tr><td>Оклад</td><td><input type='text' name='salary' value='" . $salary . "'/></td></tr>
		</table>
		<p>Комментарий по поводу работы</p>
		<textarea name='comment'>" . $comment . "</textarea>
		<p><input type='submit' value='Сохранить'></p>
	  </form>";
echo "<form action='Select_Vacancy.php'>
		<input type='submit' value='На окно выбора вакансии'/>
	  </form>";
?>

Не получается нормально проинициализировать формы вакансии при открывании. К примеру открываю форму, редактирую, сохраняю, перезаписывая изменения в файл, а потом пытаюсь снова открыть, прочитав все данные из уже измененного файла, но селекты не имеют нужных значений.
Чтобы заполнить селекты, достаю данные из базы, к примеру, для селекта, в котором выбираю профессию.
echo "<td>
			<select name='profession'>";
			$conn = new PDO("mysql:host=localhost;dbname=Recruitment_Agency", "root", "mypassword");
			$sql = "SELECT profession FROM Prof_list";
			$stmt = $conn -> prepare($sql);
			$stmt -> execute();
			foreach($stmt as $row){//Бежим по списку профессий 
				if($row["profession"] == "Профессии сервиса" or $row["profession"] == "Экономика" or $row["profession"] == "IoT" or $row["profession"] == "Медицина" or $row["profession"] == "Транспорт" or $row["profession"] == "Преподавание" or $row["profession"] == "Техническая сфера" or $row["profession"] == "Правоохранительные органы" or $row["profession"] == "Сельское хозяйство"){//Если категория професиий, то делаю, чтобы её выбрать нельзя было
					echo "<option value='" . $row["profession"] . "' disabled>" . $row["profession"] ."</option>";
				}elseif($row["profession"] == $profession){//Если профессия равна профессии, которая была прочитана из файла, то делаю, чтобы она отображалась на селекте
					echo "<option value='" . $row["profession"] . "' selected>" . $row["profession"] . "</option>";
				}else{//Иначе просто один из вариантов Селекта
					echo "<option value='" . $row["profession"] . "'>" . $row["profession"] . "</option>";
				}
			}
echo "			</select>
			</td>
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Из-за использования fgets() у вас все переменные, с которыми потом сравнивается строка из БД:
elseif($row["profession"] == $profession)
содержат перенос строки (символ \n в $profession). Поэтому равенства и нет, if не срабатывает...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект