@antanol

Ошибка Undefined index: action in. Почему форма не сохраняется на сервер?

Прога из учебника.
Есть некоторая база данных с данными бегунов (эта функция работает нормально), в которую можно добавить данные новых бегунов. Вот тут у меня и возникает ошибка. При нажатии на кнопку "сохранить" service.php возвращает

Notice: Undefined index: action in C:\xampp\htdocs\ch09\service.php on line 2 (при том, что изначально этой ошибки нет и массив данных из БД выводится корректно)

Notice: Undefined index: action in C:\xampp\htdocs\ch09\service.php on line 16 (в js (строка 77, внутри обработки клика по кнопке) задаётся значение атрибута action = "addRunner", как это и требуется в строке 16)

Не могу понять, в чём ошибка :(

<body> 
		<header>
			<h2>2011 Race Finishers!</h2>
		</header>
		<div id="main">
			<ul class="idTabs"> 
				<li><a href="#all">Все финишировавшие</a></li> 
				<li><a href="#female">Женщины</a></li> 
				<li><a href="#male">Мужчины</a></li> 
				<li><a href="#new">Добавить нового участника</a></li> 
			</ul> 
			<div id="male">
				<h4>Финишировавшие мужчины</h4>
				<ul id="finishers_m"></ul>
			</div> 
			<div id="female">
				<h4>Финишировавшие женщины</h4>
				<ul id="finishers_f"></ul>		
			</div>
			<div id="all">
				<h4>Все финишировавшие</h4>
				<ul id="finishers_all"></ul>
			</div>
			<div id="new">
				<h4>Добавить нового финишировавшиего</h4>
				<form action="service.php" id="addRunner" name="addRunner" method="POST">
					Имя: <input type="text" name="txtFirstName" id="txtFirstName"> <br>
					Фамилия: <input type="text" name="txtLastName" id="txtLastName"> <br>
					Пол: <select name="ddlGender" id="ddlGender">
						<option value="">--Выберите пол--</option>
						<option value="f">Женский</option>
						<option value="m">Мужской</option>
					</select><br>
					Время:
					<input type="text" name="txtMinutes" id="txtMinutes" size="10" maxlength="2"> (Минуты)
					<input type="text" name="txtSeconds" id="txtSeconds" size="10" maxlength="2"> (Секунды)
					<br><br>
					<button type="submit" name="btnSave" id="btnSave">Сохранить</button>
					<input type="hidden" name="action" value="addRunner" id="action">
				</form>
			</div>
		</div>
		<footer>
			<h4>Поздравляем всех финишировавших!</h4>
			<br>
			<span id="freq"></span><br><br>		
			Последнее обновление: <div id="updatedTime"></div>
			<button id="btnStart">Вернуть обновления</button>
			<button id="btnStop">Прекратить обновления</button>
		</footer>
		<script src="scripts/jquery-1.6.2.min.js"></script>
		<script src="scripts/my_scripts.js"></script>
		<script src="scripts/jquery.idTabs.min.js"></script>
	</body>


<?php
    if ($_GET['action']=='getRunners'){
        $query = "SELECT first_name, last_name, gender,finish_time FROM `runners` ORDER BY finish_time";
        $result = db_connection($query);
        $runners = array();

        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
            //print_r($row); вывод содержимого массива
            array_push($runners,array("fname"=>$row["first_name"],
                                    "lname"=>$row["last_name"],
                                    "gender"=>$row["gender"],
                                    "time"=>$row["finish_time"]));
        }
        echo json_encode(array("runners"=>$runners));
        exit;
    }elseif($_POST['action'] == 'addRunner'){
        $fname = htmlspecialchars($_POST["txtFirstName"]);
        $lname = htmlspecialchars($_POST["txtLastName"]);
        $gender = htmlspecialchars($_POST["ddlGender"]);
        $minutes = htmlspecialchars($_POST["txtMinutes"]);
        $seconds = htmlspecialchars($_POST["txtSeconds"]);
        if (preg_match('/[^\w\s]i',$fname) || preg_match('/[^\w\s]i',$lname)){
            fail("Некорректное имя");
        }
        if (empty($fname)||empty($lname)){
            fail("Пожалуйста, введите имя");
        }
        if (empty($gender)){
            fail("Пожалуйста, укажите пол");
        }
        $time = $minutes.":".$seconds;
        $query = "INSERT INTO runners SET first_name='$fname', last_name='$lname', gender='$gender', finish_time='$time'";
        $result = db_connection($query);

        if ($result){
            $msg = "Бегун ".$fname." ".$lname." успешно добавлен!";
            success($msg);
        }else{
            fail('Вставить бегуна не удалось');
        }
        exit;
    }
    
    function db_connection($query){
        /*Подключение к бд: сервер, тия пользователя, пароль, название базы данных
        В случае не подключения выдаст сообщение и прекратит работу*/
        $link = mysqli_connect("127.0.0.1", "runner_db_user", "runner_db_password", "hfjq_race_info")
            OR die("Нет подключения к БД");
        return mysqli_query($link, $query);
    }

    function fail($message){
        die(json_encode(array("status"=>"fail","message"=>$message)));
    }

    function success($message){
        die(json_encode(array("status"=>"success","message"=>$message)));
    }
?>


$(document).ready(function(){

	var FREQ = 10000 ;
	var repeat = true;
	
	function showFrequency(){
		$("#freq").html( "Страница обновляется каждые " + FREQ/1000 + " секунд.");
	}
	
	function startAJAXcalls(){
	
		if(repeat){
			setTimeout( function() {
					getDBRacers();
					startAJAXcalls();
				}, 	
				FREQ
			);
		}
	}
	
	function getTimeAjax(){
		var time = "";
		$.ajax({
			url: "time.php",
			cache: false,
			success: function(data){
				$('#updatedTime').html(data);
			}
		});
	}
	
	$("#btnStop").click(function(){
		repeat = false;
		$("#freq").html( "Обновления прекращены." );
	});

	$("#btnStart").click(function(){
		repeat = true;
		startAJAXcalls();
		showFrequency();
	});	

	getDBRacers();
	showFrequency();
	startAJAXcalls();

	$("#btnSave").click(function(){
		var ser = $("#addRunner:input").serializeArray();
		$.post($("#addRunner").attr("action"),ser, function(json){
			if (json.status == "fail"){
				alert(json.message);
			}else if(json.status=="success"){
				alert(json.message);
				clearInputs();
			}
		 }, "json");
	});

	function clearInputs(){
		$("#addRunner:input").each(function(){
			$(this).val(''); //задаём атрибуту value формы пустое значение
		});
	}

	$("#addRunner").submit(function(){
		return false;
	}); //отменяет отправку формы по умолчанию, чтобы срабатывало по клику

	function getDBRacers(){
		$.getJSON("service.php?action=getRunners",function(json){
			if (json.runners.length>0){
				$('#finishers_m').empty();
				$('#finishers_f').empty();
				$('#finishers_all').empty();
				
				$.each(json.runners, function() {
					var info = '<li>Имя: ' + this["fname"] + ' ' + this["lname"] + '. Время: ' + this["time"] + '</li>';
					if( this["gender"] == "m" ){
						$('#finishers_m').append( info );
					}else if ( this["gender"] == "f" ){
						$('#finishers_f').append( info );
					}else{  }
					$('#finishers_all').append( info );
				});
			}
		});
		getTimeAjax();
	}
});


Буду благодарна за помощь :(
  • Вопрос задан
  • 907 просмотров
Пригласить эксперта
Ответы на вопрос 1
@heahoh
Full stackoverflow developer
В переменной GET нет ключа action

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы