Задать вопрос
@smoovil

Как пофиксить баг с выводом первого значения из input?

Суть кода в игре города. При вводе первого он просто выводиться на страницу. Следующий должен проверятся с последней буквой первого введенного. Нужно чтобы сохранялось первое введенное, а оно не сохраняет и выводит все введенные только со второй.
<?php session_start(); ?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>lab5</title>
</head>
<body>
<form method="POST" >
<input name="gorod" type="textbox">
 
<input name="submit" type="submit">
<input value="chistka" type="submit" type="button" name="chistka">
</form>
  <?php
 
 if( isset($_POST["submit"]) ) {
 
 
 
 
  if(isset($_SESSION['city'])) {
  
    $last = substr($_SESSION['city'],-1);
    $first = str_split($_POST["gorod"]);
$_SESSION['prav'][] = $_POST["gorod"];
 
foreach ($_SESSION['prav'] as $value) {
if($last == $first[0]) {
  echo $value, "<br>";
}
   
  
 
}
    
    
    if($last == $first[0]) {
     
      echo $_POST["gorod"]." Верно";
      $_SESSION['city'] = $_POST["gorod"];
  
      
    } else {
      echo "error";
    }
  }else{
    $_SESSION['city'] = $_POST["gorod"];
    echo $_SESSION['city']. " ". "первый раз";
  }
 
 }
if(isset($_POST["chistka"])) {
  session_destroy();
}
  ?>
</body>
</html>


65bd0bdf10466960050088.png
65bd0be5755ec044854655.png
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Первый город тоже надо ложить в $_SESSION['prav']

$_SESSION['city'] = $_POST["gorod"];
echo $_SESSION['city']." "."первый раз";
        
$_SESSION['prav'][] = $_POST["gorod"]; // <--
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@DooX
А можно эту игруху замутить и без php а JS и использовать локалстор, смысл?? только если что то нужно хранить историю действий.
а если это сетевая игра, то тогда есть такая штука как вебсокет и тогда все эти конструкции из иф не нужны

делаешь просто открываешь соеденение вебсокет , в этой сессии ты создаешь массив и при каждом отправлении ты вначале полученое слово:
1. приводишь к общему регистру
пример:
$wordsArray = [города]
$wordToSearch = "город";
$lowercaseWordToSearch = strtolower($wordToSearch);

$minSimilarity = 80; // Процент сходства, который считается достаточным так как человек же мог ошибиться в названии города, и ещё бы я составил бы массив сокращенных названий городов. слово питер, санкт-петербург, ёбург и т д  
foreach ($wordsArray as $word) {
    similar_text($word, $wordToSearch, $similarity);

    if ($similarity >= $minSimilarity) {
        echo "Город такой уже назвали: $word\n";
        break;
    }
}
Потом уже ты запускаешь проверку
$firstLetter = substr($wordToSearch, 0, 1);
или ещё короче
$firstLetter = $wordToSearch[0];
получаешь последнее слово(город) в массиве
$lastElement = end($wordsArray);
$lastLetter = $lastElement[strlen($lastElement) - 1];
ну и сравниваешь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы