За последние 24 часа нас посетили 17510 программистов и 1721 робот. Сейчас ищут 1859 программистов ...

Помощь с циклом WHILE

Тема в разделе "PHP для новичков", создана пользователем DamaGe, 12 май 2015.

  1. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Здравствуйте, возникло затруднение с осуществлением цикла While.
    Делаю скрипт который должен по нажатию кнопки запустить цикл WHILE, а по нажатию другой кнопки, прекратить, в любой момент!
    Вот мои кнопки:
    Код (Text):
    1. <input class="start123" type="submit" value="НАЧАТЬ!!">
    2. <input class="stop123" type="submit" value="ОСТАНОВИТЬ!!">
    Вот скрипт нажатия:
    Код (Text):
    1. if(!isset($_POST['start123']))
    2. {
    3. startcikl();   
    4. }
    Вот сам цикл:
    Код (Text):
    1. function startcikl()
    2. {
    3. while(true) {
    4.     if(!isset($_POST['stop123'])) //из-за него не запускается ЦИКЛ!!!!!!!
    5.     {
    6.     break; //если нажали кнопку остановки, стоп скрипта
    7.     }
    8. //тут функция которая будет выполнятся.
    9. }
    10. }
    Я гуглил: "Как сделать действие по нажатию кнопки... php..."
    Много расхождений, толи: "isset" функция, толи функция обратная "!isset", то вообще бредятина, вы уже мне помогите, и не забудьте про сами кнопки, там указан class, а не name! А сама проблема в том, что ставлю условие внутри цикла While и цикл не запускается. Пробовал делать отдельно скрипты нажатия кнопок, мол нажимается кнопка, дается значение переменной TRUE или FALSE, Global.... Но без успешно. Жду помощи!
    Скрипт запускаю с компьютера. DENWER. PHP последний) ну так на всякий...
    Заранее благодарю)
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    PHP выполняется на стороне сервера, браузер находится у клиента. К тому времени как вы тыкнули на кнопку скрипт уже давно помер.
     
  3. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    1. php в денвере ни разу не последний. Ну так, на всякий.
    2. скрипт должен работать в фоновом режиме чтоли? Я вот, например, не понимаю, как вы так хотите сделать. Вообще, саму суть. Насколько я знаю, при каждом обращении к скрипту создаётся новая копия его исполнения. А это значит, что первый раз запустив его, остановить его посылом дополнительных параметров вы уже не сможете, ибо они будут выполнены в новой копии.
    Напишите хоть, какую цель вы преследуете.
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Во первых, по какой литературе идет изучение?
    Во вторых, что бы на сервер приходили данные отправленные из формы, т.е. что бы к ним можно было обратится через $_POST тегам должны быть заданы атрибуты name, т.е. в твоем говнокоде вот вообще ни когда не будет isset($_POST['stop123']) вот эта штука срабатывать, потому что ни когда не будет $_POST['stop123'], а что бы она появилась надо написать так:
    <input class="stop123" name="stop123" type="submit" value="ОСТАНОВИТЬ!!">

    ну и + то, что тебе писали выше.
     
  5. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    я так и думал что найдутся "умники" и "умницы", которые начнут "разглагольствовать", ребята вам завтра не в школу случаем? А теперь по теме, это часть скрипта, я новичок и спорить с вами не буду, я попросил помощи, но видимо не ее не получу, хуеплетов сброд вообще понимаете смысл и значение слова ФОРУМ?
     
  6. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Ты делаешь какую то хрень, не понятную, не логичную не выполнимую и бессмысленную, какую помощь ты хочешь получить?

    Если бы изучал по нормальной литературе, ты бы не делал такое, по этому самый дельный совет, смени литературу.
     
  7. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Я не читаю литературу, в плане изучения PHP, самоучка, объясняю:
    Скрипт PHP.
    Задача: Отправка автосообщений на игровой сервер (сама функция рабочая).
    -Сделать кнопки отключения и включения отправки сообщений (сообщения отправляются с помощью цикла While). Буду делать только через While.
    Проблематика:
    -Скрипт работает, цикл работает, но при попытке сделать кнопку отключения, а именно, постановку какого то условия внутрь самого цикла While, цикл не запускается. И по поводу:
    "в твоем говнокоде вот вообще ни когда не будет isset($_POST['stop123']) вот эта штука срабатывать, потому что ни когда не будет $_POST['stop123'], а что бы она появилась надо написать так:
    <input class="stop123" name="stop123" type="submit" value="ОСТАНОВИТЬ!!">"
    Я же написал что читал в интернете, ТАК И НЕ ПОНЯЛ КАК И ЧТО. Так как много разных способов, кто то пишет одно, кто то другое, по крайней мере через !isset у меня работает кнопка включения, кнопка указана выше!
    Так же я уточнил:
    "не забудьте про сами кнопки, там указан class, а не name!"
    Я изучал на протяжении 3-4 лет, какой-то "мутант" семейства BASIC (autoit) и C++ на игровом модуле Call of Duty, так сказать знаю принципы и какие-то базы имеются, php изучая около недели, так получилось. Именно по этому я уточнил каждую деталь в своем первом посте, на форумах не первый раз, видал и не такие ответы. (обратные назначению данного форума/сайта).
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    самоучка это как? для меня самоучка это тот, кто изучает сам по какой-либо литературе, а не самоучка этот кто обучается где то в институте / на курсах и т.д.
    Очень интересно как это можно изучать язык не по литературе? ну действительно интересно, это не сарказм, может есть познания в других ЯП?

    PS то, что ты делаешь реализовать на РНР не возможно.

    Добавлено спустя 6 минут 26 секунд:
    РНР это язык серверный, его задача сформировать страницу (HTML код) и отдать тебе его в виде файла, в момент его формирования остановить этот процесс описанным тобой способом не возможно. Представь автомат с кофе, ты бросил монету выбрал какой, все, процесс начался, началось его приготовление, ты уже ни чего поменять не можешь и получишь то, что заказал, в отличии допустим от того где тебе кофе готовит не автомат, а человек, примерно так же работает РНР.

    PS правда есть такой вариант, это сделать сторонний сайт, назовем его second, при каждом прохождении цикла твой цикл будет обращаться к second, а тот в свою очередь будет как раз предоставлять true OR false, продолжать работу или нет.
    но это должно неплохо затормозить твою рассылку, но можно не каждый раз обращаться к second, а допустим раз 10 или 100.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Опыт в других языках + доки по новому. Но при условии минимальной похожести.

    Добавлено спустя 2 минуты 3 секунды:
    Автору к ознакомлению: http://phpfaq.ru/na_tanke
    Собсно, сам с этого начинал после опыта десктопного программирования.
     
  10. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Я так понимаю, цикл While если начать не чем не остановить?? (Каким то действие)
    Просто можно сделать (как я считаю) некий счетчик:
    While(i<5)
    i+=1;
    Тогда цикл остановиться?? Когда i станет равным =5.
    VLK, ты что то писал про "...сайт second...", можно поподробнее?
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    break;
    Что-то сомнения гложат о том, что эти 3-4 года оставили какую-то базу.
     
  12. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Я понял что остановить можно, вы вообще читали мой пост сверху?
    ПРОБЛЕМА:
    ЕСЛИ СТАВЛЮ УСЛОВИЕ ПРИ КОТОРОМ ЦИКЛ WHILE ДОЛЖЕН ПРЕКРАТИТЬСЯ (BREAK), ВНУТРЬ САМОГО ЦИКЛА, ЦИКЛ НЕ ЗАПУСКАЕТСЯ!!!!!
    Условие:
    !isset. Нажатие кнопки.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Читал, там какой-то треш, показывающий, что ты не в курсе, чем клиент-серверное программирование отличается от десктопного. Для того я тебе и дал ссылку.

    Код (PHP):
    1. $text = '';
    2. while (true){ // по определению бесконечный цикл
    3.   if ($text === 'lalalala'){
    4.     break;
    5.   }
    6.   $text.='la';
    7. }
    8.  
    9. echo $text; //Если цикл не запустится, тут будет пусто, если не сможет остановиться, эта строка не выполнится, если стопорнется, тут будет 'lalalala'
    10.  
    Запусти, посмотри, что будет. Не в бряке внутри цикла дело. Искать надо там, где потерял, а не там, где светлее.
     
  14. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Я не такой тупой в php. Я выводил переменные с помощью echo, не выводило ничего, даже те переменные которые создавал сам цикл, а не которые стоят в условии:
    while(true)
    {
    if($responsestart123=="NO")
    { break; }
    $say="dsda";
    echo $say;
    }
    ====================
    Использовал ваш скрипт. p.s: добавил в конце цикла while, sleep(1); ибо цикл не начинался, а точнее "пролетал" и выводил lalalala.
    Скрипт остановился, после того как "стакнул" сообщение lalala, и вывел мне его на экран. Значит ошибка в условии (нажатие кнопки). !isset || isset Как правильно то??
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    [​IMG]
    Зачем? Боишься, что иначе текст в экран по проводу заползти не успеет, или что?

    Добавлено спустя 2 минуты 44 секунды:
    Потому что у тебя $responsestart123="NO" до выполнения скрипта еще, твой К.О.
    Я тебе ссылку дал. Читай до посинения. Нет в клиент-серверном программировании такой же интерактивности, как в десктопном.
    Не передает браузер в рилтайме все нажатия кнопочек прям в твой цикл, чтобы он преравться мог.
     
  16. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Весь шлак я пропустил и прочитал нижние строчки, "...$resonsestart123="no"..." написано для примера. Напиши просто как "отследить" нажатие кнопки, не надо пытаться меня учить!
     
  17. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а в чем задача? ну не конкретно описание псевдокодом как это должно работать, а в общем, у тебя какая то конкретная задача? или ты просто учишься, вот придумал себе задание?
    Может можно решить данную проблему другими языками, тем более если ты знаком с С++.

    Просто то что ты хочешь, это примерно тоже самое что ты выстрелишь из пистолета и тут же будешь как то пытаться остановить эту пулю.

    Добавлено спустя 1 минуту 29 секунд:
    и хватит писать про этот isset, isset тут вот вообще не причем.
     
  18. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Я понял что нельзя "закинуть" в цикл инфу мол я тыкнул по кнопке...
    Просто на будущее, переменную или условие, по которой моно отследить нажатие кнопки.
    p.s: Fell-x27, кнопка не на клавиатуре, а кнопка в "окошечке"... ну так, мало ли...
    Это я решил сделать сам, для игрового сервера.
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    А, ок. Просто смутило, что ты запостился в разделе
    >>PHP для новичков
    Это раздел для тех, кто пытается понять, что делает и хочет учиться.
    Раздел для копипастеров-недоучек с заоблачным ЧСВ называется "Сделайте за меня". Перенести тему?
     
  20. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    [​IMG]
    Пойду на другой форум, кроме "полезных" советов в изучении PHP я не услышал. 0 помощи.
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ды нет разницы.
    Нажатие кнопки должно инициировать запрос. Запрос придет на скрипт. Скрипт отработает и даст ответ. Строй архитектуру именно исходя из такой парадигмы. Никакого прямого взаимодействия и интерактива. Только запрос-ответ.

    Есть конечно всякие веб-сокеты, можешь попробовать их погуглить и осилить. Но смысл, по факту тот же - запрос/ответ, разве что без прерывания работы скрипта на стороне сервера.

    Добавлено спустя 1 минуту 4 секунды:
    Ты определись уже, нужно тебя учить, или не нужно. А то сначала "подскажите", потом "не нужно меня учить", потом "полезных советов в изучении нет".
    И да, тебе никто ничего не должен. Се ля ви.
     
  22. DamaGe

    DamaGe Новичок

    С нами с:
    12 май 2015
    Сообщения:
    34
    Симпатии:
    0
    Я ПОННЯЯЛЛЛ ТЕБЯЯ!!! АЛЛЛООООО!!!!
    Просто скажи мне как сделать функцию реагирующую на нажатие кнопки, НЕ В ЦИКЛ, НЕ КУДА, ПРОСТО СКАЖИ МНЕ!!! ДЛЯ ОБЩЕГО РАЗВИТИЯ!!!!!
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    А формы не умеешь отсылать/принимать? Ок лови http://htmlbook.ru/samhtml5/formy/otpravka-dannykh-formy
    И не капси, вопли твои никому не нужны. Равно как и истерики.
     
  24. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    нет, я не издеваюсь, просто вопрос, нажатие кнопки где? на странице браузера?
    просто там разные подходы бывают.
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Хочешь, чтобы без перезагрузки странички работало, кури AJAX до кучи. Привязывай к форме с сабмитом, либо напрямую к кнопке на событие onclick и отправляй по клику запрос на сервер таким образом.