Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
1 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 62

Что не так с кодом?

15.01.2020, 00:12. Показов 3949. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$surname = $_POST['surname'];
$name = $_POST['name'];
$workName = $_POST['workName'];
$tel = $_POST['tel'];
$email = $_POST['email'];
$age = $_POST['age'];
$sity = $_POST['sity'];
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['file']['tmp_name'])));
 
$message.= 'Content-Type: application/octet-stream; name="attachment.jpg"'.'\n';
$message.= 'Content-Transfer-Encoding: base64'.'\n';
$message.= 'Content-Disposition: attachment'.'\n\n';
$message.= $attachment.'\n';
 
mail("mail@mail.ru", "Заявка с сайта", "Фамилия:".$surname.". Имя: ".$name. ". Название работы: ".$workName. ". Телефон: ".$tel. ". E-mail: ".$email. ". Возраст: ".$age. ". Населенный пункт: ".$sity.$message, "From: mail2@mail.ru \r\n");
?>
Форма должна отправлять на mail данные полей + файл img. Вместо этого приходит такое сообщение:

Фамилия:. Имя: hgyg. Название работы: kjyfyt. Телефон: 4787. E-mail: kalinkasteisi@mail.ru. Возраст: 10. Населенный пункт: mhytfContent-Type: application/octet-stream; name="attachment.jpg"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment\n\n
\n

Что я делаю не так? Почему не приходит файл?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2020, 00:12
Ответы с готовыми решениями:

Что не так с рабочим кодом?
Подскажите, что не так с кодом: $import_contacts_url = 'https://адрес_куда_отправляем'; function send_request($url,...

Что не так с кодом? Почему выдает ошибку?
Есть php код, но он не работает. Выдает ошибку (Fatal error: Call to undefined function password_hash() in...

php order desc что не так с кодом
Всем привет. Делаю сайт, встала проблема нужна сортировка новостей. Как бы не пробовал ничего не получается. &lt;?php $sql = 'SELECT...

47
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
29.01.2020, 19:48
Студворк — интернет-сервис помощи студентам
а письма нормально отправляются (с файлами?), если файл передается без ошибки?
странно, у меня все файлы отправляются. сейчас проверю еще. не должны, однако.

Добавлено через 3 часа 4 минуты
у меня файлы с любыми названиями отправляются нормально. может, какая-то конфигурация непонятная сервера. попробуйте заменить строку 27 вот этими
PHP
1
2
3
$finf = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finf, $_FILES['file']['tmp_name']);    
$type = explode('/', $mime);
а строки 46-47 вот этой одной
PHP
1
$filename = 'image'.uniqid().'.'.$ext;
Добавлено через 22 минуты
опп, svg файлы не отправляются.

Добавлено через 2 минуты
в строчку 26 надо добавить png файлы
PHP
1
$allowed_ext = ['bmp', 'gif', 'jpg', 'jpeg', 'svg', 'png'];
0
Невнимательный
 Аватар для ft4l
3132 / 1327 / 360
Регистрация: 08.02.2013
Сообщений: 7,744
Записей в блоге: 2
29.01.2020, 22:46
с именами utf вроде перед именем ещё что-то лепят.... если там utf-8
с https://stackoverflow.com/ques... -filenames
такая строка
According to RFC2231 you can try to define extended parameter:
Content-Type: application/pdf; name*=utf-8''%D7%A9%D7%9C%D7%95%D7%9D%2E%70%64%66
но какая то непонятная )) гугл совем испортился не даёт нормальную ссылку на RFC2231

Добавлено через 3 минуты
Update as per comments:
While specification explicitly forbid that, most mail clients should understand following format 'name="?UTF-8?B?' . base64_encode($filename) . '?='
там же )
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
29.01.2020, 23:06
с именами, которые подставляются в mail. в скрипте это в строчках 37-37. пример, на который показывает ссылка, для pdf-файлов, у нас изображения.
что работает в этот момент, и что не работает?
0
1 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 62
30.01.2020, 16:22  [ТС]
Я пока пробую с jpg. Замена строчек кода, указанных вами, не помогла. По прежнему файлы с таким названием 79243637969.jpg доходят нормально, но если в названии есть другие символы кроме цифр, то появляется сообщение "<p>Неправильно заполнена форма:</p>Поле file: Недопустимый формат файла<br/>". И файл на почту не приходит

Добавлено через 19 минут
А версия php здесь играет значение? У меня 7.1

