За последние 24 часа нас посетил 15601 программист и 1554 робота. Сейчас ищут 874 программиста ...

Регистрация объявления php

Тема в разделе "Прочие вопросы по PHP", создана пользователем Evgenij404, 3 янв 2014.

  1. Evgenij404

    Evgenij404 Новичок

    С нами с:
    3 янв 2014
    Сообщения:
    20
    Симпатии:
    0
    Здравствуйте! Вопрос такой есть страница, где пользователь заполняет форму объявления. Когда юзер заходит на страницу создается сессия session_start(), (страница в формате php) сама страница состоит из двух html форм, в первой форме код приведенный ниже, то есть только input file для картинки, фрэйм куда возвращается само изображение сервером и событие onchange при котором через js форма отправляется на сервер.
    Код (Text):
    1. <form action="avto_reg.php" method="POST" id="frimg" enctype="multipart/form-data" name="dlk" target="hiddenframe">
    2.                     Загрузите фото <input type="file" name="userfile" id='userfile' accept="image/jpeg" onchange="document.forms.dlk.submit();"/>
    3. <input type="submit" name="upload" id="upload" value="Загрузить"/>
    4.                         <iframe name="hiddenframe" id="hiddenframe"></iframe>
    5.  
    6.                 </form>
    Код php принимающий эту форму
    Код (Text):
    1.  
    2. if (isset($_FILES['userfile']))
    3. {    
    4.     $upl = "test/";
    5.     $uplfile = $upl.basename($_FILES['userfile']['name']);
    6.     move_uploaded_file($_FILES['userfile']['tmp_name'], $uplfile);
    7.            
    8.     echo "<img src='$uplfile'width='200px' />";
    9.     $_SESSION['im'] = $uplfile;
    10.     if (isset($_SESSION['im']))
    11.     {
    12.         echo "Есть сессия";
    13.     }      
    14. }
    Этот код возвращает фразу сессия есть, то есть вроде все хорошо, далее вторая форма в которой все остальные данных которые пользователь заполняет и отправляет состоит в основном из полей text, вообщем она доходит нормально, вот код принимающий вторую форму
    Код (Text):
    1.  
    2. if (isset($_POST['valp']))
    3. {
    4.     $svs = $_SESSION['im']; // в переменную свс заносим путь к файлу
    5.     echo "$svs"; //выводим путь к файлу , но переменная пуста
    6.     if (isset($_POST['change_category']) && isset($_POST['change'])&& isset($_POST['mark']) && isset($_POST['model']))
    7.     {      
    8.         avtoreg_img($_POST['change_category'],$_POST['change'],$_POST['mark'], $_POST['model'],$_SESSION['im']);      
    9.     }
    10. }
    Эти два скрипта php идут в одном файле друг за другом. В этом скрипте вызывается функция avtoreg_img которая заносит все данные в базу, и они успешно заносятся, но вместо пути к файлу в базе получается пустая строка, то есть в первом скрипте в сессии как бы путь к файлу есть, а вот во втором при обращении к $_SESSION['img'], переменная пуста. Подскажите пожалуйста в чем может быть дело? Может я что не так делаю.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    http://phpfaq.ru/debug

    Добавлено спустя 5 минут 24 секунды:
    обычно если сессионная переменная отсутствует, это говорит о том что сессия вообще не стартовала.

    чтобы это точно понять, тебе надо включить отображение ошибок и в нужном месте вывести содержимое $_SESSION.
     
  3. Evgenij404

    Evgenij404 Новичок

    С нами с:
    3 янв 2014
    Сообщения:
    20
    Симпатии:
    0
    Код (Text):
    1.  
    2. if (isset($_FILES['userfile']))
    3. {    
    4.     $upl = "test/";
    5.     $uplfile = $upl.basename($_FILES['userfile']['name']);
    6.     move_uploaded_file($_FILES['userfile']['tmp_name'], $uplfile);
    7.            
    8.     echo "<img src='$uplfile'width='200px' />";
    9.     $_SESSION['im'] = $uplfile; // сохраняем в сесси путь к файлу
    10.     if (isset($_SESSION['im']))
    11.     {
    12.         echo "Есть сессия";
    13.         print_r($_SESSION);  // выводит Array ( [im] => test/1231.jpg ) - правильный путь к файлу
    14.     }      
    15. }
    В первом скрипте print_r($_SESSION) выводит содержимое переменой $_SESSION['im'], все нормально.
    Во втором скрипте тоже самое не выводит ничего, пустота.

    Добавлено спустя 15 минут 14 секунд:
    Изменил второй скрипт, условие if
    Код (Text):
    1.  
    2. if (isset($_POST['valp']) || isset($_SESSION['im']))
    3. {
    4.         print_r($_SESSION);
    5.     $svs = $_SESSION['im']; // в переменую свс заносим путь к файлу
    6.     echo "$uplfile"; //выводим путь к файлу , но переменая пуста
    7.     if (isset($_POST['change_category']) && isset($_POST['change'])&& isset($_POST['mark']) && isset($_POST['model']))
    8.     {      
    9.         avtoreg_img($_POST['change_category'],$_POST['change'],$_POST['mark'], $_POST['model'],$_SESSION['im']);        
    10.     }
    11. }
    собственно при выборе картинки, срабатывает первый скрипт выводит переменные сессии, за ним второй при таком условии так же выводит правильно, однако при нажатии на кнопку отправить вторую форму, эта сессия уже пуста. Не понятная пока для меня ситуация...

    Добавлено спустя 15 минут 28 секунд:
    Notice: Undefined variable: _SESSION in C:\Apache\www\avto_reg.php on line 36
    Notice: Undefined variable: _SESSION in C:\Apache\www\avto_reg.php on line 37
    Notice: Undefined variable: uplfile in C:\Apache\www\avto_reg.php on line 38
    Notice: Undefined variable: _SESSION in C:\Apache\www\avto_reg.php on line 41
    Notice: Undefined variable: _SESSION in C:\Apache\www\setup_sql.php on line 31
    Ошибки которые выдал, собственно все те строки где попытка обратиться к сессии. Только почему её не существует...
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А где нибудь ты используешь session_start, php.net/session_start?
     
  5. Evgenij404

    Evgenij404 Новичок

    С нами с:
    3 янв 2014
    Сообщения:
    20
    Симпатии:
    0
    Все решилось) Спасибо artoodetoo, за толчок в нужном направлении) Прописал session_start() не в документе с html формами, а непосредственно в avto_reg.php куда эти формы летят, все заработало)