Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > отправка переменной в php


Автор: namra 14.6.2013, 07:21
 Здравствуйте, нашел в примерах такой скрипт, на странице radiobutton'ы , при нажатии я получаю  переменную value radiobutton'а, как мне эту переменную передать в php?
Код


<script>
$( "input" ).on( "click", function() {
    var $rbtn=$("input:checked").val();
});
</script>

Автор: Arantir 14.6.2013, 07:43
Сделать запрос. Любым удобным способом.
Можно даже так:
Код

document.body.innerHTML += '<img src="/script.php?var=blablabla">';
для одной переменной не суть...

А вообще: http://api.jquery.com/jQuery.ajax/

Автор: namra 14.6.2013, 13:32
Arantir, если честно не понял пример ваш,  я нашел по вашей ссылке код так понимаю данные хранятся в name и location, а как выводят их в php пробывал так ничего не
Код

$.ajax({
  type: "POST",
  url: "script.php",
  data: { name: "John" }
})


Код

echo $_POST['name'];
 smile 

Автор: namra 14.6.2013, 16:35
Весь код находится в одном файле, c помощью jquery обрабатываю radiobutton мне нужно именно без кнопки обработать, я получил переменную $rbtn как мне ее значение передать php-скрипту
Код

 <?  
//вывод кол-ва кнопок    
  echo '<form method="post">';
     $num=1;
    
     while($voprid=mysql_fetch_array($data_result)) 
     {          
       echo '<button type="submit" name="btn" class="vop" value="'.$voprid['id'].'">'.$num++.'</button>';
     }


    // если нажата кнопка
    if (isset($_POST['btn'])) 
    {
    

       
       $vop_result = mysql_query("select * from test_qbank where id='".$_POST['btn']."'") or die(mysql_error());
       $vopdata = mysql_fetch_array($vop_result);
       //$_SESSION['predvopr']=$_POST['btn']; // сохраняем предыдущий id вопроса

       echo '<br/>';
       echo $vopdata['vopr'];
   

       echo '<p class="variant">A) <input type="Radio" name="rbutton" value="A"></p> 
             <p class="variant">   B) <input type="Radio" name="rbutton" value="B"> </p> 
             <p class="variant">  C) <input type="Radio" name="rbutton" value="C"> </p>  
             <p class="variant">D) <input type="Radio" name="rbutton" value="D"></p>   
             <p class="variant">E) <input type="Radio" name="rbutton" value="E"></p>';
   echo '</form>';
 // теперь кнопки и радио в одной форме!
    }
   
 
     
?>
<script>
$( "input" ).on( "click", function() {
    var $rbtn=$("input:checked").val();

});

</script>



</body>
</html>



Автор: namra 14.6.2013, 18:59
дайте хоть примерчик очень нужно!

Автор: Arantir 14.6.2013, 19:21
Можно вопрос? Вы это все делаете на один раз (по обстоятельствам жизненным) или собираетесь и дальше заниматься веб-разработкой?


Цитата(namra @  14.6.2013,  12:32 Найти цитируемый пост)
если честно не понял пример ваш

Все очень просто. Браузер умеет делать 2 вида запросов: GET и POST. 
GET - это, по сути, обычный переход по ссылке. В нем данные передаются после адреса после вопросительного знака в виде ?var1=value1&var2=value2  и т.д.
POST - отправка формы. В нем данные передаются в заголовках.

При открытии картинки браузер делает запрос на src картинки. Если указать в ссылке данные, то они так и передадутся серверу, как и в любом GET-запросе. Серверу не обязательно выдавать картинку, браузер просто ничего не сделает. Зато таким образом можно легко и быстро сделать запрос на сервер и передать туда нужные данные.


Цитата(namra @  14.6.2013,  12:32 Найти цитируемый пост)
я нашел по вашей ссылке код так понимаю данные хранятся в name и location, а как выводят их в php пробывал так ничего не

Это обычный POST запрос. В data указываются имена и значения полей, как если бы вы отправили обычную форму.
Сделав такой запрос:
Код
$.ajax({
  type: "POST",
  url: "script.php",
  data: { btn: 0, rbutton: 1 }
})
Вы на сервере получите следующее:
Код
$_POST['btn']; // 0
$_POST['rbutton']; // 1



Цитата(namra @  14.6.2013,  15:35 Найти цитируемый пост)
Весь код находится в одном файле
Надеюсь Вы понимаете, что весь этот код отрабатывает заново при каждом-каждом на него запросе (каждой отправке на него формы, каждом ajax-запросе и т.п.).


Цитата(namra @  14.6.2013,  17:59 Найти цитируемый пост)
дайте хоть примерчик очень нужно! 

Как-то так:
Код

$('[name="rbutton"]').on('click', function() {
    $.ajax({
        type: 'POST',
        url: 'script.php',
        data: { rbtn: $(this).val() }
    });
});

Автор: ksnk 15.6.2013, 08:04
namra, Про что вообще эти вопросы?
http://forum.vingrad.ru/forum/topic-369357.html
http://forum.vingrad.ru/forum/topic-369425.html
http://forum.vingrad.ru/forum/topic-369461.html
?
Про одну и ту же задачу? Простой опросник с готовыми ответами? Не нужно припутывать сюда Javascript. Нужно решать задачу чистым html+php.

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

Каждый котрол, который определяет ответ на вопрос, должен иметь такое имя answer[ID_вопроса][ID_ответа].
Тогда в обработчике формы просто foreach пробегаем по массиву $_POST['answer'] и получаем все ответы.
Код

  foreach($_POST['answer'] as $question_id =>$answers)
      foreach($answers as $answer_id=>$answer){
    // на вопрос $question_id получен ответ $answer_id с содержанием $answer
     }

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

Автор: Arantir 15.6.2013, 11:42
ksnk, зато человек узнает много нового и интересного  smile 
Ну я уже спросил о том, на один раз ли это. Я просто люблю тех, кто желает учится. А иначе зря писать лишние посты мне не охота - буду толкать сразу примеры.

В текущем состоянии, думаю, и на вариант с массивами ТС что-то в контраргумент придумает =)
Это Вам все так очевидно, а кому-то просто недостает опыта.

Автор: namra 16.6.2013, 12:19
нет делаю не на один раз просто хочу понять технологию передачи из ajax в php,  так как стандартные примеры у меня не получаются вот и обратился за советом на форум, если просто ввиде текста вывести нет проблем, а именно передать переменную из js в php  ни как. ВОт все сделал по примерам но ни как неполучаются
Данный код находится в script.php
Код

<form>
  <div>
    <input type="radio" name="rbutton" value="A">
    <label>A</label>
  </div>
  <div>
    <input type="radio" name="rbutton" value="B">
    <label>B</label>
  </div>
  <div>
    <input type="radio" name="rbutton" value="C">
    <label>C</label>
  </div>
</form>
 
<script>
$('[name="rbutton"]').on('click', function() {
    $.ajax({
        type: 'POST',
        url: 'script.php',
        data: { rbtn: $(this).val() }
    });
});
</script>

<?
if (isset($_POST['rbutton']))
  {
    echo $_POST['rbutton'];
  }
else
 {
   echo 'Error';
  }
?>



Автор: ksnk 16.6.2013, 15:17
Все, в общем- то правильно, за исключеньем пустяка. Передается на сервер параметр rbtn, а проверяется rbutton.

Код

<?
if($_SERVER['REQUEST_METHOD']=='POST')
   print_r($_POST);
?>

Автор: namra 16.6.2013, 20:53
ksnk, мне так не подходит так как я получать буду значение radiobutton'а  после нажатия кнопки иначе говоря после перезагрузки страницы, а мне надо получить значение до нажатия следующей кнопки

