2016-04-09 5 views
0

Привет, это не столько вопрос о том, как код не работает, а, скорее, о выполнении, я (вроде) прибил самый простой PHP, теперь я работаю над написанием более чистого и более короткого кода.

Я искал stackoverflow для моего вопроса, но не смог найти ничего конкретного для моего ответа.

У меня есть HTML-формы с помощью простых текстовых входов, когда пользователь щелкает представить функцию isset() срабатывает и я получаю все переменные через $_POST

МОЯ ПРОБЛЕМА

Поскольку у меня есть много полей ввода я считаю должен быть лучший или более продвинутый способ получить значения, которые я получаю после, вместо использования $val1 = $_POST['name'], $val2 = $_POST['lastname'].

Если кто-нибудь может дать мне несколько советов о том, как я могу улучшить этот очень простой код, он будет очень признателен.

<form name="newUser" method="post"> 
<input type="text" value="name" name="name" /> <br /> 
<input type="text" value="lastname" name="lastname" /><br /> 
<input type="text" vaulue="uname" name="uname" /><br /> 
<input type="email" value="email" name="email" /><br /> 
<input type="password" value="pword" name="pword" /><br /> 
<input type="text" value="company" name="company" /><br /> 
<input type="text" value="salary" name="salary" /><br /> 
<input type="submit" name="submit" /> 


if(isset($_POST['submit'])){ 
$name= $_POST['name']; 
$lastname = $_POST['lastname']; 
$uname = $_POST['uname']; 
$email = $_POST['email']; 
$pword = $_POST['pword']; 
$company = $_POST['company']; 
$salary = $_POST['salary']; 

regUser($name,$lastname,$uname,$email,$pword,$company,$salary); 

Я специально после того, как я могу сократить этот код, а также улучшить его

+0

Это лучше опубликовано в обзоре кода – Chay22

+0

Я не вижу причины хранить POST в переменной, если вы просто захотите повторно запросить этого пользователя. – PVL

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит http://codereview.stackexchange.com/. – CodeMouse92

ответ

2

Вы могли бы просто использовать функцию extract() function здесь.

В этом случае, вы могли бы просто написать:

extract($_POST); 

И потом, вы можете напрямую использовать $ имя, $ lastname..etc;

Другими словами, ключи массива $ _POST становятся именами переменных.

Бланк проверка может быть сделана следующим образом:

$errors = []; 

foreach ($_POST as $k => $v) { 
    if (empty($v)) { 
     $errors[] = "$k is blank"; 
    } 
} 

if (!empty($errors)) { 
    echo "Please fix the following errors:<br/>"; 
    echo implode("<br/>", $errors); 
} 

Надеется, что это помогает!

+0

потрясающе вам большое спасибо ... есть способ проверить, были ли заполнены все поля этой функцией, если я могу спросить? Будет принимать ответ, когда время истекает. – Marilee

+0

Вы не можете выполнить пустую проверку с помощью этой функции. В этом случае вам необходимо получить доступ к каждому элементу. –

+0

@Marilee Sure есть. 'foreach' и получить каждый ключ/значение и проверить на пустое. Редактировать: именно так, как он редактировался. –

2

В $ _POST находится в массиве, вы можете сделать так:

// $_POST['foo'] = "bar"; 
foreach ($_POST as $key => $field) { 
    // >= php7 
    ${$key} = $field ?? null; 
    // < php7 
    ${$key} = isset($field) ? $field : null; 
} 

// $foo = 'bar'; 

Вы даже могли обернуть это в processPostVariables(array $postVar) функции, например, чтобы сделать его повторно.

Однако лично мне не очень нравится идея генерировать переменные, это своего рода «волшебный код». Это не так плохо, как в вашем примере.

+0

Просто заметили, что часть 'isset' бесполезна, потому что если переменная находится в массиве $ _POST, она уже установлена. '$ {$ key} = $ field;' должно быть достаточно. – pimolo

Смежные вопросы