За последние 24 часа нас посетили 21687 программистов и 1036 роботов. Сейчас ищут 725 программистов ...

Как повесить доп. обработчик кнопки?

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

Метки:
  1. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Нужно перейти на сайт и одновременно запустить процедуру SQL. Если <form action="laravel.php" вписать сайт, то переходит без запуска процедуры sql, а если сделать пустым <form action="" то sql выполняется, но не переходит на сайт.

    Код (Text):
    1. <form action="laravel.php" method="post" id="nameform" >
    2.  
    3.      <?php
    4.  
    5.      $data='room1';
    6.  
    7.     echo  '<button type="submit" name="submit" form="nameform" value='.$data.'>Отправить</button>';
    8.  
    9.     $conn=getDentrix();
    10.  
    11.  
    12.  
    13. if (isset($_POST['submit'])) {
    14.   //Ваш код подключения к базе
    15.  
    16. $conn=getDentrix2();
    17. //print_r($aut);
    18.  
    19. $sql3 = "exec  = dbo.Test '$data', 1";
    20. $params = array( array(&$fun, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) );
    21.  
    22. if( $conn ) {
    23.                            //echo "Connection established:".$use.".<br />";
    24. }else{
    25.      echo "Connection could not be established.<br />";
    26.      die( print_r( sqlsrv_errors(), true));
    27. }
    28. $stmt1 = sqlsrv_query($conn, $sql3, $params);
    29. if( $stmt1 === false ) {
    30.      die( print_r( sqlsrv_errors(), true));
    31. }
    32. }
    33.  
    34.     ?>
    35.  
    36.       </form>
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    надо в этом файле laravel.php писать это:
    PHP:
    1. if (isset($_POST['submit'])) {
    2.   //Ваш код подключения к базе
    3. $conn=getDentrix2();
    4. //print_r($aut);
    5. $sql3 = "exec  = dbo.Test '$data', 1";
    6. $params = array( array(&$fun, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) );
    7. if( $conn ) {
    8.                            //echo "Connection established:".$use.".<br />";
    9. }else{
    10.      echo "Connection could not be established.<br />";
    11.      die( print_r( sqlsrv_errors(), true));
    12. }
    13. $stmt1 = sqlsrv_query($conn, $sql3, $params);
    14. if( $stmt1 === false ) {
    15.      die( print_r( sqlsrv_errors(), true));
    16. }
    17. }
    --- Добавлено ---
    а на странице с формой просто:
    HTML:
    1. <form action="laravel.php" method="post" id="nameform" >
    2. <button type="submit" name="submit" form="nameform" value='room1'>Отправить</button>
    3. </form>
     
  3. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Это не вариант, слышал где-то прикручивают скрипты Jqury.
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Kvandaik Ты нажимаешь кнопку Отправить. Если у тебя в заголовке action твоей формы написан какой то адрес, произойдет переход на этот файлик, куда передастся post параметр. То есть ты в этом файлике должен принять пост параметр.
    Если поле action будет пустым, то произойдет перезапуск текущего файлика, но пост запрос всеравну отправится только на текущий файлик. И у тебя на твоем текущем файлике срабатывает условие if(isset($_POST['submit'])) .
    Все понятно?
    --- Добавлено ---
    Если ты хочешь просто записать что то на текущей странице, а потом перейти на свой laravel.php пиши так, но это фигня собачая:

    PHP:
    1. <?php
    2. $data='room1';
    3. if (isset($_POST['submit'])) {
    4.   //Ваш код подключения к базе
    5. $conn=getDentrix2();
    6. //print_r($aut);
    7. $sql3 = "exec  = dbo.Test ".$_POST['submit'].", 1";
    8. $params = array( array(&$fun, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT) );
    9. if( $conn ) {
    10.                            //echo "Connection established:".$use.".<br />";
    11. }else{
    12.      echo "Connection could not be established.<br />";
    13.      die( print_r( sqlsrv_errors(), true));
    14. }
    15. $stmt1 = sqlsrv_query($conn, $sql3, $params);
    16. if( $stmt1 === false ) {
    17.      die( print_r( sqlsrv_errors(), true));
    18. }else{
    19.     header("Location: laravel.php");
    20. }
    21. }
    22. ?>
    23. <form action="" method="post" id="nameform" >
    24.     <button type="submit" name="submit" form="nameform" value='<?=$data?>'>Отправить</button>
    25. </form>
    поправил немного
    еще поправил
     
  5. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    яж не просто в exec пишу данные, в laravel уже будет поготовленная процедура и лишние данные она не оддаст, это номер экрана и данные. по этому мне нужен код скриптовый навешивание двух действий на одну кнопку
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Делить надо на вид -> контроллер -> модель. У вас пока не то.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    @Kvandaik, последовательно действия нужно выполнять, а не сразу ( захватил мир и успел посрать )
    --- Добавлено ---
    @Artur_hopf, после хидера всегда стоп машину надо прописывать
     
    Artur_hopf нравится это.
  8. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Сделал промежут сайт
    <body onLoad="document.getElementById('sbm').click()">
    <form action="laravel.php" method="POST" name="form1">
    <input type="text" name="input1">
    <?php
    $data=$_POST['submit'];
    $conn=GetDentrix();
    sql=.....
    sqlsrv_query.......
    echo'<input type="submit" name="submit" id="sbm" value='$data'>'
    ?>
    </form>
    </body>
     
  9. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    498
    Симпатии:
    57
    а вы шутник.
    sql запросы к базе, обработка данных , html теги в одном файле это разве MVC?
     
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @Kvandaik вот так выглядит модель:
    PHP:
    1. <?php
    2.  
    3.   namespace App;
    4.  
    5.   use Illuminate\Database\Eloquent\Model;
    6.  
    7.   class Task extends Model
    8.   {
    9.     //
    10.   }
    вот так контроллер:
    PHP:
    1. <?php
    2.  
    3.   use App\Task;
    4.   use Illuminate\Http\Request;
    5.  
    6.   /**
    7.    * Вывести панель с задачами
    8.    */
    9.   Route::get('/', function () {
    10.     //
    11.   });
    12.  
    13.   /**
    14.    * Добавить новую задачу
    15.    */
    16.   Route::post('/task', function (Request $request) {
    17.     //
    18.   });
    19.  
    20.   /**
    21.    * Удалить задачу
    22.    */
    23.   Route::delete('/task/{task}', function (Task $task) {
    24.     //
    25.   });
    вот так вывод вида в том же контроллере:
    PHP:
    1. Route::get('/', function () {
    2.   return view('tasks');
    3. });
    Если вам эти строки ни о чем не говорят, думаю вы куда то не туда убежали в изучении laravel.
    --- Добавлено ---
    вот документация откуда я это взял:

    https://laravel.ru/docs/v5/quickstart

    Попробуйте лучше это все сделать.

    p.s. и да, я в laravel соображаю даже меньше вас.
    --- Добавлено ---
    а тут вообще есть все что вам нужно для вашей задачи https://laravel.com/docs/5.8/routing
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Почти всегда. В принципе контент после Location можно спокойно выдавать, если есть что выдавать, не светятся защищенные данные и т.п. Правда, обычно в этом нет никакого толка, только лишняя нагрузка.
    --- Добавлено ---
    Где есть одно действие, там же может быть и два. Постановка вопроса так себе. На JS обычно вешают альт. реализацию того же самого действия. Или какие-то вспомог. действия типа валидации, подтверждения и т.п., дергая в конце обычный обработчик (или наоборот пресекая его вызов).