2013-10-11 2 views
0

, возможно, сделало мой код слишком сложным. У меня есть 2 формы радиокнопку, динамически генерируемые внутри функции JavaScript OnClick:Получение входного значения из php сгенерированной формы в функции JavaScript

function displayForm(){ 

document.getElementById("buildlist").innerHTML = '<?php 
    echo '<form id="MB" name="MB" method="GET">'; 
    while ($row = mysql_fetch_assoc($mbquery_run)) 
     { 
     echo '<input type="radio" class="'.$row['socket'].'" name="MB" value="'.$row['model'].'"><a href="'.$row['link'].'" class="radiolinks" target="_blank">'.$row['model'].'</a><br>'; 
     } 
    echo '<input type="radio" class="dunno" name="MB" value="dunno">Don't know'; 
    echo '</form>'; 
     ?><br><br>';} 

Это является частью кода, и у меня есть еще одна функция, как это для другой формы радио. Это прекрасно работает. Далее по линии я должен сохранить вход для последующего использования. Так что я сделал OnClick функции JS с намерением вывода выбора с помощью PHP (Тогда, возможно хранения в базе данных), определяемое как таковые:

function submitInput(){ 
<?php 
     if (isset($_GET['MB']) && isset($_GET['CPU'])) 
    { 
    $MB = $_GET['MB']; 
    $CPU = $_GET['CPU']; 
    print $MB; 
    print $CPU; 
    } 
    else{ 
     $hey = "11111111111111111111111111111111111111111"; 
     echo ''.$hey.''; 
    }?>} 

Это не работает, я не даже получить выход $ hey от проверки else. Я довольно новичок в программировании, и это может быть немного из моей лиги. Я рассматриваю возможность хранения ввода в переменных сеанса. Будет ли это жизнеспособным вариантом с учетом нынешней функциональности? Помощь очень apprecciated!

P.S: Если вам интересно, выходные данные форм и запросы mySQL работают нормально, проблема заключается в получении ввода от PHP во второй функции.

+0

Почему вы пишете php-код для dom на стороне клиента? – gwillie

+0

Является ли это то, что JavaScript создает выражение 'php' echo? Отбросьте это эхо, вам это не нужно. – tymeJV

+0

Это дает сайту очень динамичное ощущение, и я действительно просто хотел поэкспериментировать с большим количеством языков, чтобы быть честным. tymeJV: Я забыл добавить, что существуют теги php, окружающие этот оператор if в функции JS ... –

ответ

0

Хорошо, вот полный рабочий пример, он, конечно, не получит доступ к базе данных mySql, но создаст форму с динамическими данными из массива.

Он также определяет, есть ли параметр url, называемый hide, например index.php? Hide = 1, Этот параметр приведет к скрытию формы и кнопке, которая будет отображаться, эта кнопка будет активирована javascript для отображения формы.

Кроме того, он будет читать значение из формы после его публикации.

Надеюсь, что все получится прямо и никаких сомнений осталось.

<!doctype html> 
<html> 
    <head> 
     <title>Testing!</title> 
    </head> 
    <body> 
     <h2> This is a test </h2> 
     <hr/> 
      <?php 
       //this function creates the form 
       function createForm(){ 
        if(isset($_GET["hide"])){ //checks if a url parameter called hide exists 
         //if the parameter exists, lets hide the form 
         $isHidden = "style='display:none;'"; 
         //and create a button to display the form 
         echo "<input type='button' id='btnShowForm' value='Show Form' />"; 
        }else{ 
         $isHidden = ""; 
        } 
        $data = ["hello", "world"]; //simulated data 
        $i = 0; 
        $dataLength = count($data)-1; 
        //this is the form 
        echo "<form id='frmTest' name='frmTest' method='POST' action='index.php' ".$isHidden.">"; 
        while ($i <= $dataLength){ 
         echo "<p>"; 
          echo "<input type='radio' name='RB' value='".$data[$i]."'/>"; 
          echo "<label>".$data[$i]."</label>"; 
         echo "</p>"; 
         $i++; 
        } 
        echo "<input type='submit' value='Submit Form' />"; 
        echo "</form>"; 
       } 
       //this function reads the data from the form on POST 
       function readFormData(){ 
        if(isset($_POST["RB"])){ //if the page is requested as a POST 
         $radioValue = $_POST["RB"]; //read the RB value inside the POST data 
         if(isset($radioValue)) //if there's data on the variable let's display it 
          echo "selected value: ".$radioValue; 
         else 
          echo ":("; 
        } 
       } 

       if($_SERVER['REQUEST_METHOD']=='POST'){ //check if it's a post 
        readFormData(); //read the data 
       }else{ 
        createForm(); //create the form 
       } 
      ?> 

    </body> 
    <script> 
     var btn; //holder for the button (if exists) 
     window.onload = function(){ //when the page is fully loaded, jquery's $(window).load 
      btn = document.getElementById("btnShowForm"); //store the button, jquery's $("#btnShowForm") 
      if(!btn){ return; } //if no button exists, abort, jquery's if(!btn.size()) 
      if(btn.addEventListener){ //Every browser (except IE < 9) 
       btn.addEventListener("click", showForm, false); //add a click event to the button, function showForm will be fired on click, jquery's btn.click(showForm); 
      }else{ //IE 6,7,8 
       btn.attachEvent("onclick", showForm); 
      } 
     } 

     function showForm(){ //function to display the form 
      var form = document.getElementById("frmTest"); //holder for the form jquery's $("#frmTest") 
      form.style.display=""; //let's show the form jquery's form.show(); 
      btn.style.display = "none"; //let's hide the button jquery's btn.hide(); 
     } 
    </script> 
</html> 

Как вы можете видеть, PHP полностью отделен от JS, что и должно быть сделано.

Серверная сторона не имеет ничего общего с клиентской стороной, но вы можете (и должны) оставить трассировки для JS, чтобы что-то сделать с данными, отправленными сервером.

Давайте подведем итог:

PHP - создает форму и в зависимости от параметра URL скрывает его или нет, если он скрыт, то он будет отображаться кнопка

JS - будет искать кнопку, если он существует, тогда к нему добавляется событие, иначе ничего не делается.

Легко, не так ли ?.

+0

Спасибо, это выглядит многообещающим. Я просто интегрировал ваш метод в другую версию моего проекта. К настоящему времени он работает очень похоже. Единственным недостатком является то, что он немного менее динамичен (больше загрузки страницы). Я буду развивать оба метода отдельно, поскольку я изучаю намного больше PHP с помощью этого метода, поэтому он должен быть интересным. Кроме того, мне любопытно, когда мой PHP в JavaScript-коде начнет ограничивать функциональность. Спасибо за помощь. :) –

