Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как запустить функцию при отправки данных из HTML-формы PHP-обработчику
 
 автор: Василий   (04.01.2012 в 15:52)   письмо автору
 
 

В форме присутствует загрузка файла и изменение текстовых данных
<form name="add" method='post' action='pu_add.php' enctype="multipart/form-data">
...
input type="submit" value="Сохранить изменения" name="upload_submit" id="submit">


Когда происходит submit - включается обработчик 'pu_add.php, но не срабатывает функция upload_submit, которая размещена сверху над формой

  Ответить  
 
 автор: cheops   (04.01.2012 в 15:53)   письмо автору
 
   для: Василий   (04.01.2012 в 15:52)
 

>но не срабатывает функция upload_submit
Это JavaScript или PHP-функция?

  Ответить  
 
 автор: Василий   (04.01.2012 в 15:55)   письмо автору
 
   для: cheops   (04.01.2012 в 15:53)
 

PHP функция

  Ответить  
 
 автор: cheops   (04.01.2012 в 15:56)   письмо автору
 
   для: Василий   (04.01.2012 в 15:55)
 

Она вызывается в файле pu_add.php? Перед ней имеется какое-то условие? Если да, приведите пожалуйста строку, которая вызывает её.

  Ответить  
 
 автор: Василий   (04.01.2012 в 15:59)   письмо автору
 
   для: cheops   (04.01.2012 в 15:56)
 

она запускается в том же файле где и форма.
    // Запускаем функцию  
    if(!empty($_POST['upload_submit'])) 

  Ответить  
 
 автор: flaers   (04.01.2012 в 16:10)   письмо автору
 
   для: Василий   (04.01.2012 в 15:59)
 

так у вас форма отправляется сюда
action='pu_add.php' 

  Ответить  
 
 автор: Василий   (04.01.2012 в 16:16)   письмо автору
 
   для: flaers   (04.01.2012 в 16:10)
 

тогда не пойму. я объединил вот эти две формы. они работают отдельно друг от друга. Нижняя форма - загружает файл. И функция // Запускаем функцию if(!empty($_POST['upload_submit'])) срабатывает потому что этой формы обработчик записан вот так action=" .
Вопрос как объединить 2 формы, чтоб сработала функция?
<form name="add" method='post' action='pu_add.php'>
<table>
 <tr> <td>Название организации:</td>
  <td> <input value= "<?php echo $_GET['title']; ?>" type="text" name="title"> </td>
 </tr>
<input name="id_pu" type="hidden" value="<?php echo $_GET['id_pu']; ?>">
     <label>
     <input type="submit" name="submit" id="submit" value="Сохранить изменения">
     </label>
</form>

      <form action=" method="post" enctype="multipart/form-data"> 
      <input type="file" name="filename"><br>  
      <input type="hidden" name="id_pu" value='<?php echo $myrow3['id_pu']; ?>'><br>  
      <input type="submit" value="Сохранить изменения"><br> 
      </form> 

  Ответить  
 
 автор: Slo_Nik   (04.01.2012 в 16:22)   письмо автору
 
   для: Василий   (04.01.2012 в 16:16)
 


<?php 
// тут обрабатываете данные из формы, загружаете файл, записываете в базу
?>
<!-- action оставьте пустым если хотите что бы форму обрабатывал код который буден находится в файле выше,
 над формой, или пропишите имя файла, в котором находится форма -->
<form action=''>
 <input type='text' name='title' value='<?php echo $_GET['title']; ?>' />
 <input name="id_pu" type="hidden" value="<?php echo $_GET['id_pu']; ?>">
 <input type="file" name="filename">
 <input type="submit" name="submit" id="submit" value="Сохранить изменения">
</form>

p.s. чтобы избежать новых тем по вопросу загрузки файле не забудьте прописать остальные нужные атрибуты для тега form. я специально прописал только action

[поправлено модератором]

  Ответить  
 
 автор: Василий   (04.01.2012 в 16:29)   письмо автору
 
   для: Slo_Nik   (04.01.2012 в 16:22)
 

если прописать action ="" то не включается обработчик pu_add.
Файл то загрузим, а название предприятия не запишем.
ЗАмкнутый круг

  Ответить  
 
 автор: Slo_Nik   (04.01.2012 в 16:33)   письмо автору
 
   для: Василий   (04.01.2012 в 16:29)
 

