2016-04-09 85 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當然有。 '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