Php 菲律宾元邮政发行

Php 菲律宾元邮政发行,php,Php,我一直在努力解决这个问题一个小时左右,它似乎是基本的,但我似乎无法找到它的底部。我在这里要做的是用mysql数据库中的内容创建一个块5次 这很好,但我真正的问题是当我尝试回显错误消息时。我在后面有一个IF,用于检查$u POST['champ5v5name[1-5]']是否为其默认值。如果是,它应该回显一条错误消息,说“选择你的冠军!”,但它没有(它只是进入下一页,好像它成功了一样)。我试过各种不同的方法,但都不管用,有人能帮我一下吗 for($i=1;$i<=5;$i++) {

我一直在努力解决这个问题一个小时左右,它似乎是基本的,但我似乎无法找到它的底部。我在这里要做的是用mysql数据库中的内容创建一个块5次

这很好,但我真正的问题是当我尝试回显错误消息时。我在后面有一个IF,用于检查$u POST['champ5v5name[1-5]']是否为其默认值。如果是,它应该回显一条错误消息,说“选择你的冠军!”,但它没有(它只是进入下一页,好像它成功了一样)。我试过各种不同的方法,但都不管用,有人能帮我一下吗

for($i=1;$i<=5;$i++) {
    $result = mysql_query("SELECT name,health,damage,armour,aspeed FROM champions");
    $htmltext .= '<label>Champion '.$i.'</label><br/>';
    $htmltext .=  '<select name="champ5v5name'.$i.'">';
    $htmltext .= '<option value="select'.$i.'">Select champion:</option>';
}
while($rowschamp = mysql_fetch_array($result,MYSQL_NUM)) {
    $htmltext .= '<option value="'.$rowschamp[0].'">'.$rowschamp[0].' (HP: '.$rowschamp[1].' DMG: '.$rowschamp[2].' ARMOUR: '.$rowschamp[3].' ASPEED: '.$rowschamp[4].')</option>';
}
$htmltext .= '</select><br/><br/>';

if($_POST['champ5v5name1'] != 'Select champion:' || $_POST['champ5v5name2'] != 'Select champion:' || $_POST['champ5v5name3'] != 'Select champion:' || $_POST['champ5v5name4'] != 'Select champion:' || $_POST['champ5v5name5'] != 'Select champion:') {
    if($_POST['champ5v5name1'] == $_POST['champ5v5name2'] || $_POST['champ5v5name1'] == $_POST['champ5v5name3'] || $_POST['champ5v5name1'] == $_POST['champ5v5name4'] || $_POST['champ5v5name1'] == $_POST['champ5v5name5']) $error = 'A champion is repeated.';
    if($_POST['champ5v5name2'] == $_POST['champ5v5name3'] || $_POST['champ5v5name2'] == $_POST['champ5v5name4'] || $_POST['champ5v5name2'] == $_POST['champ5v5name5'] || $_POST['champ5v5name2'] == $_POST['champ5v5name1']) $error = 'A champion is repeated.';
    if($_POST['champ5v5name3'] == $_POST['champ5v5name2'] || $_POST['champ5v5name3'] == $_POST['champ5v5name4'] || $_POST['champ5v5name3'] == $_POST['champ5v5name5'] || $_POST['champ5v5name3'] == $_POST['champ5v5name1']) $error = 'A champion is repeated.';
    if($_POST['champ5v5name4'] == $_POST['champ5v5name2'] || $_POST['champ5v5name4'] == $_POST['champ5v5name3'] || $_POST['champ5v5name4'] == $_POST['champ5v5name5'] || $_POST['champ5v5name4'] == $_POST['champ5v5name1']) $error = 'A champion is repeated.';
    if($_POST['champ5v5name5'] == $_POST['champ5v5name2'] || $_POST['champ5v5name5'] == $_POST['champ5v5name3'] || $_POST['champ5v5name5'] == $_POST['champ5v5name4'] || $_POST['champ5v5name5'] == $_POST['champ5v5name1']) $error = 'A champion is repeated.';
}
else {
    $error = 'Choose your champions!';
}

for($i=1;$i您是否检查所有冠军是默认的,还是任何冠军都是默认的

你的情况是:

$_POST['champ5v5name1'] != 'Select champion:' ||
$_POST['champ5v5name2'] != 'Select champion:' ||
$_POST['champ5v5name3'] != 'Select champion:' ||
$_POST['champ5v5name4'] != 'Select champion:' ||
$_POST['champ5v5name5'] != 'Select champion:'
如果你想买的话,应该是

$_POST['champ5v5name1'] != 'Select champion:' &&
$_POST['champ5v5name2'] != 'Select champion:' &&
$_POST['champ5v5name3'] != 'Select champion:' &&
$_POST['champ5v5name4'] != 'Select champion:' &&
$_POST['champ5v5name5'] != 'Select champion:'

编辑: 问题是表单提交的值是
select$i
,而不是
select champion:


编辑2: 您应该使用PHP的表单数组功能:

for($i = 1; $i <= 5; $i++) {
    $result = mysql_query("SELECT name,health,damage,armour,aspeed FROM champions");
    $htmltext .= '<label>Champion '.$i.'</label><br/>';

    $htmltext .= '<select name="champ5v5name[]">';
    #Field names ending in `[]` turn into arrays!

    $htmltext .= '<option value="">Select champion:</option>';
    while($rowschamp = mysql_fetch_array($result, MYSQL_NUM)) {
        $htmltext .= '<option value="'.$rowschamp[0].'">'.$rowschamp[0].' (HP: '.$rowschamp[1].' DMG: '.$rowschamp[2].' ARMOUR: '.$rowschamp[3].' ASPEED: '.$rowschamp[4].')</option>';
    }
    $htmltext .= '</select><br /><br />';
}

$champions = $_POST['champ5v5name'];

$error = "No champions chosen!";
for($champions as $champion) {
    if($champion) {
        $error = "";
        break;
    }
}
if(!$error && count($array) != count(array_unique($champions))) {
    $error = "A champion is repeated"
}

对于($i=1;$i您所做的只是将一个字符串赋给一个变量,并且您正在设置一个错误,无论您的条件是
true
还是
false
。如果出现错误,我看不到执行任何特定任务的逻辑

也就是说,你真的需要简化事情:

try {
    $champions = array();
    $error     = null;
    for ($i = 1; $i < 6; $i++){
        $champions[] = $_POST['champ5v5name' . $i];
    }
    $dups      = array_count_values($champions);
    rsort($dups);

    // Check for missed assignments, assuming no champions have the word 'select' in their name
    if(in_array('select',$champions)){
        $error = 'Choose your champions!';
    }

    // Check for duplicate champs
    if($dups[0] != 1){
        $error = 'Champion Repeated!';
    }

    if($error){
        throw new Exception($error);
    }
}
catch (Exception $e) {
    echo $e->getMessage();
    exit(); // Probably don't exit, just show the form again.
}

// Do other stuff, everything is ok if the code gets here...
试试看{
$champions=array();
$error=null;
对于($i=1;$i<6;$i++){
$champions[]=$_POST['champ5v5name.$i];
}
$dups=数组\计数\值($champions);
rsort($DUP);
//检查遗漏的作业,假设没有冠军在他们的名字中有“选择”这个词
if(在_数组中('select',$champions)){
$error='选择您的冠军!';
}
//检查是否有重复的CHAMP
如果($dups[0]!=1){
$error='Champion Repeated!';
}
如果($error){
抛出新异常($error);
}
}
捕获(例外$e){
echo$e->getMessage();
exit();//可能不退出,只需再次显示表单即可。
}
//做其他事情,一切都好,如果代码到了这里。。。

不会在
$\u POST
中翻译成
“champ5v5name1”
“champ5v5name2”
等。@yotsubaned:是的,会。问题是您的代码在查找
“select1”时正在检查
“selectchampion”
的值
。这解决了我的问题,也解决了一些问题。我仍在学习,非常感谢你的建议。当然,兄弟,很高兴能帮上忙:)你的失败也是一样的。问题是将
“选择冠军:”
,选项文本和
“选择1”
,选项值混淆起来。+1因为有人无缘无故投了反对票。