Отправить входные данные, но сохранить форматирование URL-адреса — Php

#php

#php

Вопрос:

Код, который генерирует HTML-форму:

 <form action='inc/q/prof.php' method='post'>
<input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />
</form>
  

*Php-код, на который ссылается <form action = *

 <?php
// Insert Comments into Database that user provides
$comm = mysql_real_escape_string($_POST['addComment']);

// following line has changed:
$pID4 = filter_input(INPUT_POST, 'pID', FILTER_SANITIZE_NUMBER_INT);

$cID = mysql_real_escape_string($_POST['courseInfoDD']);
$username = "####";
$password = "####";
$pdo4 = new PDO('mysql:host=localhost;dbname=####', $username, $password);
$pdo4->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth4 = $pdo4->prepare('INSERT INTO Comment (info, pID, cID) VALUES(?,?,?);'); 
$sth4->execute(array($comm, $pID4, $cID ));

?>
  

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

1. Не использовать mysql_real_escape_string() И параметризованные запросы излишне: это приведет к разрыву строк, содержащих ' или "

2. И можете ли вы уточнить, откуда должен поступать pID? Это в форме или в целевом URL?

3. pID извлекается из таблицы базы данных с именем ‘Professor’

4. Должен ли $ comm var просто быть $comm = $_POST['addComment']; тогда

5. @user ага. Повторите pId, в данный момент вы извлекаете его из переменной GET. Пожалуйста, покажите, как вы передаете это скрипту

Ответ №1:

Правка 2: Я предполагаю, что вы вызываете prof.php?pID=120 , а затем отображаете заданную форму? И когда вы нажимаете на форму, действие ссылается на ваш PHP-код? Если это так, то измените php-файл, который печатает вашу форму, на этот:

 <?
$pID = filter_input(INPUT_GET, 'pID', FILTER_SANITIZE_NUMBER_INT);
?>
<form action='inc/q/prof.php' method='post'>
  <input type='text' id='addComment' name='addComment' tabindex='3' value='Enter comment' />
  <input type="hidden" name="pID" value="<? echo $pID; ?>" />
</form>
  

Затем в скрипте, обрабатывающем отправку вашей формы, вы можете получить доступ к pID значению через

 $_POST["pID"]
  

как видно из моей первой правки, ниже:


Редактировать: тогда ваш PHP-скрипт будет выглядеть следующим образом:

 // Insert Comments into Database that user provides
$comm = mysql_real_escape_string($_POST['addComment']);

// following line has changed:
$pID4 = filter_input(INPUT_POST, 'pID', FILTER_SANITIZE_NUMBER_INT);

$cID = mysql_real_escape_string($_POST['courseInfoDD']);
$username = "###";
$password = "####";
$pdo4 = new PDO('mysql:host=localhost;dbname=####', $username, $password);
$pdo4->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth4 = $pdo4->prepare('INSERT INTO Comment (info, pID, cID) VALUES(?,?,?);'); 
$sth4->execute(array($comm, $pID4, $cID ));
  

Скрытое поле ввода — лучший способ передачи переменных, поскольку вы можете получить к нему доступ как к обычной отправленной переменной POST (сравните ее со своей $_POST['courseInfoDD'] ).


Но помните, что никогда не используйте это для информации, относящейся к безопасности, поскольку эти данные могут быть просмотрены и изменены (например, путем внедрения javascript).

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

1. Могу ли я увидеть это в своем коде, пожалуйста? Можете ли вы также объяснить, почему я хотел бы использовать скрытое поле формы?

2. @user700070 Проверьте мою правку… Я не могу показать вам больше на сайте, создающем формы, поскольку вы не опубликовали никакого кода (кроме этих двух строк формы)

3. Майкл, это целая форма, она состоит только из (1) поля ввода для сбора комментария

4. Когда я пытаюсь использовать приведенный выше php-код, он выдает ошибку: `Столбец ‘pID’ не может быть нулевым’ `

5. У меня также есть URL начальной формы ‘prof.php?pID= 273’