Как получить данные из модальной формы в mysql

#php #jquery #jquery-ui #forms #modal-dialog

#php #jquery #jquery-пользовательский интерфейс #формы #модальный диалог

Вопрос:

Цель: Разрешить пользователям нажимать кнопку / ссылку, расположенную на странице (назовем ее главной страницей), появляется модальная форма, содержащая форму. Пользователь заполняет форму и нажимает на кнопку отправки, данные записываются в mysql. Модальная форма закрывается, и пользователь остается смотреть на «главную страницу».

У меня это работает на 2/3. Щелчок создает модальную форму, загруженную с формой. Данные, добавленные в форму, записываются в базу данных. Модальная форма закрывается после отправки. Проблема в конце процесса. Когда пользователь отправляет, модальная форма закрывается, и пользователю показывается страница «форма» вместо страницы «хост». Кроме того, похоже, что форма дважды вставляет базу данных формы в базу данных.

Вопрос, возможно ли то, что я хочу сделать, и если да, то как мне изменить процесс?

Код (host.php )

Страница хоста

     <div>
<h2>Test Section</h2>
    <p> This <a id="target" href="http://localhost/dialogExperiments/TESTsingleformfeedback.php" title="Test Form">LINK</a> opens the feedback form.</p>
    </div>
  

Страница формы (form.php )

 <body>
<!-- Begin forms section --><div>
<h1> Form</h1>
<!-- First section is php script to process this particular form-->
<?php

$browser = get_browser(null, true);//get array of viewing browser information. Used in POST below.

//Address error handling
ini_set ('display_errors', 1);
error_reporting (E_ALL amp; ~ E_NOTICE);

if (isset ($_POST['submit'])) {//Handle the form
    if ($dbc = @mysql_connect ('localhost','root','root')) {

        if (!@mysql_select_db ('feedback1')) {
        die ('<p>Could not select the database because <b>' . mysql_error() . '</b></p>');
    }
}else{
    die('<p>Could not connect to MySQL because <b>' . mysql_error() . '</b></p>');
}
//Define the query. Note in this query we use the table "errors"
$query0 = "INSERT INTO errors (ID, words_omitted, jumbled_text, other, description, url, date_recorded, user, browser, operating_system) 
VALUES (0, '{$_POST['words_omitted']}', '{$_POST['jumbled_text']}', '{$_POST['other']}', '{$_POST['description']}','{$_POST['url']}',NOW(),'{$_POST['user']}','{$_POST['browser']}','{$_POST['operating_system']}')";
//Execute the query
if (@mysql_query ($query0)) {
    print '<p>The First form feedback has been recorded.</p>';
}else{
    print "<p>Could not add entry because <b>" . mysql_error() . "</b> The query was $query0.</p>";
}
    mysql_close();
}

?>
<!-- End process script and next display form-->  
<!-- Begin Form 1 Errors--><div id="hideCategory1" class="formFrame">  

<h2>Errors in the text</h2>
        <p>Please check all that apply and add any description you can.</p>
            <form action="TESTsingleformfeedback.php" method="post" name="errorInText">
              <p><input name="words_omitted" type="checkbox" value="Words Missing"  />Words Missing</p>
              <p><input name="jumbled_text" type="checkbox"  value="Jumbled Words" />Jumbled Text</p>
              <p><input name="other" type="checkbox"   value="Other" />Other - Please add details in the "Description" Box.</p>
              <em>Description</em>
              <p>Please add as much descripton as you can about the problem you noticed</p>
              <textarea name="description" cols="40" rows="5"></textarea>
              <p>Page Address:<input name="url" type="text" value="" id="targetURL" /></p>
              <p>Date Recorded</p>
              <p>User<input name="user" type="text" size="40" maxlength="100"  />   </p>
              <p>Browser<input name="browser" type="hidden"  value="<?php echo $browser['browser'] ?>"  /></p>
              <p>Operating System<input name="operating_system" type="hidden" value="<?php echo $browser['platform'] ?>"/></p>
              <input type="submit" name="submit" value="Add To Records" />

            </form>
</div>
</div>

</body>
  

Скрипт Javascript / jQuery является

 $(document).ready(function() {
    $('#target').each(function() {
        var $link = $(this);
        var $dialog = $('<div></div>')
            .load($link.attr('href'))

            .dialog({
                autoOpen: false,
                title: $link.attr('title'),
                width: 600,
                height: 500
            });

        $link.click(function() {
            $dialog.dialog('open');



            return false;
        });
    });
});
  

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

Спасибо.

Комментарии:

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

2. @arma: Спасибо за ваш отзыв. Да, я пришел к выводу / узнал, что мой подход был неправильным и что форма должна обрабатываться jquery.

Ответ №1:

У вас там есть ряд ошибок, включая ваш поток

  1. $('#target').each(function() { не должно быть функции each, потому что идентификаторы всегда должны быть уникальными и, следовательно, не должно быть более одного id =»target».
  2. причина, по которой вы получаете это дважды, заключается в том, что ваш MySQL не проверен должным образом, вам нужно if(isset($_POST)){ /* mysql thingy goes here */ } вот почему вы публикуете его дважды
  3. Пожалуйста, пожалуйста, пожалуйста, используйте mysql_real_escape_string($_POST[‘что угодно’]);

  4. Что ж, удачи, и вам следует еще многое пересмотреть 🙂

ОБНОВЛЕНО

 if (isset ($_POST['submit']) amp;amp; $_POST['submit']=='Add To Records') {
    // check if the form was submitted
    //do db thing here
   $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
   if (!$link) {
      die('Not connected : ' . mysql_error());
   }

   // make foo the current db
   $db_selected = mysql_select_db('foo', $link);
   if (!$db_selected) {
      die ('Can't use foo : ' . mysql_error());
    }
    //insert into db here using mysql_query();
    //if there was no mysql_error(); then show the successfully message else error message
    // please also check mysql_real_escape_string() on php.net its important so people don't hack ur 
    //db, n potentially the whole website itset.
    //http://www.php.net/manual/en/function.mysql-real-escape-string.php
}else{
 ?>
    <form>.....</form>
  <?php
}
  

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

Комментарии:

1. Спасибо за ваш ответ и обратную связь.

2. Спасибо за ваш ответ и обратную связь. Что касается # 1, я взял за основу скрипт с сайта, на который есть ссылка на странице диалога пользовательского интерфейса jQuery. У меня была та же мысль, что и у вас, но я решил, что автор должен знать, что он делает, поскольку на автора ссылается документация. Смотрите blog.nemikor.com/2009/04/18/loading-a-page-into-a-dialog . Что касается отмеченного # 2. Что касается отмеченного # 3. Что касается # 4, мне это нужно. Однако, я подозреваю, что из-за моих плохих навыков проблема с представлением страницы не устранена вышеуказанным и что процесс все еще нуждается в модификации — есть мысли по этому вопросу?

3. urlglobal где присваивается ему значение? например var urlglobal = 'blabla';

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

Ответ №2:

Помните, что вы можете использовать $ («#my_form_id»).serialize(), чтобы получить данные вашей формы для вызова $.ajax.

Проверьте http://api.jquery.com/serialize /

Комментарии:

1. Спасибо, я ценю ссылку, это полезно.