Одна кнопка отправки должна выполнять несколько действий в PHP - PullRequest
0 голосов
/ 23 января 2019

У меня есть две страницы php.

  1. dataentryform.php
  2. report.php

В dataentryform.php через тег формы я беру 19 пользовательских вводов с fcode в качестве первичного ключа. После отправки я хочу, чтобы произошли две вещи.

  1. данные, хранящиеся в базе данных
  2. данные, введенные в форму, должны отображаться в report.php файл.

Моя проблема:

  1. Может хранить значения в базе данных, а также извлекать их.
  2. Но значения, напечатанные в файле report.php, всегда будут соответствуют первому ряду в таблице

Как мне это исправить?

dataentryform.php

<form method="post" action="includes/dbinsert.php">
        <table width="650" border="1" class="table1">
  <tbody>
    <tr>
      <td class="label">Farmer's Code</td>
      <td width="350" colspan="2"><input type="text" name="fcode" 
class="text" autocomplete="off" required></td>
    </tr>
    <tr>
      <td class="label">Farmer Name</td>
      <td width="350" colspan="2"><input type="text" name="fname" 
class="text" autocomplete="off" required></td>
    </tr>
    <tr>
      <td class="label">Village/ Town</td>
      <td colspan="2"><input type="text" name="village" class="text" 
autocomplete="off" required></td>
    </tr>
    <tr>
      <td class="label">Survey Number</td>
      <td width="350" colspan="2"><input type="text" name="surnum" 
class="text" autocomplete="off" required></td>
    </tr>
    <tr>
      <td class="label">Plot Number</td>
      <td width="350" colspan="2"><input type="text" name="plotnum" 
class="text" autocomplete="off" required></td>
    </tr>
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    <tr>
      <td class="label">Potash (Tons/Acre)</td>
      <td width="350" colspan="2"><input type="number" name="potash" 
class="range" min="0" step="0.001" autocomplete="off" required></td>
    </tr>
  </tbody>
</table>
</div>
  <button type="submit" name="submit" class="submit">Submit</button>
</div>
</form>

dbinsert.php

<?php
include 'dbconnect.php';
$fcode = $_POST['fcode'];
$fname = $_POST['fname'];
$village = $_POST['village'];
$surnum = $_POST['surnum'];
$plotnum = $_POST['plotnum'];
$acre = $_POST['acre'];
$gunta = $_POST['gunta'];
$soiltype = $_POST['soiltype'];
$wtrsrc = $_POST['wtrsrc'];
$factory = $_POST['factory'];
$labnum = $_POST['labnum'];
$nextcrop = $_POST['nextcrop'];
$coldate = $_POST['coldate'];
$gendate = $_POST['gendate'];
$season = $_POST['season'];
$taryield = $_POST['taryield'];
$nitro = $_POST['nitro'];
$phos = $_POST['phos'];
$potash = $_POST['potash'];

$sql = "INSERT INTO forminfo (fcode,fname,village,surnum,plotnum,acre,gunta,soiltype,wtrsrc,factory,labnum,
                               nextcrop,coldate,gendate,season,taryield,nitro,phos,potash)
        VALUES ('$fcode','$fname','$village','$surnum','$plotnum','$acre','$gunta','$soiltype','$wtrsrc','$factory','$labnum',
                 '$nextcrop','$coldate','$gendate','$season','$taryield','$nitro','$phos','$potash');";
mysqli_query($conn, $sql);

header('location:../report.php');
?>

dbinsert.php вставляет значения в базу данных. Затем перенаправить на report.php. Здесь я включаю dbextract.php. Однако значения, отображаемые в report.php, неверны. Пробовал с этим тоже но не повезло.

dbextract.php

 <?php
      include 'dbconnect.php';
      $fcode = $_POST['fcode'];
      $sql = "SELECT * FROM forminfo WHERE fcode=['$fcode']";
      $result = mysqli_query($conn, $sql);
      $row = mysqli_fetch_array($result); 
 ?>      

Ошибка: неопознанная переменная $fcode.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

К ответу Твисты - пример Minimal, Complete и Verifiable, вероятно, будет выглядеть как пример ниже.

ПРИМЕЧАНИЕ:

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

Судя по предоставленному коду, на самом деле это была одна большая проблема:

Неопределенные индексы.Судя по предоставленному коду dbinsert.php их много.$acre = $_POST['acre'] и каждый $_POST[] после него должен давать Warning: Undefined index.

dbextract.php также содержит очень недопустимый SQL-запрос.Вероятно, он должен был быть SELECT * FROM forminfo WHERE fcode='$fcode'.

На самом деле было бы лучше, если бы вы использовали Подготовленные операторы MySQLi

Пример ниже демонстрирует работу с $_SESSION.

dataentryform.php

<form method="post" action="dbinsert.php">
  <table width="650" border="1" class="table1">
    <tbody>
      <tr>
        <td class="label">Farmer's Code</td>
        <td width="350" colspan="2"><input type="text" name="fcode" class="text" autocomplete="off" required></td>
      </tr>
      <tr>
        <td class="label">Farmer Name</td>
        <td width="350" colspan="2"><input type="text" name="fname" class="text" autocomplete="off" required></td>
      </tr>
      <tr>
        <td class="label">Village/ Town</td>
        <td colspan="2"><input type="text" name="village" class="text" autocomplete="off" required></td>
      </tr>
      <tr>
        <td class="label">Survey Number</td>
        <td width="350" colspan="2"><input type="text" name="surnum" class="text" autocomplete="off" required></td>
      </tr>
      <tr>
        <td class="label">Plot Number</td>
        <td width="350" colspan="2"><input type="text" name="plotnum" class="text" autocomplete="off" required></td>
      </tr>
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      <tr>
        <td class="label">Potash (Tons/Acre)</td>
        <td width="350" colspan="2"><input type="number" name="potash" class="range" min="0" step="0.001" autocomplete="off" required></td>
      </tr>
    </tbody>
  </table>
  <button type="submit" name="submit" class="submit">Submit</button>
</form>

dbinsert.php

<?php
  session_start();
  // include 'dbconnect.php';
  $fcode = $_POST['fcode'];
  $fname = $_POST['fname'];
  $village = $_POST['village'];
  $surnum = $_POST['surnum'];
  $plotnum = $_POST['plotnum'];

  $_SESSION['fcode']=$fcode;

  // $sql = "INSERT INTO forminfo (fcode,fname,village,surnum,plotnum,acre,gunta,soiltype,wtrsrc,factory,labnum,
                                 // nextcrop,coldate,gendate,season,taryield,nitro,phos,potash)
          // VALUES ('$fcode','$fname','$village','$surnum','$plotnum','$acre','$gunta','$soiltype','$wtrsrc','$factory','$labnum',
                   // '$nextcrop','$coldate','$gendate','$season','$taryield','$nitro','$phos','$potash');";
  // mysqli_query($conn, $sql);

  header('location: dbextract.php');
?>

dbextract.php

<?php
  //session_start();
  // include 'dbconnect.php';
  $fcode = $_SESSION['fcode'];
  //$fcode = $_GET['fcode'];
  var_dump($fcode);
  // $sql = "SELECT * FROM forminfo WHERE fcode=['$fcode']";
  // $result = mysqli_query($conn, $sql);
  // $row = mysqli_fetch_array($result); 
?>

То же самое можно сделать без использования $_SESSION. dataentryform.php остается прежним.

dbinsert.php

<?php
  //session_start();
  // include 'dbconnect.php';
  $fcode = $_POST['fcode'];
  $fname = $_POST['fname'];
  $village = $_POST['village'];
  $surnum = $_POST['surnum'];
  $plotnum = $_POST['plotnum'];

  //$_SESSION['fcode']=$fcode;

  // $sql = "INSERT INTO forminfo (fcode,fname,village,surnum,plotnum,acre,gunta,soiltype,wtrsrc,factory,labnum,
                                 // nextcrop,coldate,gendate,season,taryield,nitro,phos,potash)
          // VALUES ('$fcode','$fname','$village','$surnum','$plotnum','$acre','$gunta','$soiltype','$wtrsrc','$factory','$labnum',
                   // '$nextcrop','$coldate','$gendate','$season','$taryield','$nitro','$phos','$potash');";
  // mysqli_query($conn, $sql);

  header('location: dbextract.php/?fcode='.$fcode);
?>

dbextract.php

<?php
  //session_start();
  // include 'dbconnect.php';
  //$fcode = $_SESSION['fcode'];
  $fcode = $_GET['fcode'];
  var_dump($fcode);
  // $sql = "SELECT * FROM forminfo WHERE fcode=['$fcode']";
  // $result = mysqli_query($conn, $sql);
  // $row = mysqli_fetch_array($result); 
?>

Выше показано, что это можно сделать без $_SESSION.В этом примере происходит то, что вы передаете желаемое значение в качестве параметра.Затем происходит запрос GET, а затем вы используете $_GET['fcode'] для получения значения.

!!! ВАЖНО !!!

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

Об отправке данных с одним запросом POST в несколько разных файлов .php -На стороне сервера, насколько мне известно, запрос single POST отправляет данные в файл single . Примечание можно отправить несколько POST-запросов с использованием AJAX, но AJAX работает на стороне клиента, поэтому AJAX не поможет, если перенаправление происходит на стороне сервера.

0 голосов
/ 23 января 2019

Вы можете использовать переменные сеанса, добавив

session_start();
$_SESSION['data'] = $_POST;

в начале dbinsert.php и затем используя $fcode = $_SESSION['data']['fcode']; на dbextract.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...