нет значений в моей строке из взорванного массива сообщений? PHP

Сегодня начал изучать PHP, так что простите меня за то, что я нуб. У меня есть простая HTML-форма, в которой пользователь вводит 4 строки, а затем отправляет.

HTML form

<html>
<head>
<title>EMS</title>
</head>

<body>
<h1>EMS - Add New Employees</h1>

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
<table>
<tr><td>Enter a NAME:</td><td> <input type="text" name="name"></td></tr>
<tr><td>Enter a PPSN:</td><td>  <input type="text" name="ppsn"></td></tr>
<tr><td>Enter a PIN :</td><td>  <input type="text" name="pin"></td></tr>
<tr><td>Enter a DOB:</td><td>  <input type="text" name="dob"></td></tr>
<tr><td></td><td><input type="submit" value="Add New Employee" name="data_submitted"></td></tr>
</table>
</form>
</html>

Я хочу преобразовать 4 элемента массива $_POST["data submit"] в строку.

PHP

<?php


    if (isset($_POST['data_submitted'])){ 



       $employee = implode(",",$_POST['data_submitted']);



        echo "employee = ".$employee;
    }


?>

Почему, когда я запускаю проект, ввожу 4 строки в форму и утверждаю, что при выводе строки сотрудника ничего не содержится? Однако в строке сотрудника есть значение, когда я просто взрываю массив $_POST без «data_submitted».

$employee = implode(",",$_POST);

Вывод строки $employee теперь выглядит следующим образом: employee = will,03044,0303,27/5/6,Add New Employee

Он содержит имя, pps, пин-код, доб и это значение ДОБАВИТЬ нового сотрудника? Как мне просто получить строку $employee, содержащую только имя, pps, pin и dob из массива $POST_[data_submitted]?


person will mannix    schedule 14.02.2018    source источник
comment
$_POST['data_submitted'] — это строка, а не массив.   -  person Barmar    schedule 14.02.2018
comment
$_POST['anything'] - это просто значение ввода с name="anything". Почему вы ожидаете, что $_POST['data_submitted'] будет массивом, содержащим все остальные входные данные?   -  person Barmar    schedule 14.02.2018
comment
попробуйте использовать var_dump($_POST);die(); перед оператором if, просто посмотрите содержимое массива POST.   -  person mcv    schedule 14.02.2018


Ответы (2)


Если вы хотите взорвать представленные данные, вам необходимо обратиться к конкретным элементам следующим образом:

<?php
$clean = [];

if (isset($_POST['data_submitted'])){ 

 // one way to deal with possibly tainted data
 $clean['name'] =  htmlentities($_POST['name']);
 $clean['ppsn'] =  htmlentities($_POST['ppsn']);
 $clean['pin']  =  htmlentities($_POST['pin']);
 $clean['dob']  =  htmlentites($_POST['dob']);


 $employee = implode(",",$clean);
 echo "employee = $employee";
}

Никогда не используйте отправленные данные без предварительной проверки, чтобы убедиться, что это безопасно. Вам необходимо его подтвердить. Поскольку OP не указывает, к каким данным относятся именованные входы «ppsn», «pin», «dob», этот пример выполняет минимальную проверку. Для каждого входа может потребоваться больше или что-то другое.

Независимо от того, являетесь ли вы новичком или знакомы с PHP, рекомендуется часто читать онлайн Руководство.

person slevy1    schedule 14.02.2018
comment
Использование htmlentities прекрасно, но действительно необходимо только в эхе, а не во всех точках. Это нанесло бы ущерб при попытке выполнить какие-либо логические операции. Проверка типов данных и обрезка всегда хороши для дезинфекции сразу, а использование подготовленных операторов сохраняет БД. Однако отлично подходит для проблем безопасности! - person nerdlyist; 14.02.2018
comment
@nerdlyist хорошо справляется с повторной проверкой и обрезкой данных. Основное преимущество htmlentities() — это мера предотвращения атак межсайтового скриптинга. Если бы мы точно знали, что опубликованные поля с именами ppsn и dob предназначены только для числовых значений, я бы протестировал их с помощью ctype_digit. - person slevy1; 15.02.2018

Во-первых, вам нужно знать, что php будет обрабатывать значение в формате: value="value here" как строку.

Таким образом, вызов implode(",",$_POST['data_submitted']); вернет Add New Employee, как здесь объявлено:

<input type="submit" value="Add New Employee" name="data_submitted">
.

Из вашего вопроса:

How do I just get the $employee string to contain just the name, pps, pin and dob from the $_POST[data_submitted] array?

Решение

1. Unset the <code>$_POST['data_submitted']</code> index in the $_POST super global variable
2. Implode it



// Unset the $_POST['data_submitted'] index
$post_data = unset( $_POST['data_submitted'] );

// Format the post data now
$format_post_data = implode( ",", $post_data );

// Escape and display the formatted data 
echo htmlentities( $format_post_data, ENT_QUOTES  );
person John Zenith    schedule 14.02.2018