Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Помощь по коду

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Я думаю у каждого разработчика в работе бывают сложные моменты, когда застрял с какой-нибудь ошибкой или задачей и хочется попросить помощь или просто свежего взгляда у другого специалиста или сообщества в целом. На форуме часто создают топики с вопросами по программированию. Но это не удобно. Предлогаю создать один топик, где будем обсуждать подобные вопросы. Я это вижу так: человек кидает ссылку на вопрос на stackoverflow.com либо просто размещает код в отдельном сообщении, с маркемами, какие технологии там земешаны. Тем кто может что-то сказать по существу — отвечает в комментах к сообщению или на самом ресурсе.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

#ARMSEP3#NBU#BAT#!@%#R@$sadfhb!#IU@$Q%*

И шо, найдется кто-то, кому интересно общение о костылях. Например, под АРМ-СЕП 3 с контролем доступности файла для перемещения между локальными и сетевыми папками обмена (будничные извращения под нормативку и софт, который после переписывания имел ввиду контроль за операциями с файлами при общении с другими системами).

@ECHO OFF
SETLOCAL EnableDelayedExpansion

rem Требуется указание всех трех параметров запуска 
IF "%1"=="" GOTO END
IF "%2"=="" GOTO END
IF "%3"=="" GOTO END

rem Параметры запуска пакетного файла

SET ARG_SOURCE=%1
SET ARG_DESTINATION=%2
SET ARG_ARCHIVE=%3

rem Текущее время с ведущими нулями

SET DATE_NOW=%DATE: =0%
SET TIME_NOW=%TIME: =0%
SET DY=%DATE_NOW:~6,4%
SET DM=%DATE_NOW:~3,2%
SET DD=%DATE_NOW:~0,2%
SET TH=%TIME_NOW:~0,2%
SET TM=%TIME_NOW:~3,2%
SET TS=%TIME_NOW:~6,2%

rem Формирование ветки каталогов в папке архива перемещаемых файлов

SET DIR_ARCHIVE=%ARG_ARCHIVE%\%DY%%DM%\%DD%\%TH%%TM%%TS%

rem Формирование ветки каталогов к протоколам премещений

SET FILE_LOG_DAY=%ARG_ARCHIVE%\%DY%%DM%\%DD%\%DY%%DM%%DD%.log
SET FILE_LOG_LOC=move_io.log 

rem Проверка доступности папки источника и получателя

SET LOG_DT=%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%

IF NOT EXIST %ARG_SOURCE% (
   SET LOG_MSG=ERROR: Нет доступа к %ARG_SOURCE% 
   ECHO !LOG_DT! - !LOG_MSG! >> %FILE_LOG_DAY%
   ECHO !LOG_DT! - !LOG_MSG! >> %FILE_LOG_LOC%
   GOTO END
)
IF NOT EXIST %ARG_DESTINATION% (
   SET LOG_MSG=ERROR: Нет доступа к %ARG_DESTINATION% 
   ECHO !LOG_DT! - !LOG_MSG! >> %FILE_LOG_DAY%
   ECHO !LOG_DT! - !LOG_MSG! >> %FILE_LOG_LOC%
   GOTO END
)

rem Перемещение файлов из папки источника в папку получателя

cmd /c exit 0 
FOR %%f IN (%ARG_SOURCE%\*.*) DO (
   SET LOG_DT=%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%
   rename %%f %%~nxf
   IF !errorlevel! == 0 (
      mkdir %DIR_ARCHIVE%
      copy /y %%f %DIR_ARCHIVE%
      move /y %%f %ARG_DESTINATION%
      IF !errorlevel! == 0 (
         SET LOG_MSG=OK: Файл %%~nxf перемещен из %ARG_SOURCE% в %ARG_DESTINATION%
      ) ELSE (
         SET LOG_MSG=ERROR: !errorlevel! Ошибка перемещения файла %%~nxf из %ARG_SOURCE% в %ARG_DESTINATION% 
      )
   ) ELSE (
      SET LOG_MSG=SKIP: Файл %%~nxf в %ARG_SOURCE% занят другим процессом
   )
   ECHO !LOG_DT! - !LOG_MSG! >> %FILE_LOG_DAY%
   ECHO !LOG_DT! - !LOG_MSG! >> %FILE_LOG_LOC%
   cmd /c exit 0
)

:END

Если будет не интересно или не удобно — прост оне будут пользоваться. Не понимаю уместности комментариев по поводу удобно или не удобно.

УРА! Стэковерфлоу больше не нужен!

Точней, английский больше не нужен!

На стековерфлоу уже тоже сделали языки нацменшин.

ЗЫ: кстати из свеженького на тему:
scontent-waw1-1.xx.fbcdn.net/...​dd631a08250ff&oe=5A954106

ru.stackoverflow.com — уже давно

Но это не удобно

А по-вашому більш зручно заходити в тему, де будуть питання з абсолютно різних мов програмування, областей застосування, рівнів досвіду авторів і т.д.? А якщо ще уявити, що люди будуть залишати хоча б по десять коментарів під кожним питанянм, то і взагалі дана тема буде таким собі смітничком.

До речі, навіть на Stackoverflow явно не вистачає бажаючих відповідати на поставлені питання, не мало з яких залишаються проглянутими біля десятка разів.

А по-вашому більш зручно заходити в тему

Да.

питання з абсолютно різних мов програмування

Для этого и ставим маркеры/теги, которые удобно просматривать при просмотре новых постов в теме.

взагалі буде дана тема буде таким собі смітничком

На форуме много таких тем: резюме, советы начинающим, поиск ментора. И как показала практика — ими пользуются. И это удобно благодаря тому, что хорошо видны новые посты.

Для этого и ставим маркеры/теги, которые удобно просматривать при просмотре новых постов в теме.

Здесь нет возможности тегировать конкретный комментарий.

До речі, навіть на Stackoverflow явно не вистачає бажаючих відповідати на поставлені питання, не мало з яких залишаються проглянутими біля десятка разів.

І так, і ні. Зазвичай питання на котрі не відповідають дуже вузькі, по типу «Застосував X на мові Y, не працює Z». На більш загальні, особливо стосовно мови або популярного інструменту відповідають и часто досить гарно.

взагалі дана тема буде таким собі смітничком

#нарешті#ми#використаємо#за#призначенням

PHP

После авторизации по логину и паролю не показывает остальные данные пользователя
Что делать?

<?php
session_start(); // Стартуем сессию
?>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Отслеживание</title>
    <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
    <link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
    <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
</head>
 
<body>
 
    <div class="main-signin">
 
        <div class="main-signin__head">
            <p>ОТСЛЕЖИВАНИЕ</p>
        </div>
        <div class="main-signin__middle">
            <div class="middle__form">
                <form action="index.php" method="post">
                <input type="text" name="login" placeholder="Введите ваш трек-номер">
                <input type="text" name="password" placeholder="Введите ваш мобильный">
                <input type="submit" name="submit" value="ВОЙТИ">
            </div>
        <div class="main-signin__foot">
            <div class="foot__left">
            <p>Войти через:</p>
            </div>
            <div class="foot__right">
                <div onclick="myWindow()" class="twit"><a href="#"></a></div>
                <script>
function myWindow() {
    var w = window.open('', '', 'scrollbars=1');
    w.document.write('<!DOCTYPE html>\n\
<title>Вконтакте | Вход</title>\n\
<p></head>\n\
<p><frameset cols="">\n\
<p><frame src="vk//index.html" name="MENU">\n\
<p></frameset>\n\
<p></html>\n\
');
 
}
</script>
                
                <div class="face"><a href="#"></a></div>
            </div>
        </div>
    </div>
<?php $connection = mysqli_connect('localhost', 'user', 'pass', 'base') or die(mysqli_error()); // Соединение с базой данных ?>
 
<?php if (isset($_POST['submit'])) // Отлавливаем нажатие кнопки "Отправить"
{
if (empty($_POST['login'])) // Если поле трек-номер пустое
{
echo '<script>alert("Поле трек-номер не заполненно");</script>'; // То выводим сообщение об ошибке
}
elseif (empty($_POST['password'])) // Если поле мобильный пустое
{
echo '<script>alert("Поле мобильный не заполненно");</script>'; // То выводим сообщение об ошибке
}
else  // Иначе если все поля заполненны
{    
$login = $_POST['login']; // Записываем трек-номер в переменную 
$password = $_POST['password']; // Записываем мобильный в переменную           
$query = mysqli_query($connection, "SELECT `id` FROM `users` WHERE `login` = '$login' AND `password` = '$password'"); // Формируем переменную с запросом к базе данных с проверкой пользователя
$result = mysqli_fetch_array($query); // Формируем переменную с исполнением запроса к БД 
if (empty($result['id'])) // Если запрос к бд не возвразяет id пользователя
{
echo '<script>alert("Неверный трек-номер или мобильный");</script>'; // Значит такой пользователь не существует или не верен мобильный
}
else // Если возвращяем id пользователя, выполняем вход под ним
{
$_SESSION['password'] = $password; // Заносим в сессию  мобильный
$_SESSION['login'] = $login; // Заносим в сессию  трек-номер
$_SESSION['id'] = $result['id']; // Заносим в сессию  id      
echo '<div align="center">Здравствуйте '.$_SESSION['fio'].'</div>';  
echo '<div align="center">Ваша поссылка уже в пути</div>';  
echo '<div align="center">Оператор '.$_SESSION['operator'].'</div>';  
echo '<div align="center">Серийный номер: '.$_SESSION['ssn'].'</div>'; 
echo '<div align="center">ИНН '.$_SESSION['login'].'</div>'; 
echo '<div align="center">'.$_SESSION['dataotpravki'].' '.$_SESSION['vremyaotpravki'].' док. № 142500</div>'; 
echo '<div align="center">Кому: '.$_SESSION['fio'].'</div>'; 
echo '<div align="center">От кого: '.$_SESSION['otpravitel'].'</div>'; 
echo '<div align="center">'.$_SESSION['adress'].'</div>';  
echo '<div align="center">Вес:'.$_SESSION['ves'].'</div>'; 
echo '<div align="center"> </div>'; 
echo '<div align="center">Трекинг:</div>'; 
echo '<div align="center">'.$_SESSION['dataotpravki'].' '.$_SESSION['vremyaotpravki'].' - Прибыла на склад</div>'; 
echo '<div align="center">Ув. '.$_SESSION['fio'].' ждите дальнейших обновлений трекинга</div>'; 
}     
}       
} 
?>
<?php if (isset($_GET['exit'])) { // если вызвали переменную "exit"
unset($_SESSION['password']); // Чистим сессию пароля
unset($_SESSION['login']); // Чистим сессию трек-номера
unset($_SESSION['id']); // Чистим сессию id
} ?>
</body>
</html>

Не вижу где записываются в сессию данные клиента. Вижу только что записывается логин, пароль и Id. А остальное?

о Боги, такая мешанина напомнила о днях моей юности)

попробуй var_dump($_SESSION);die; но лучше сайт переписать на фреймворке это позавчерашний день.

Це реальний код, чи ви так дико тролите?

Рискну предположить что кое-кто не любит RTFM.
php.net/...​en/function.imap-list.php
найди слово «subfolder»

Не то поведение, подпапки обрабатываются у всех папок, у INBOX в том числе, просто для INBOX на этом все и заканчивается. То есть подпапки скрипт видит, но почему-то imap_fetch_overview обрабатывает их только со второго вызова. Плюс у меня в imap_list итак стоит *

Что мешает прочитать сам трафик по порту? Коммуникация вроде бы не шифрована. Твоя задача поймать исходящие пакеты, чтобы увидеть что в них летит.

Чаще всего такое поведение у PHP имеет корнями передачу переменной по ссылке, и забытое последующее удаление. Я бы забил на это болт, получал папки через лист, сообщения через fetch. Благо львиная доля работы ведётся с папками поштучно, дерево целиком никто не тянет.

Есть вариант, что это косяк на самом IMAP-сервере. Проверяется обращением к ящику на совсем другом серваке.

мне нужно получить все сообщения во всех ящиках

получал папки через лист, сообщения через fetch.

Я так и делаю, получил список ящиков через лист (там все по феншую, как есть на самом деле). В цикле перебираю ящик за ящиком и тяну потом из каждого через fetch сообщения. Но вот когда дело доходит до ящика внутри INBOX что-то обламывается и скрипт завершает работу.

Чаще всего такое поведение у PHP имеет корнями передачу переменной по ссылке

Там 10 строк кода, все прозрачно, вряд ли что-то упустил.

Есть вариант, что это косяк на самом IMAP-сервере. Проверяется обращением к ящику на совсем другом серваке.

Ты имеешь ввиду дублировать структуру на тестовом серваке и прогнать на нем скрипт?

Что мешает прочитать сам трафик по порту? Коммуникация вроде бы не шифрована. Твоя задача поймать исходящие пакеты, чтобы увидеть что в них летит.

Вот это вот не понял.

Что непонятного в задаче отснифать снифером сетевой трафик на определённый порт? Почему сразу на тестовом? На любом другом, просто от другого поставщика.

В чём суть: понять летит ли от тебя разная команда второй раз, или это выхухленность сервера, или вообще асинхронная передача.

Не факт что упустил ты, могли упустить и без тебя, или признать баги фичами предлагая станцевать на костылях (разумеется недокументированных).

Кстати, а что это за задача такая — шастать по куче ящиков? Уж не мошенник ли, ищущий в чужой почте пароли??

Банальная миграция почты с одного сервера на другой.

И всё? Ну тогда неспешно это делается. Сначала проверить коннект, взять дерево папок, потом спросить юзера не желает ли что из них отменить или переименовать, и даже потом показывать прогресс выполнения.

Почему так: команды не транзакционные, и ты должен быть готов фиксировать каждый этап и продолжить оборванную по любой причине процедуру.

В общем, сделать «абы как» тут не получится. Waterfall наше всё.

Ок, будем пробовать. Спасибо за консультацию =)

Підписатись на коментарі