#php #html
Вопрос:
Может ли кто-нибудь помочь мне понять, как заменить определенное строковое значение значением, введенным пользователем? Я совсем новичок в программировании на PHP и не смог найти ответа. Я видел много способов заменить строку в Интернете с помощью встроенных функций или в массивах, но я не смог найти правильный ответ на свой вопрос.
Вот мой код:
$text = "Not found";
if ( isset($_GET['user'])) {
$user_input = $_GET['user'];
}
// отсюда я попытался заменить значение $text на ввод пользователем, но это не работает.
$raw = TRUE;
$spec_char = "";
if ($raw) {
$raw = htmlentities($text);
echo "<p style='font-style:bold;'> PIN " . $raw . "</p>"; *# displays "Not found"*
} elseif (!$raw == TRUE ) {
$spec_char = htmlspecialchars($user_input);
echo "<p>PIN $spec_char </p>";
}
<form>
<input type="text" name="user" size="40" />
<input type="submit" value="User_val"/>
</form>
Я ценю ваши ответы.
Комментарии:
1. Измените
elseif (!$raw == TRUE )
на простоelse
2. Насколько я вижу, в вашем коде нет связи между $text и $user_input. Где вы ожидаете, что произойдет замена?? $raw всегда истинно , поэтому оно всегда будет входить в
if
, а не вelse
. Все это, кажется, не имеет особого смысла3. @ADyson Да, вы правы. Я ожидал замены в elseif(), но она не работает.
4.
I expected the replacement in elseif(),
…почему именно? Я думаю, что вы, возможно, неправильно поняли, как работает if/else. Если он удовлетворяет первому условию и входит вif
блок, то он даже не смотрит на другие, а также $raw всегда был верен, поэтому он никогда не сможет попасть в другой блок.5. @ADyson, Точно. Это также было сказано Тигрой ниже, и он подробно объяснил. Спасибо, что заметили.
Ответ №1:
Давайте пробежимся по вашему коду, строка за строкой.
// Set a default value for $text
$text = "Not found";
// Check if a value has been set...
if (isset($_GET['user'])) {
// But then create a new var with that value.
// Why? Are you going to change it?
$user_input = $_GET['user'];
}
// Define a few vars
$raw = TRUE;
$spec_char = "";
// This next line is useless - Why? Because $raw is always true.
// A better test would be to check for $user_input or do the
// isset() check here instead.
if ($raw) {
// Basic sanity check, but $text is always going to be
// "Not found" - as you have never changed it.
$raw = htmlentities($text);
// render some HTML - but as you said, always going to display
// "Not found"
echo "<p style='font-style:bold;'> PIN " . $raw . "</p>";
} elseif (!$raw == TRUE ) {
// This code is never reached.
$spec_char = htmlspecialchars($user_input);
echo "<p>PIN $spec_char </p>";
}
// I have no idea what this HTML is for really.
// Guessing this is your "input" values.
<form>
<input type="text" name="user" size="40" />
<input type="submit" value="User_val"/>
</form>
Просто предположение, я думаю, что ты действительно хотел сделать что-то большее, как это:
<?php
// Check if a value has been posted...
if (isset($_POST['user'])) {
// render some HTML
echo '<p style="font-style:bold"> PIN '.htmlspecialchars($_POST['user']).'</p>';
}
?>
<form method="post" action="?">
<input type="text" name="user" size="40" />
<input type="submit" value="User_val"/>
</form>