PHP — Как заменить строковое значение на пользовательский ввод?

#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>