так объедините те же обработчики!!!
я же в комментарии написал

<?php  
// тут обрабатываете данные из формы, загружаете файл, записываете в базу 
?>

[поправлено модератором]

  Ответить  
 
 автор: cheops   (04.01.2012 в 16:34)   письмо автору
 
   для: Василий   (04.01.2012 в 16:29)
 

У вас у двух раздельных форм отдельные обработчики? Если да, их нужно объединить, например, в том же pu_add.php, тогда его можно указать в action.php. В любом случае, одна форма - один обработчик.

  Ответить  
 
 автор: cheops   (04.01.2012 в 16:29)   письмо автору
 
   для: Василий   (04.01.2012 в 15:59)
 

>она запускается в том же файле где и форма.
>
    // Запускаем функцию  
>    if(!empty($_POST['upload_submit'])) 

Должно работать, выведите в обработчике дамп массива $_POST
<?php
  
echo "<pre>";
  
print_r($_POST);
  echo 
"</pre>";
?>
Посмотрите, заполнена ли переменная upload_submit

  Ответить  
 
 автор: Василий   (04.01.2012 в 16:40)   письмо автору
 
   для: cheops   (04.01.2012 в 16:29)
 

Переменная заполнена и видно в файле pu_add

[upload_submit] => Сохранить изменения

  Ответить  
 
 автор: cheops   (04.01.2012 в 16:41)   письмо автору
 
   для: Василий   (04.01.2012 в 16:40)
 

Значит условие
    // Запускаем функцию   
    if(!empty($_POST['upload_submit'])) 
должно срабатывать, что идет после него? Сразу вызов функции?

  Ответить  
 
 автор: Василий   (04.01.2012 в 16:51)   письмо автору
 
   для: cheops   (04.01.2012 в 16:41)
 

объединил в один обработчик.
сначала форма:
<form name="add" method='post' action='pu_add.php' enctype="multipart/form-data">
<table width="650" cellspacing="5" cellpadding="5">
 <tr>
  <td width="200" valign="top"><b>Название организации:</b></td>
  <td width="550" align="left" style='background-color:#f0f0f0'>
  <input value= "<?php echo $_GET['title']; ?>" type="text" name="title" size="80" >
  </td>
 </tr>
 <tr>
   <td width="200" valign="top"><b>Logotip:</b></td>
    <td><input type="file" name="logo" value="<?php echo $_FILES['logo']['name']; ?>">загрузить</td>
</tr> 
 </table>
<input name="id_pu" type="hidden" value="<?php echo $_GET['id_pu']; ?>">
   <br>
   <center>
     <label>
     <input type="submit" value="Сохранить изменения" name="upload_submit" id="submit">
     </label>
   </center>
</form>


Обработчик pu_add.php
<table>
<tr><td>
<?php 
/**  
 * Функция загрузки файла (аплоадер)  
 * @param  int    $max_file_size    максимальный размер файла в килобайтах  
 * @param  array  $valid_extensions массив допустимых расширений  
 * @param  string $upload_dir       директория загрузки  
 * @return array                    сообщение о ходе выполнения  
 *  
 * @author IT studio IRBIS-team (www.irbis-team.com)  
 * @copyright © 2009 IRBIS-team   
 */  
    
