echo "Enter vendor name: [vendor1|vendor2|vendor3|vendor4|vendor5] : ";
$handle = fopen ("php://stdin","r");
$vendor = fgets($handle);
$tables = array();
$err = validate_vendor($vendor, $tables);
if(!$err) {
exit("error: invalid vendor\n");
}
在 validate_vendor 函数中,我嵌入了给定的逻辑 bwlow,如果供应商名称不在这些供应商类型中,则返回 0,否则返回 1。即使我按有效的供应商名称(例如“vendor1”),它也会给出无效的供应商名称并退出。
function validate_vendor($prev_vendor, &$tables) {
if($prev_vendor == "vendor1")
{
---
---
return 1;
}
if($prev_vendor == "vendor2")
{
---
---
return 1;
}
if($prev_vendor == "vendor3")
{
---
---
return 1;
}
if($prev_vendor == "vendor4")
{
---
---
return 1;
}
if($prev_vendor == "vendor5")
{
---
---
return 1;
}
else
{
return 0;
}
}
面临的问题 您面临的问题可能是由于 fgets 从标准输入读取时包含换行符所致。当您键入供应商名称并按 Enter 键时,fgets 会捕获输入以及换行符。因此,字符串“vendor1”实际上读作“vendor1” ",它与 validate_vendor 函数中的任何条件都不匹配。
您可以通过从输入中删除换行符来解决此问题。以下是修改代码的方法:
echo "Enter vendor name: [vendor1|vendor2|vendor3|vendor4|vendor5] : ";
$handle = fopen("php://stdin", "r");
$vendor = fgets($handle);
$vendor = trim($vendor); // Remove newline character and any surrounding whitespace
$tables = array();
$err = validate_vendor($vendor, $tables);
if (!$err) {
exit("error: invalid vendor\n");
}
function validate_vendor($prev_vendor, &$tables) {
if ($prev_vendor == "vendor1") {
// Your logic here
return 1;
}
if ($prev_vendor == "vendor2") {
// Your logic here
return 1;
}
if ($prev_vendor == "vendor3") {
// Your logic here
return 1;
}
if ($prev_vendor == "vendor4") {
// Your logic here
return 1;
}
if ($prev_vendor == "vendor5") {
// Your logic here
return 1;
}
return 0;
}
说明:
这应该可以解决问题并允许有效的供应商名称正确通过 validate_vendor 函数。