Автор: Arantir 16.6.2013, 21:51
Цитата(namra @  16.6.2013,  11:19 Найти цитируемый пост)
нет делаю не на один раз просто хочу понять технологию передачи из ajax в php,  так как стандартные примеры у меня не получаются
Цитата(namra @  16.6.2013,  19:53 Найти цитируемый пост)
мне так не подходит так как я получать буду значение radiobutton'а  после нажатия кнопки иначе говоря после перезагрузки страницы, а мне надо получить значение до нажатия следующей кнопки 


Я все никак не могу понять, чего именно не можете понять Вы. Почему Вы не можете понять простые примеры и осознать банальные ошибки.
Вы не понимаете чего-то очень просто, но очень важного. И это мешает Вам уже на протяжении трех тем.

Поклацайте этот пример и скажите, чем он Вам не угодил:
Код
<form>
  <div>
    <input type="radio" name="rbutton" value="A">
    <label>A</label>
  </div>
  <div>
    <input type="radio" name="rbutton" value="B">
    <label>B</label>
  </div>
  <div>
    <input type="radio" name="rbutton" value="C">
    <label>C</label>
  </div>
</form>

<script>
$('[name="rbutton"]').on('click', function() {
    $.ajax({
        type: 'POST',
        url: '/',
        data: { rbtn: $(this).val() },
        success: function (data) { alert(data); }
    });
});
</script>

<?php
if ($_SERVER['REQUEST_METHOD']=='POST')
    if (isset($_POST['rbtn'])) {
        echo $_POST['rbtn'];
    }
?>

Автор: namra 16.6.2013, 22:13
Arantir, ну вообще-то тем что после выбора ответа т.е. нажатия radiobutton вывалиется в сообщении весь код странички браузера

Автор: Arantir 16.6.2013, 22:33
Вы хотите понять, но не пытаетесь сделать этого =)

Давайте сначала.
Вам надо передать некое значение от пользователя на сервер. Вы инициируете AJAX-запрос. В него Вы засовываете данные в виде объекта с полями и значениями, например с полем "my_button" и значением "1". Указываете, что метод запроса POST.
Запрос отправляется на сервер. Сервер принимает полученные данные и помещает их в массив $_POST. Соответственно, в скрипте, на который отправлен AJAX-запрос, Ваше некое значение, которое Вы хотели передать, будет находится в массиве $_POST по индексу с именем поля, указанного при AJAX-запросе, например, $_POST["my_button"]. И в этой переменной будет содержаться переданное Вами значение, например, "1".

Что из всего этого не удовлетворяет Вашему вопросу о передаче данных в php через ajax?

Автор: namra 16.6.2013, 22:58
я понял что " Ваше некое значение, которое Вы хотели передать, будет находится в массиве $_POST по индексу с именем поля", просто я получу это значения только после как нажму на следующую кнопку или позже а мне надо до повторного нажатия или нажатия следующей кнопки я уже не знаю как объяснить это является ключевой проблемой, что не могу получить значение до нажатия следующей кнопки

Автор: Arantir 16.6.2013, 23:07
Вы понимаете, что PHP скрипт отрабатывает полность завново при каждом запросе?

Вы получите значение из AJAX в то же время, в которое сделаете запрос. В это же время выполнится Ваш скрипт. Совершенно независимо то того, когда Вы нажали кнопку и нажали ли ее вообще.

Автор: ksnk 17.6.2013, 06:47
 Вероятно, это тот случай, когда http://phpfaq.ru/na_tanke будет полезен. Важны все пункты, а второй, возможно, ответит на вопрос этого топика.

Автор: krundetz 17.6.2013, 11:38
Кажется я вас понял. Вам нужно получать значение радиобатона сразу как только он установлен, и запретить повторную отправку данных, пока не получен ответ? Если так то вешайте на него соответствующий js обработчик, который первым делом сделает невозможным отправку запроса повторно и только вторым отправит данные. 
Код

function send() {
    $('[name="rbutton"]').attr('disabled','disabled').off('click', send);
    $.ajax({
        type: 'POST',
        url: '/',
        data: { rbtn: $(this).val() },
        success: function (data) { alert(data); }
    }
$('[name="rbutton"]').on('click', send);
});


либо делайте запрос синхронным, а не асинхронным

Автор: Arantir 17.6.2013, 13:01
Цитата(krundetz @  17.6.2013,  10:38 Найти цитируемый пост)
Кажется я вас понял.

Ну у меня вообще такое впечатление, что ТС думал, что PHP скрипт остановится после echo и будет послушно ждать отправки на него формы, чтобы продолжить дальше уже с данными формы.
По крайней мере, именно так мне и подумалось, если попробовать интерполировать мировоззрение ТС из его постов.  smile 

В любом случае ТС надо сначала упорядочить свои познания, расставить их по полочкам и заполнить пробелы (или может даже пропасти). Иначе ничего хорошего из всего этого не выйдет.

Автор: namra 17.6.2013, 18:19
krundetz, Спасибо за ответ не знаю может я выражался как-то не так по моему мнению думал что понятно, но на то вы и гуру что к вам обращаются, и вы можете интерпритировать исходя из своих больших познаний что хочет человек когда обращается и подсказать возможно что лучше сделать так , как сказать лучше переделать весь код из начально правильно, чем выворачиваться и пытаться сделать через грабли. Еще раз спасибо 
krundetz, 

Автор: baldina 17.6.2013, 19:44
namra, прочитал последний пост... вам нужно учиться яснее выражать мысли, т.к. ваш поток сознания очень трудно
Цитата(namra @  17.6.2013,  18:19 Найти цитируемый пост)
интерпритировать 


Автор: Arantir 17.6.2013, 19:55
namra, понимание Ваших постов окончательно вышло за грани моего мировоззрения  smile 

В частности абсолютно непонятно, чем ответ krundetz отличается от прошлых примеров в плане:
Цитата(namra @  16.6.2013,  21:58 Найти цитируемый пост)
просто я получу это значения только после как нажму на следующую кнопку или позже а мне надо до повторного нажатия или нажатия следующей кнопки я уже не знаю как объяснить это является ключевой проблемой
Все предложенные примеры с ajax-ом отправляли переменную моментально после выбора radiobutton.
Пример krundetz всего-лишь не позволяет нажать radiobutton 2 раза подряд, но совершенно никак не изменяет способ отправки данных на сервер. Они отправятся по тому же клику, до нажатия какой-либо кнопки
Предложение, вне влияющее на оправку ajax-ом, стало решением отправки ajax-ом. Тут только экстрасенсом надо быть, ей богу.

То ли я так глуп, то ли krundetz гений, или сразу всего понемногу...

Лучше не отвечайте на этот пост =) Ответ найден — и хорошо. Могу лишь пожелать, чтобы со временем Вы сами стали понимать свои собственные действия лучше, чем кто-либо другой и могли самостоятельно принимать самое верное решение, ведь только Вы сами лучше всего можете осознать, что именно Вам нужно.
 smile 

Автор: krundetz 18.6.2013, 11:44
Цитата(Arantir @  17.6.2013,  13:01 Найти цитируемый пост)
В любом случае ТС надо сначала упорядочить свои познания, расставить их по полочкам и заполнить пробелы

ну это никогда не помешает, лично я стараюсь структурировать свои знания ежемесячно
Цитата(namra @  17.6.2013,  18:19 Найти цитируемый пост)
krundetz, Спасибо

пожалуйста
Цитата(namra @  17.6.2013,  18:19 Найти цитируемый пост)
может я выражался как-то не так по моему мнению думал что понятно

это придет с опытом, просто в любом разговоре старайтесь устранить разность терминологии, в данном конкретном случае дело конкретно в этом, вы переключатели(rudibutton) называли кнопками, из-за чего и произошла непонимание.
Цитата(Arantir @  17.6.2013,  19:55 Найти цитируемый пост)
То ли я так глуп, то ли krundetz гений, или сразу всего понемногу...

опыт, общение с клиентами, общение с  подчиненными.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)