+0

Нет проблем. Вы можете вывести javascript из php, но это не рекомендуется, так как вам будет не хватать кеш-памяти браузера и ничего подобного, но это не правило, но хорошая практика держать все ваши html/php в одном файле, все ваши стили (css) в другом файле и все ваши скрипты (javascript) в другом файле, поэтому в конце будет обслуживаться только ваш html/php, что приведет к меньшему количеству запросов и лучшей производительности с вашего сервера и пользователя. –

+0

Спасибо! Я подумываю о том, чтобы сделать это какое-то время, уставая от моей стены текста. Забавно, как я узнал больше от 3 дней Stackoverflow.com, чем у меня есть 3 месяца в университете. Ура! –

0

Я предполагаю, что вы используете действие «post» в своей форме при его отправке? Если это так, вам нужно изменить переменные $ _GET на $ _POST.

$ _GET используется там, где у вас есть переменные, добавленные к URL-адресу, который вы хотите проанализировать. $ _POST принимает входные данные, представленные через форму.

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

Вам нужно отказаться от кода и начать с лучшего понимания того, как работают HTML/PHP/JS.

+0

Насколько я понимаю это. Насколько мне известно, PHP выполняется, как только загружается страница. То, что я использую JS для, alteast, что я думаю, что я использую JS для, скрывает вывод кода PHP до тех пор, пока сценарий JS не будет инициирован на стороне клиента. До сих пор это работало отлично, хотя моя потребность в PHP была ограничена эхо-сигналами простой формы. Неужели я совершенно не прав в этом? Если да, то почему? –

0

РНР на стороне сервера, что означает, что она выполняется на сервере, а это значит, что все внутри PHP тега выполняется на сервере, а затем доставляется клиенту (браузер) на чистом HTML ...

Javascript - это клиентская сторона, что означает, что он имеет дело только с вещами, уже находящимися в браузере, есть технологии для использования javascript на сервере (например, node.js), но это здесь не актуально.

Что вы пытаетесь сделать, это использовать php для записи части функции javascript, которая является неправильной и сумасшедшей.

Вы должны полностью понять эти концепции.

Но в любом случае, вот что я хотел бы сделать в этой ситуации:

PHP код:

<?php 

    function createForm(){ 
     echo: '<form id="MB" name="MB" method="GET" action="yourphpfile.php">'; //it's your choice, but i prefer to use POST methods on forms and add the action property pointing to your php.file 
     while ($row = mysql_fetch_assoc($mbquery_run)){ 
      echo '<input type="radio" class="'.$row['socket'].'" name="RADIO" value="'.$row['model'].'">"'; //keep names and ids unique for easy access. (form and input share the same name) 
      echo "<a href="'.$row['link'].'" class="radiolinks" target="_blank">'".$row['model']."'</a>" 
      echo "<br>'"; 
     } 
     echo '<input type="radio" class="dunno" name="RADIO" value="dunno">Don''t know'; 
     echo '<input type="submit" id="btnSubmit" value="Submit" />' //your form doesn't have a submit button 
     echo '</form>'; 
    } 

    function readFormData(){ 
     var radioValue = $_GET["RADIO"]; 
     //or if it's a POST 
     var radioValue = $_POST["RADIO"]; 
    } 

    //this should be ok 
    if (isset($_GET['RADIO'])){ //only will work if form method is GET 
     readFormData(); //execute the function if a parameter is found 
    } 

    //but this is the way to go (imho) 
    if($_SERVER['REQUEST_METHOD']=='POST'){ //only will work if form method is POST 
     readFormData(); 
    } 

    createForm(); // create the form 
?> 

Javascript Код:

NONE

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

Если вы хотите использовать javascript в этом примере, я не вижу необходимости в нем, если вы не хотите использовать som ajax-вызовы, поэтому с помощью javascript вы получите значения выбранных радиообъектов и затем отправьте эти значения на сервер через ajax, сделайте свою работу и сообщите об этом пользователю с предупреждением или что-то в этом роде ...

Надеюсь, что это поможет спариться. Приветствия.

+0

Спасибо! Я подумываю переключить все на PHP, но прежде чем я это сделаю, я задам несколько вопросов :) –

+0

1: Я знаю, что PHP выполняется serveride. И что он будет выполнен независимо от моих функций JavaScript и операторов if, но то, что делает мой JS, и какова была мысль с самого начала, заключается в том, что он не выдает PHP-код до тех пор, пока JS не будет выполнен на стороне клиента. Почему это так неправильно? У меня 200 строк кодирования, которые отлично работают, но мне говорят, что это невозможно. Каковы недостатки всего этого? –

+0

Существует несколько способов сохранения этого ввода. Если я правильно понял свой код, я всегда смогу получить входные данные из форм с помощью JQuery. По крайней мере, так я и делаю это до сих пор, и это сработало.Я фильтровал выходы во второй форме на основе ввода в первой форме, сохраняя данные mySQL во входных классах (Фильтрация с помощью jquery). Но я также хотел бы попытаться сохранить данные в переменных $ _SESSION. Это было бы невозможно с учетом моего метода кодирования? Спасибо за ваш вклад! Если я решит переключиться на чистый PHP-код, мне это очень понравится. :) –

Смежные вопросы