Добавлено через 2 минуты
Можно сделать проверку файла через расширение FileInfo?
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
30.01.2020, 19:33
Цитата Сообщение от Steisi1982 Посмотреть сообщение
Можно сделать проверку файла через расширение FileInfo?
можно. в своем сообщении (вчера, 19:48) я предложил заменить 27 строку на fileinfo. в Вашем случае, когда файл не сохраняется на сервере, а отправляется в email, да еще и расширение заменяется на jpg, он не сможет навредить. поэтому можно было и прежний вариант, можно и fileinfo.
Цитата Сообщение от Steisi1982 Посмотреть сообщение
А версия php здесь играет значение? У меня 7.1
нет, не имеет. у меня 7.3, но, как я уже раньше писал, этот скрипт отправки я использовал очень давно, когда версия была 5.2 или 5.4 - не скажу точно. протокол отправки электронных писем очень старый, но его стандарты до сих пор действительны. Вот статья про отправку email написанная еще в 2002 году, которая до сих актуальна
Цитата Сообщение от Steisi1982 Посмотреть сообщение
если в названии есть другие символы кроме цифр, то появляется сообщение
я пробовал даже файлы с такими названиями отсылать: 'чеБ$у ра-ш ка.jpg', '1---4-55-l.png' и прочие. все отправляются нормально. как бы мне увидеть Ваши скрипты - что же там, очень интересно.

Добавлено через 50 минут
попробуйте заменить строки 24 и 25 в сообщении 28.01.2020, 21:28 следующими:
PHP
1
2
$fname = pathinfo($_FILES["file"]["name"])['filename'];
$ext = strtolower(pathinfo($_FILES["file"]["name"])['extension']);
0
1 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 62
30.01.2020, 22:08  [ТС]
"попробуйте заменить строки 24 и 25 в сообщении 28.01.2020, 21:28 следующими:" - Не помогает

"как бы мне увидеть Ваши скрипты - что же там, очень интересно." - это пожалуйста, хоть весь код. Только прошу сильно тапками не закидывать, я только учусь

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<form enctype="multipart/form-data" id="applicationForm" action="./send.php" method="post" target="hiddenframe">
            <div class="form-float">
                    <label for="name">Имя</label><br>
                    <input id="name" type="text" name="name" required>
            </div>
            <div class="form-float">
                    <label for="surname">Фамилия</label><br>
                    <input id="surname" type="text" name="surname" required>
            </div>
            <div class="form-float">
                <label for="age">Возраст</label><br>
                <input id="age" type="number" name="age" min="5" max="18" required>
            </div>
            <div class="form-float">
                <label for="sity">Населенный пункт</label><br><input id="sity" type="text" name="sity" required>
            </div>
            <div class="form-float">
                <label for="tel">Контактный телефон</label><br><input id="tel" type="tel" name="tel" required>
            </div>
            <div class="form-float">
                <label for="email">e-mail</label><br><input type="email" id="email" name="email" required>
            </div>
            <span><strong>Статус семьи</strong><br><input type="radio" name="familyStatus" value="Многодетная">Многодетная<input type="radio" name="familyStatus" value="Не многодетная" checked>Нет</span><br>
            <label for="workName">Название работы</label><br><input id="workName" type="text" name="workName" required><br><label for="file" class="chous">Выберите файлы</label>
            <input type="hidden" name="MAX_FILE_SIZE" value="64000">            
            <input id="file" name="file" type="file" accept="image/*" required>
            <input id="formBtn" type="submit" value="Отправить">
            </form>
            <iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