function uploadHandle($max_file_size 100$valid_extensions = array(), $upload_dir '.')  
    {  
      
        
$error null;  
        
$info  null;  
        
$max_file_size *= 1024;  

        if (
$_FILES['userfile']['error'] === UPLOAD_ERR_OK)  
        {  
            
// проверяем расширение файла  
            
$file_extension pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION);  
            if (
in_array($file_extension$valid_extensions))  
            {  
                
// проверяем размер файла  
                
if ($_FILES['userfile']['size'] < $max_file_size)  
                {  
                
$destination ="img/logo_pu/" $_FILES['userfile']['name']; 
      
                    if (
move_uploaded_file($_FILES['userfile']['tmp_name'], $destination))  
                        
$info 'Файл успешно загружен';  
                    else  
                        
$error 'Не удалось загрузить файл';  
                }   
                else  
                    
$error 'Размер файла больше допустимого';  
            }   
            else  
                
$error 'У файла недопустимое расширение';  
        }   
        else  
        {  
            
// массив ошибок  
            
$error_values = array( 

                
UPLOAD_ERR_INI_SIZE   =>
 
'Размер файла больше разрешенного директивой upload_max_filesize в php.ini',  
                
UPLOAD_ERR_FORM_SIZE  =>
 
'Размер файла превышает указанное значение в MAX_FILE_SIZE',                            
                
UPLOAD_ERR_PARTIAL    => 'Файл был загружен только частично',   
                
UPLOAD_ERR_NO_FILE    => 'Не был выбран файл для загрузки',   
                
UPLOAD_ERR_NO_TMP_DIR => 'Не найдена папка для временных файлов',   
                
UPLOAD_ERR_CANT_WRITE => 'Ошибка записи файла на диск' 

                                  
);  
      
            
$error_code $_FILES['userfile']['error'];  
      
            if (!empty(
$error_values[$error_code]))  
                
$error $error_values[$error_code];  
            else  
                
$error 'Случилось что-то непонятное';  
        }  
      
        return array(
'info' => $info'error' => $error);  
    }  
      
/////////////////////////////////////////////////////////////////////      
    
$extensions = array('jpg''jpeg''png''gif');  
    
$upload_dir 'images';  
      
    
// Запускаем функцию  
    
if(!empty($_POST['upload_submit'])) 
    {      
        
$message uploadHandle(200$extensions$upload_dir);  
    
        
// Выводим сообщение  
        
echo $message['error'] ? $message['error'] : $message['info'];  
    } 
?>  
<?php 
if (isset($title) &&  isset($logo))
{
/*Здесь мы пишем, что можно заносить информацию в базу*/
$result mysql_query ("insert bd SET title='$title', logo='$logo' ");
if (
$result == 'true') {echo "<br><p><strong><font color='#085991'><center>Спасибо!";
else {echo 
"Вы ввели не всю информацию";}
}          

else 
{
echo 
"Вы ввели не всю информацию";
}
?>
</td></tr></table>

функция срабатывает в обработчике

  Ответить  
 
 автор: cheops   (04.01.2012 в 17:05)   письмо автору
 
   для: Василий   (04.01.2012 в 16:51)
 

Есть хороший прием. Помещайте в код временные строчки
<?php
  
echo "До сюда интерпретатор дошел";
  exit();
?>

и постепенно сдвигайте их вниз, сначала внутри if-блока
if(!empty($_POST['upload_submit'])) 
затем внутри функции uploadHandle(), и при загрузке смотрите, выводится вам сообщение или нет. Продвигайте строчки по программе до тех пор, пока они не перестанут выводиться, так вы выясните доходит до этой точки программа или нет, и что происходит, а главное в каком участке. У нас нет полностью вашего кода, всех ваших файлов и путей. Даже если вы выложите на их разворачивание уйдет время, в том числе и ваше. Лучше сразу приучаться локализовывать проблему.

Вы пишите "не срабатывает функция upload_submit, которая размещена сверху над формой", а теперь оказывается она срабатывает (проблема где-то внутри самой функции), а в тему уже 15 сообщений, т.е. вряд ли кто-то будет новый подключаться к обсуждению, просто читать все не будет. Если бы из первого поста было ясно, что до функции upload_submit() дело все-таки доходит, эти 15 сообщений можно было бы потратить на анализ функции uploadHandle(). Это ни в коем случае не упрек вам, просто совет, как можно заранее более точно локализовать проблему. Ведь участники дискуссии не имея кода, бросаются именно на то, на что вы указываете и бывают очень расстроены, что дело оказывается не в этом и они долго и упорно искали проблему там, где её нет. А из-за того, что они расстраиваются, начинает само сабой расти предубеждение уже против вас, хотя это и не правильно и сами они проходили через этот этап, только уже не помнят его.

  Ответить  
 
 автор: Василий   (04.01.2012 в 17:33)   письмо автору
 
   для: cheops   (04.01.2012 в 17:05)
 

Позитивный Вы человек. А все позитивные - мудрые.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования