Отображение логической ошибки состоит в том, что английское слово, имеющее большее значение, отображается следующим образом:
English word: lie (1)
Definition: not honest
English word: lie (1)
Definition: deliberately say something untrue
English word: lie (2)
Definition: to stretch out on a surface that is slanted or horizontal
English word: lie (2)
Definition: to be positioned on and supported by a horizontal surface
Я хочу, чтобы вывод отображался следующим образом:
English word: lie (1)
Definition: 1. not honest
2. deliberately say something untrue
Если у него есть одно и то же слово с разным значением, это должен быть выход:
English word: lie (1)
Definition: 1. not honest
2. deliberately say something untrue
English word: lie (2)
Definition: 1. to stretch out on a surface that is slanted or horizontal
2. to be positioned on and supported by a horizontal surface
Вот мой код:
<?php
$search = $_POST['word'];
$query = "SELECT *" .
" FROM english, english_meaning, maranao, filipino, translate".
" WHERE english.eng_id = english_meaning.eng_id and english.eng_id = translate.eng_id and maranao.mar_id = translate.mar_id and filipino.fil_id = translate.fil_id and english.english_word like '$search%'";
$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);
if($num_rows==0)
{
echo "No Results Found. Please try again";
}
while($row=mysql_fetch_array($result))
{
?>
<div style = " background-color: #daeaff; border-radius: 10px; padding: 15px;">
<font size='3' face='Times New Roman'>
English word: <b><?php echo $row['english_word']; ?></b><br>
Definition:<b><div style="width:600px; border:0px solid orange; margin-left: 79px; word-wrap:break-word; margin-top: -18px;"><?php echo $row['definition'] ?></b></div>
</font>
</div>
<?php echo "<br>"; ?>
<?php
}
}
mysql_close($con);
?>
Несколько примечаний к коду:
Он подвержен SQL-инъекции. Вы должны прекратить использовать функции
mysql_*
, они устарели и заменяют ихmsqli_*
/PDO и параметризованными запросами.HTML также нуждается в улучшении: у вас не должно быть кросс-тегов (например:
<b><div>...</b></div>
) и избегать устаревших тегов, которые больше не поддерживаются в HTML5 (например:<font>
).
Вы могли бы достичь того, чего хотите, отслеживая предыдущее слово, а затем отображая всю информацию или только ее часть. Что-то вроде этого (в псевдокоде):
previous_word
на "".previous_word
словом. previous_word
со значением текущего слова.Изменив код из вашего вопроса, результат будет выглядеть так (только часть цикла):
// AM - variable that will hold the previous word
$previous_word = "";
$row = 0;
while($row = mysql_fetch_array($result))
{
// AM - Show the word only if it a new one
if ($row["english_word"] != $previous_word) {
// AM - close the previous word definition
if ($row > 0) { echo "</div><br>"; }
?>
<div style = " background-color: #daeaff; border-radius: 10px; padding: 15px; font-family:'Times New Roman'; font-size:3;">
English word: <b><?php echo $row['english_word']; ?></b><br>
Filipino word: <b><?php echo $row['filipino_word']; ?></b><br>
Maranao word: <b><i><?php echo $row['maranao_word']; ?></i></b><br>
Definition:
<?php
}
?>
<div style="width:600px; border:0px solid orange; margin-left: 79px; word-wrap:break-word; margin-top: -18px;"><b><?php echo $row['definition'] ?></b></div>
<?php
// AM - Update the previous word and the row count
$previous_word = $row["english_word"];
$row++;
}
// AM - close the last word definition
if ($row > 0) { echo "</div><br>"; }
<br>
должен идти после каждого слова, правильно? Я обновлю ответ с этим, и если это - другое, тогда оставьте мне комментарий, и я рассмотрю это. Идея заключалась бы в том, чтобы поставить его после закрытия </div>