$errors = [];
if (isset($_POST['email'])) {
    foreach ($_POST as $key => $value) {
        if (trim($value) == '') {
            $errors[$key] = 'Не заполнено поле '.$key;
        } else {
            if ($key == 'age') {
                if (strval(intval($value)) != $value) {
                    $errors[$key] = 'Неправильно указан возраст';
                }
                $age = intval($value);
            } elseif ($key == 'email') {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $errors[$key] = 'Неправильно указан email';
                }
                $email = filter_var($value, FILTER_SANITIZE_EMAIL);
            } else {
                $$key = htmlentities($value, ENT_QUOTES, 'utf-8');
            }
        }
    }
    // разрешенные расширения файлов
    $fname = pathinfo($_FILES["file"]["name"])['filename'];
    $ext = strtolower(pathinfo($_FILES["file"]["name"])['extension']);
    $allowed_ext = ['bmp', 'gif', 'jpg', 'jpeg', 'svg']; 
    $type = explode('/', $_FILES["file"]["type"]);
    if ($type[0] != 'image' || !in_array($ext, $allowed_ext)) {
        $errors['file'] = $fname.'Недопустимый формат файла';
    }
    if (!count($errors)) {
        
        if ($age == 5 || $age == 6) {
            $mailto = "mail1@mail.ru";
        } elseif ($age >= 7 && $age <= 9) {
            $mailto = "mail2@mail.ru";
        } elseif ($age >= 10 && $age <= 12) {
            $mailto = "mail3@mail.ru";
        } elseif ($age == 13 || $age == 14) {
            $mailto = "mail4@mail.ru";
        } elseif ($age >= 15 && $age <= 18) {
            $mailto = "mail5@mail.ru";
        } else {
            echo ("Простите вы не подходите по возрасту");
        }
        
        $from_mail = "mail6@mail.ru";
        $replyto = "mail7@mail.ru";
        $from_name = "My site service";
        $subject = 'Сообщение с сервиса';
        $subject= '=?utf-8?B?' . base64_encode($subject) . '?=';
        $message = "Фамилия:".$surname.".<br/>
            Имя: ".$name. ".<br/>
            Название работы: ".$workname. ".<br/>
            Телефон: ".$tel. ".<br/>
            E-mail: ".$email. ".<br/>
            Возраст: ".$age. ".<br/>
            Населенный пункт: ".$sity."<br/>";
        $filename = 'image'.uniqid().'.'.$ext;
        $content = chunk_split(base64_encode(file_get_contents($_FILES["file"]["tmp_name"])));
        $uid = md5(uniqid(time()));
        $header = "From: " . $from_name . " <" . $from_mail . ">\r\n";
        $header .= "Reply-To: " . $replyto . "\r\n";
        $header .= "MIME-Version: 1.0\r\n";    
        $header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\r\n\r\n";
        $body = "This is a multi-part message in MIME format.\r\n";
        $body .= "--" . $uid . "\r\n";
        $body .= "Content-type:text/html; charset=utf-8\n";
        $body .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
        $body .= "<div>" . $message . "</div>\r\n\r\n";
 
        $body .= "--" . $uid . "\r\n";
        $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"\r\n"; // use different content types here
        $body .= "Content-Transfer-Encoding: base64\r\n";
        $body .= "Content-Disposition: attachment; filename=\"" . $filename . "\"\r\n\r\n"; // For Attachment
        $body .= $content . "\r\n\r\n";
        $body .= "--" . $uid . "--";
        if (mail($mailto, $subject, $body, $header)) {
            echo "<p>Письмо успешно отправлено</p>"; 
            } else {
            echo "<p>Письмо не удалось отправить</p><pre>";
            print_r(error_get_last());
            echo '</pre>';
        }
    } else {
        echo '<p>Неправильно заполнена форма:</p>';
        foreach ($errors as $field => $error) {
            echo 'Поле '.$field.': '.$error.'<br/>';
        }
    }
}
?>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
jQuery(document).ready(function(jQuery) {
    $("#file").change(function(ev) {
        $(".chous").after("Выбран файл: " + $("#file").val());
    });
    $("").submit(function(){
        return false; 
    });
//            поведение формы при нажатии Enter
    $("#calcForm").keydown(function(event){
        if(event.keyCode == 13) {
            event.preventDefault();
            return false;
        }
    });
//            функция валидации e-mail
    function mailValid() {
        $(".errorText").remove();
        var pattern = /^[a-z0-9_-]+@[a-z0-9-]+\.([a-z]{1,6}\.)?[a-z]{2,6}$/i;
        if($("#email").val() == ''){
            $("#email").after("<span class='errorText'><br>Поле не должно быть пустым!</span>");
            return false;
        }else{
            if($("#email").val().search(pattern) == 0){
                return true;
            }else{
                $("#email").after("<span class='errorText'><br>Пожалуйста, проверьте правильность введения e-mail</span>");
                return false;
            }
        }
    }
// Функция валидации текстовых полей
    function inpTextValid() {
        $(".errorText1").remove();
        var pattern = /^[а-яё\s-]+$/i; //кирилица с пробелом и дефисом вроде бы проверить
        $("#applicationForm input[type=text]").each(function(){
            if ($(this).val() == "") {
                $(this).after("<span class='errorText1'><br>Поле не должно быть пустым</span>");
            } else if ($(this).val().search(pattern) == 0) {
                return true;
            } else {
                $(this).after("<span class='errorText1'><br>Поле может содержать только русские буквы, дефис или пробел</span>");
            }
        });
    }
 
// функция валидации поля возраст
    function inpAgeValid() {
        $(".errorText2").remove();
        var pattern = /^\d+/;
        var ageVal = $("#age").val();
        if(ageVal == ''){
            $("#age").after("<span class='errorText2'><br>Поле не должно быть пустым!</span>");
            return false;
        }else{
            if((ageVal.search(pattern) == 0) && (ageVal > 4) && (ageVal < 19)){
                return true;
            }else{
                $("#age").after("<span class='errorText2'><br>Возраст участника должен быть от 5 до 18 лет</span>");
                return false;
            }
        }
    }
// функция валидации поля телефон
    function inpTelValid() {
        $(".errorText3").remove();
        var pattern = /^\+7\s?[\(]{0,1}9[0-9]{2}[\)]{0,1}\s?\d{3}[-]{0,1}\d{2}[-]{0,1}\d{2}/i;
        var telVal = $("#tel").val();
        if(telVal == ''){
            $("#tel").after("<span class='errorText3'><br>Поле не должно быть пустым!</span>");
            return false;
        }else{
            if(telVal.search(pattern) == 0) {
                return true;
            }else{
                $("#tel").after("<span class='errorText3'><br>Телефон должен соответствовать формату +79999999999</span>");
                return false;
            }
        }
    }
    $("input[type=email]").change (function() {
        mailValid();
    });
    $("input[type=number]").change (function() {
        inpAgeValid();
    });
    $("input[type=tel]").change (function() {
        inpTelValid();
    });
    $("#formBtn").click(function() {
        if (mailValid() && inpTextValid() && inpAgeValid() && inpTelValid()) {
            $("").submit(function(){
                return true; 
            });
        }
    });
});
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
30.01.2020, 22:17
Лучший ответ Сообщение было отмечено Steisi1982 как решение

