Не пойму, в чем проблема при авторизация с сессией на php?

Доброго времени суток. Имею вот такую систему авторизации на сайте:
<?php
                    if(isset($_SESSION['name']))
                    {
                        echo "Какой то контент потом будет";
                    }
                    else{
                            echo '<form method="post" action="index.php">
                            <input type="text" name="login" placeholder="Логин" required/> 
                            <input type="password" name="password" placeholder="Пароль" required/>
                            <input type="submit" name="submit" value="Войти"/>
                        </form>';}
                         ?>
                                    <?php 
 
                                    if(isset($_POST[submit])){
                            $login=$_POST['login'];
                            $password=md5($_POST['password']);
 
                            $query=mysql_query("SELECT * FROM clients WHERE login='$login'");
                            $client_data = mysql_fetch_array($query);
                            if ($client_data['password'] == $password){
                                session_start();
                                $_SESSION['name']= $login;
                            }
                            else{
                                echo "Не верный логин или пароль";
                            }
                        }
                    ?>

Он нормально проверяет правильность пароль и выводит соответствующую надпись.
Но если пароль правильный, то он должен вместе формы авторизации выдать какой то контент, но вместо этого форма авторизации остается, и выходит ошибка "Warning: session_start() [function.session-start]: Cannot send session cookie" . Нагуглил лишь то, что session_start(); должен быть в начале кода, но и это не помогает. Помогите пожалуйста разобраться. И еще, впервые пишу сайт то на php с mysql.
  • Вопрос задан
  • 3155 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Нагуглил лишь то, что session_start(); должен быть в начале кода, но и это не помогает.

Помогает.

Вспомнил. Скорее всего, это BOM гадит.
Надо сохранять файл в кодировке UTF-8 without BOM, а лучше вообще сменить редактор на что-нибудь пристойное, с подсветкой кода хотя бы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
reffy
@reffy
Я молодец.
session_start() в самом начале php файла решит вашу проблему. Перед session_start не должно быть ничего в файле, кроме <?php (никаких там html тегов или ещё чего-то).

Сначала session_start, а потом уже html-код или какие-то include и всё остальное.
Ответ написан
Комментировать
@reZed
Вы проверяете переменную name в сессии не запустив сессиию.
if(isset($_SESSION['name']))

Нужно запускать сессию до этой строчки. И вообще нужно запускать сессию до того будет произведен любой вывод данных, иначе заголовки будут уже сформированы и нельзя будет поставить куку с идентефикатором сессии. Как то так.
PS Лучше запускать сессию в самом начале выполнения скрипта
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Судя по всему у вас перед выводом этого участка есть еще html, отдаваемый браузеру (Не может же у вас не быть всяких html head body и т д)

session_start();
Должен быть вообще раньше всего.
Ответ написан
@Bert Автор вопроса
<?php $login=$_SESSION['name'];
			if(!isset($_GET["id"])){
									$id=1;
								}else
								{
									$id=$_GET["id"];
								}
								$result = mysql_query("SELECT title, zayavka, id FROM zayavki WHERE id='$id'") or die(mysql_error());
								$news = mysql_fetch_array($result);
								
						$title=mysql_result($result,0,"title"); 
						$zayavka=mysql_result($result,0,"zayavka"); 
						/* Создание формы для редактирования */ 
						print "<form method=post action='zayavki.php'>"; 
						print "<br><br><b>Введите тему:</b>"; 
						print "<br><input name='title' value='$title' size=10>"; 
						print "<br><br><b>Введите заявку:</b>"; 
						print "<br><input name='zayavka' value='$zayavka' size=10>"; 
						print "<br><br><input name='edit' type='submit' value='Сохранить'>"; 
						print "</form>"; 
															
							
				if(isset($_POST[edit])){
					$id=$_GET["id"];
					$title=$_POST['title'];
					$zayavka=$_POST['zayavka'];
					$login=$_SESSION['name'];
					$status='Открыт';
					{
					
					$query=mysql_query("UPDATE zayavki SET title = '$title', zayavka ='$zayavka' WHERE id = '$id' ") or die(mysql_error());
					}
					
						die('Ошибка');
					}
				
			?>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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