我的网站上有一个表单供用户提交博客
在该表单中,我有一个针对不同博客类别的下拉选择菜单。
例如U.S. News
,World News
,Economic News
等......'
每个表单选项允许单个值输入。
在我的php中,我想为该“类别”表单字段创建两个单独的变量,并将每个值用于两个不同的任务。
任务#1:
我想使用所选值作为URL路径的一部分来发布/存储特定的博客文件。
对于此任务,我能够使用表格中嵌入的值。
并且......在我的php中,我使用类别数组创建了变量$catPath
来处理此任务。
例如:
*如果用户选择“美国新闻”作为其博客应显示的类别,则美国新闻的值将设置为“美国”。
因此,在上面的示例中,“US”值将被用作;
file_put_contents("../Blogs/$catPath/$unique_id.html", ob_get_contents());
例如:../Blogs/US/0001.html
所以,非常好......
然而......
任务#2:
我想创建一个名为$catTag
的单独变量,以便在博客标题中使用。
例如:
坚持上面的例子......如果用户选择'美国表格中的新闻......我希望完整的类别文本“美国新闻”出现在博客的标题中,而不是像在网址路径中那样“美国”。
DEMO:
我在表格和下面的php中包含了一个非常精简的演示版本。
在php中,请注意我已经创建了变量$catTag
,并且我成功地能够在php echo示例'A'中回显调整后的值。
但是,当我尝试将变量$catTag
用作简单的php回声时,如在php示例'B'中...它仍然回显原始值,而不是调整后的值。
我不想在我的表单中为'category'创建两个冗余字段。
我需要能够使用单独的变量,以便回调调整后的值。
我提前为我对此的有限知识道歉。我希望我已经足够好地解释了这一点。
我尝试了几件事,但到目前为止,我没有运气。
非常感谢任何建议。
表格:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="MyPHP.php" method="post" enctype="multipart/form-data">
<label>Select A Category: </label>
<select name="category">
<option value="US">U.S. News</option>
<option value="World">World News</option>
<option value="Government-Politics">Government & Politics</option>
<option value="Economic">Economic News</option>
<option value="National-Weather">National Weather News</option>
<option value="Entertainment">Entertainment News</option>
<option value="Science-Technology">Science & Technology</option>
<option value="Sports">Sports News</option>
<option value="Health">Health News</option>
</select>
<br>
<br>
<input name="Submit" type="submit" value="Submit">
</form>
</body>
</html>
PHP :( MyPHP.php)
<?php ob_start(); ?>
<html>
<head>
</head>
<body>
<!---| Start php Example A |---------------------------->
<?php
$catTag = $_REQUEST['category'];
if ($catTag == "US") { echo "U.S. News"; }
if ($catTag == "World") { echo "World News"; }
if ($catTag == "Government-Politics") { echo "Government & Politics"; }
if ($catTag == "Economic") { echo "Economic News"; }
if ($catTag == "National-Weather") { echo "National Weather News"; }
if ($catTag == "Entertainment") { echo "Entertainment News"; }
if ($catTag == "Science-Technology") { echo "Science & Technology"; }
if ($catTag == "Sports") { echo "Sports News"; }
if ($catTag == "Health") { echo "Health News"; }
?><br>
<!---| End php Example A |---------------------------->
<!---| Start php Example B |------------------------------>
<?php echo $catTag; ?>
<!---| End php Example B |-------------------------------->
</body>
</html>
<?php echo '';
$catPath = $_REQUEST['category'];
$valid_categories = array('US','World','Government-Politics','Economic','National-Weather','Entertainment','Science-Technology','Sports','Health');
if (!in_array($catPath, $valid_categories)) { die("Invalid Category"); } file_put_contents("$catPath.html", ob_get_contents()); ?>
答案 0 :(得分:0)
我不太喜欢在SO上为其他人编写代码,但这里有一个更干净的实现,你想要实现的目标。我对代码进行了评论,希望对您有所帮助。
它有一个Key / value数组,包含类别slugs及其标题。然后,我们在执行代码之前检查类别是否存在。因此,您可以使用数组中键的值作为所选类别的标题。
$chosen_category = filter_input(INPUT_POST, 'category'); // Filter the input
if( !$chosen_category ) die('No category chosen');
// Array holding the category keys and titles
$category_array = [
'US' => 'U.S. News',
'World' => 'World News',
'Government-Politics' => 'Government & Politics'
];
if( !array_key_exists($chosen_category, $category_array) ) die('Chosen category does not exist'); // Confirm that the category exists in as key value in $category_array
$category_title = $category_array[$chosen_category]; // Title of the chosen category, as mapped in the KV Array
file_put_contents("{$chosen_category}.html", ob_get_contents());
答案 1 :(得分:0)
我认为最清晰的方法是构建阵列以满足您的两个目的,而不会过于臃肿。我建议通过以下方式利用特定的键和值:
$array=[
'US'=>'U.S. News',
'World'=>'World News',
'Government-Politics'=>'Government & Politics',
'Economic'=>'Economic News',
'National-Weather'=>'National Weather News',
'Entertainment'=>'Entertainment News',
'Science-Technology'=>'Science & Technology',
'Sports'=>'Sports News',
'Health'=>'Health News'
];
表单生成:
echo "<select name=\"category\">";
foreach($array as $k=>$v){
echo "<option value=\"$k\">$v</option>";
}
echo "</select>";
提交验证:
if(isset($_POST['category'])){ // something was sent
if(isset($array[$_POST['category']])){
$catPath=$_POST['category'];
$catTag=$array[$_POST['category']];
}else{
// set some kind of default values or deny submission
}
}
当然,您必须确定这些方法在项目中的位置。
最重要的信息是,重用数组数据可以提供DRY代码并使“编程神”微笑。
我还要补充一下:
$_POST['category']
isset()
之前,您应该先检查Map<String, String> myMap = new HashMap<>();
myMap.put("A", "fortran");
myMap.put("B", "java");
myMap.put("C", "c++");
myMap.put("D", "php");
List<String> keysForFiltering = Arrays.asList("A", "C");
Predicate<Entry<String, String>> myPredicate = t -> keysForFiltering.contains(t.getKey());
Map<String, String> filteredMap = myMap
.entrySet().stream().filter(myPredicate)
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
System.out.println(filteredMap);
List<string> MyFilesDates = Directory.GetFiles("C:\\Images\\", "*.png")
.Select(p => File.GetLastWriteTime(p) // closing parenthesis moved from here...
.ToString("dd/MM/yy")) // ...to here
.ToList();
是否有警告。