Как получить параметры URL с помощью PHP внутри оператора if (isset) для формы обновления - PullRequest
0 голосов
/ 06 июля 2019

Я знаю, что вы можете получить параметры URL, используя if (isset ($ _ GET ['id'])) {$ id = $ _GET ['id'];и это прекрасно работает, если я затем закрою этот оператор 'if' и создам новый для формы обновления / добавления-записи на этой же странице (это страница отображения для каждой записи базы данных инд.), я не могу получитьid, который был передан URL в следующем операторе if.

Это оператор if, который отправляет новую строку («условие») в мою дочернюю таблицу («условия») с внешним ключом, который связывает его с родительской таблицей поставщиков медицинских услуг (страница отображения).получает идентификатор провайдера из выбранной поисковой системы и отображает его информацию, а затем в нижней части находится форма «Добавить запись», если кто-то хочет добавить новое состояние здоровья, которое лечит этот врач.)

Все работает, если ядать ему правильный идентификатор прямо в моем PHP ($ id = 56), но не тогда, когда я попытаюсь извлечь его из URL-адреса ВНУТРИ этого второго оператора if ($ id = $ _GET ['id'];).

if (isset($_GET['providerid']))
{
$providerid = $_GET['providerid'];  /*THIS WORKS GREAT*/

$sql = "SELECT *, GROUP_CONCAT(DISTINCT conditions.condition_name 
SEPARATOR ', ') AS all_conditions FROM `providers` INNER JOIN 
`conditions` ON `providers`.`id` = `conditions`.`prov_id` WHERE 
`prov_id`= $providerid";

$data = mysqli_query($connection, $sql) or die('error');

if(mysqli_num_rows($data) > 0){
  $numresults = mysqli_num_rows($data);

    while($row = mysqli_fetch_assoc($data)){
    $providerid = $row['id'];
    $providerfirstname = $row['provider_first_name'];
    /*etc....*/
    $conditions = $row['all_conditions'];

/*table displays provider info:*/
     echo "<br><h1>".$providerfirstname." ".$providerlastname." 
 </h1>";
     echo '<TABLE id="myTable" width="350px" border="1">';
           //etc....(cutting out details)
     echo '<tr><td><div id="myTable"><a href="#" id="addNew">Add+ . 
  </a></div></td><td><b>Conditions Treated:</b></td> . 
 <td>'.$conditions.'</td></tr>';

/*If user wants to add a new condition treated by provider that's 
not listed:*/
     echo '<tr><td></td><td>Add a new condition:</td><td><form 
action="profilebackup.php" method="POST"><input type="text" 
size="40" name="newcond" value="" placeholder="Add a Condition" /> . 
<input type="submit" name="add1" value="Add"><br></td></tr>';

            }
     echo '</TABLE>';

    }
   else {
        echo "0 results";
   }
}

/*sends added conditions to child table, EVERYTHING WORKS EXCEPT 
GETTING ID (WHICH WORKED ABOVE):*/

if(isset($_POST['add1'])){
  $providerid = $_GET['providerid'];
  $condition = mysqli_real_escape_string($connection, 
$_POST['condition']);


$insql = "INSERT INTO `conditions` (condition_name, prov_id) VALUES 
('$condition','$providerid')";

    if(mysqli_query($connection, $insql)){
      echo "Thank you! Your provider has successfully been submitted 
      to the database!";
     }
     else {
       echo "Sorry, there was an problem submitting your provider to 
       the database." . $insql . mysqli_error($connection);
      }
    }

Все работает, кроме функции GET во втором операторе if.Он возвращает код ошибки, что у него нет правильного ограничения внешнего ключа: «Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется», поскольку он не получает идентификатор.

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Строки проблемы в операторе $sql, где в качестве строки принимается переменная $providerid, а не переменная php.$ _GET работает нормально, даже если отправляет другой протокал, такой как POST, PUT, DELETE, ... Что-то вроде этого должно работать как положено:

$sql = "SELECT *, GROUP_CONCAT(DISTINCT conditions.condition_name 
SEPARATOR ', ') AS all_conditions FROM `providers` INNER JOIN 
`conditions` ON `providers`.`id` = `conditions`.`prov_id` WHERE 
`prov_id`= " . $providerid ;
0 голосов
/ 06 июля 2019

Вы отправляете форму через post в profilebackup.php , но обработчик этой формы пытается get ProviderID .Вам нужно отправить ProviderID в виде строки запроса в действии формы, если вы хотите иметь доступ к нему через $_GET.

<form method="post" action="profilebackup.php?providerid=<?php echo $providerid; ?>" ...

Правильный способ сделать это - включить в форму скрытый ввод и затем последовательно обращаться к нему через $_POST.

<form method="post" action="profilebackup.php">
    <input type="hidden" name="providerid" value="<?php echo $providerid; ?>">
    ...
</form>

И код обработчика.

<?php
...

// Notice that now you can use $_POST consistently.
if (isset($_POST['add1'])) {
    $providerid = $_POST['providerid'];
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...