PHP if или оператор не работает должным образом

Я пытаюсь перебрать мои переменные $ _POST и отобразить данные, которые имеют только key = lap *. Это код, который я до сих пор.

foreach($_POST as $key=>$val)
{
if($key != "time" || $key != "avgspd" || $key != "kartno")
{
echo $key . "<br>";
}
}

Результат, который это дает мне, — это

time
lap1
lap2
lap3
lap4
lap5
lap6
lap7
lap8
lap9
lap10
lap11
lap12
lap13
lap14
lap15
lap16
lap17
avgspd
kartno

Как вы можете видеть, он по-прежнему отображает ключи avgspd,kartno а также time, Странно и запутанно это, если я изменю свой код на это:

foreach($_POST as $key=>$val)
{
if($key == "time" || $key == "avgspd" || $key == "kartno")
{
echo $key . "<br>";
}
}

Я получаю это в результате:

time
avgspd
kartno

Это не имеет никакого смысла. Если я проверю, не равен ли ключ time,avgspd или же kartno он отображает все клавиши, но когда я говорю, чтобы он отображал только клавиши «время», «avgspd» или «картно», он работает как положено! Что тут происходит? Что мне нужно сделать, чтобы это исправить. Является ли какой-то более ранний код причиной ошибки? Если так, то вот мой код.

Index.php

<?php
if(!$_POST)
{
include("functions.php");
echo "<link rel='stylesheet' type='text/css' href='style.css'>";
echo "<form action='' method='POST'>";
echo "<table><tr>";
table_head("Time","lap 1","lap 2","lap 3","lap 4","lap 5","lap 6","lap 7","lap 8","lap 9","lap 10","lap 11","lap 12","lap 13","lap 14","lap 15","lap 16","lap 17","Avg Spd");
echo "</tr><tr>";
display_fields();
echo "</tr></table>";
echo "Kart Number: <input type='text' size='2' name='kartno'/><br>";
echo "<input type='submit'/>";
echo "</form>";
} else {
foreach($_POST as $key=>$val)
{
if($key == "time" || $key == "avgspd" || $key == "kartno")
{
echo $key . "<br>";
}
}
}
?>

functions.php

<?php
function table_head()
{
if ( func_num_args() > 0 )
{
$args = func_get_args();
foreach($args as $value)
{
echo "<th>" . $value . "</th>";
}
}
}


function display_fields()
{
$i = 0;
$a = 19;
$name="hi";
while($i++ < $a)
{
array_push($numbers,$i);
if($i==1)
{
$name = "time";
} else if($i > 1 && $i < 19){
$name = "lap" . strval($i-1);
} else {
$name = "avgspd";
}
echo "<td><input type='text' size='8' name='" . $name . "'/></td>";
}
}
?>

0

Решение

Я считаю, что вы ищете &&, Или я что-то упустил.

foreach($_POST as $key=>$val)
{
if($key != "time" && $key != "avgspd" && $key != "kartno")
{
echo $key . "<br>";
}
}

Вы хотите, чтобы все три условия были выполнены для печати.

Редактировать: Даже лучше! Проверьте, начинается ли это с lap, Это больше подходит для того, что вы хотите.

foreach($_POST as $key=>$val)
{
if(substr($key, 0, 3) == "lap")
{
echo $key . "<br>";
}
}
2

Другие решения

Это всегда так:

if($key != "time" || $key != "avgspd" || $key != "kartno")

Что вы имеете в виду:

if($key != "time" and $key != "avgspd" and $key != "kartno")

Вы можете переписать его на:

if(! in_array($key,array("time","avgspd","kartno")))
2

Ну вот:

foreach($_POST as $key=>$val)
{
if($key != "time" && $key != "avgspd" && $key != "kartno")
{
echo $key . "<br>";
}
}

Объяснение: Если вы поместите здесь оператор OR, он будет печататься всегда, потому что вы в основном указали своей программе напечатать его, если он отличается от «time» ИЛИ отличается от «avgspd». И «время» отличается от «avgspd», поэтому он печатает.

1
По вопросам рекламы [email protected]