Check Levi9 best QA positions to Backbase team!
×Закрыть

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

Я думаю у каждого разработчика в работе бывают сложные моменты, когда застрял с какой-нибудь ошибкой или задачей и хочется попросить помощь или просто свежего взгляда у другого специалиста или сообщества в целом. На форуме часто создают топики с вопросами по программированию. Но это не удобно. Предлогаю создать один топик, где будем обсуждать подобные вопросы. Я это вижу так: человек кидает ссылку на вопрос на 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
Но это не удобно.

Это нормально. Уже есть SO с желаемой тобой функциональностью.
И никто не мешает тебе четко сформулировать вопрос и получить на него ответ и здесь. Но кроме тебе и еще пары человек это больше никому не интересно. Получил ответ, а дальше тема может тонуть, как мусор.

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

Прям какой-то RSDN получится.

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

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

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

ЗЫ: кстати из свеженького на тему:
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; но лучше сайт переписать на фреймворке это позавчерашний день.

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

echo ’alert("Поле трек-номер не заполненно");’; // То выводим сообщение об ошибке

Сделайте по человечески, php код в .php файл, верстку в .html, скрипты в .js. Тогда и дебажить сможете. Пихать фронт-энд логику в .php файл — это рак мозга.

Рискну предположить что кое-кто не любит 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 наше всё.

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

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