Решение

Steisi1982, в html5 коде в строке 25 указано ограничение на максимальный размер загружаемых файлов 64000, что равно 64кБ. увеличьте там значение до, например, 64000000. видимо, файлы с буквами в названии имели размер больше 64кБ и не отправлялись
1
1 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 62
31.01.2020, 01:25  [ТС]
Заработало ))))))))
Вот что значит недосыпание

Огромное спасибо!!!!!!!!! )))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2020, 01:25
Помогаю со студенческими работами здесь

Что не так с кодом? ( пытаюсь понять, что не так? )
Есть исходный код. Hook, работает хорошо, но есть минус огромный - перестаёт писать в лог, при открытии программы\игры Фуллскрином. т.е...

что не так с кодом?
Есть кусок кода: .ELSEIF uMsg==WM_CTLCOLOREDIT invoke SetTextColor,wParam,Yellow invoke SetBkColor,wParam,Black invoke...

Что не так с кодом?
Вот условие: Даны натуральные числа n, b0,b1,…,bn.Вычислить: f(b0)+f(b1)+…+f(bn), где f(x)=x^2,если х кратно 3 f(x)=х,если х при...

Что не так с кодом?
Задание Имеется текстовая строка, которая содержит произвольное скобочное выражение (скобки (), , или {}). Необходимо создать функцию...

что не так с кодом?
Только начал изучать программирование по книге Прата С. возникли проблемы с упражнениями в конце второй главы, а именно с 5: Напишите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
Модель здравоохранения 12. добавление болезней через ресурпул, как аварии
anaschu 22.05.2026
Болезни — это ключевая часть нашей модели. Нам нужно, чтобы работник периодически уходил на больничный, его задание при этом зависало, а после выздоровления работа возобновлялась. Реализуем это двумя. . .
Модель здравоохранения 11. Создаём классы Задание и Работник
anaschu 22.05.2026
В AnyLogic каждая заявка и каждый ресурс — это объект определённого класса. Нам нужно создать два класса: Задание (заявка) и Работник (ресурс). Класс Задание В дереве проекта нажимаем правой. . .
Модель здравоохранения 10. Новая модель, смотрим, как добавлять логические блоки, и что писать внутри
anaschu 22.05.2026
Открываем AnyLogic, создаём новый проект. В дереве проекта появляется класс Main — это главный агент, в котором будет жить вся наша логика. Палитра блоков Слева находится палитра. Нас интересует. . .
модель ЗдравоСохранения 9. Новая модель, разбираемся, как ее создавать
anaschu 22.05.2026
В этой серии постов мы построим модель небольшого рабочего коллектива. Сотрудники получают задания, выполняют их, иногда болеют — и мы хотим посчитать, сколько это стоит компании. Метод. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru