Разлагаемые формы jquery ajax с PHP - повторение кода

Предполагая, что у меня есть форма, которую я хочу отправить. Я построил это и форму action="", Таким образом, я могу получить доступ к опубликованным данным через if(isset($_POST['something']))

ПРИМЕР form.php (КОД НЕ ПРОВЕРЕН И ТОЛЬКО ДЛЯ ТОГО, ЧТОБЫ ПОКАЗАТЬ ТОЧКУ):

<?php
    $result = '';

    if (isset($_POST['something']) {
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
    $stmt = $db->prepare($sql); 
    $stmt->execute(array(':name' => $_POST['something']);   
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
    }
?>

<form action="" method="post">
    <input type="text" name="something" />
    <input type="submit" value="post" />
</form>

<div id="result">
    <pre>
    <?php echo $result; ?>
    </pre>
</div>

Теперь я хочу обработать форму с помощью jquery/js, если у пользователя включена функция js.

Я знаю, как это сделать. Однако у меня есть проблема с доступом к базе данных, например, с тем же запросом в 2 файлах php. Один на моей оригинальной странице формы, который используется, когда js он выключен и возвращает ассоциативный массив данных. Затем у меня есть ajaxData.php, который возвращает json, но в основном тот же SQL-запрос.

ПРИМЕР AJAXDATA.php

<?php
    $result = '';

    if (isset($_POST['something']) {
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
    $stmt = $db->prepare($sql); 
    $stmt->execute(array(':name' => $_POST['something']);   
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    

    echo json_encode($result);
    }

?>      

На мой взгляд, это неэффективно, потому что я пишу один и тот же код, один и тот же доступ к данным и т.д.... дважды - один раз для form.php и один раз для ajaxdata.php.

Как мне структурировать мои формы / файлы так, чтобы ajax использовал тот же доступ к базе данных и SQL-код, что и обычная форма отправки?

1 ответ

Для изменения HTML
добавлять onSubmit событие для обработки js включить выключить

     <form action="" method="post" onSubmit="return process_ajax();">
       <input type="text" name="something" />
       <input type="submit" value="post" />
     </form>

в precess_ajax() вернуть false, чтобы форма не была отправлена, и если js отключенная форма будет отправлена. Все параметры должны быть такими же, как если бы форма была размещена. Отправить дополнительный параметр в AJAX сказать ajaxForm чтобы проверить на стороне сервера, если пост по форме или AJAX

Теперь для серверного PHP-кода. Проверьте дополнительный параметр. ajaxForm если он установлен или имеет значение, которое вы отправили в AJAX Отправить JSON ответ еще отправить HTML-страницу. Ваш код будет выглядеть так

      if (isset($_POST['something']){
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
        $stmt = $db->prepare($sql); 
        $stmt->execute(array(':name' => $_POST['something']);   
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
        if(isset($_POST['ajaxForm'])){
          //send JSON response
        }
        else{
          //show html page here
        }   
      }

    ?> 
Другие вопросы по тегам