SQL-код широко открыт для внедрения SQL-кода в приведенном выше коде - вам следует рассмотреть возможность использования prepared statements
, так как после его освоения жизнь станет намного проще, а ваш код - более безопасным.
Ниже не проверено, но по существу работает следующим образом:
Данные запроса POST фильтруются - хотя это не является строго обязательным, когда использование подготовленного оператора, IMO, всегда хорошая идея.
sql для выполнения prepared
, а заполнители ?
в sql связаны с переменными.
<?php
session_start();
include 'config.php';
$user=filter_input( INPUT_POST, 'username', FILTER_SANITIZE_STRING );
$name=filter_input( INPUT_POST, 'friendname', FILTER_SANITIZE_STRING );
$years=filter_input( INPUT_POST, 'years', FILTER_SANITIZE_NUMBER_INT );
$nick=filter_input( INPUT_POST, 'nickname', FILTER_SANITIZE_STRING );
$place=filter_input( INPUT_POST, 'place', FILTER_SANITIZE_STRING );
$sql='insert into `data` (`username`,`friendname`,`years`,`nickname`,`place`) values (?,?,?,?,?)';
$stmt=$con->prepare( $sql );
if( !$stmt )exit('Failed to prepare SQL query');
$stmt->bind_param('ssiss',$user,$name,$years,$nick,$place);
$res=$stmt->execute();
if( $res && $con->affected_rows==1 ){
$_SESSION['friendname']=$name;
$_SESSION['username']=$user;
exit( header('Location: ../form2.php') );
} else {
exit('Error');
}
?>
Тогда ваш HTML может быть изменен следующим образом, чтобы назначить переменную сеанса переменной - опять же, строго не обязательно делать это
<?php
session_start();
$friend = $_SESSION['friendname'];
?>
<html>
<body>
<form>
<p><?php echo $_SESSION['username']; ?></p>
<h4>Enter some details for your friend <?php echo $friend;?></h4>
</form>
</body>
</html>