php Javascript中有关已使用或可用用户名的问题

6vl6ewon  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(100)

我有一个问题,我做了一个采取/可用的用户名状态,工作正常,但当我想禁用我的提交按钮,这是不工作,我不知道为什么,请帮助我。
HTML输入:

<input onkeyup="checkUsername()" id="username" name="username" type="text" class="form-control" value="<?php echo $row['username'] ?>" placeholder="Nom d'utilisateur" required autocomplete="off">

Javascript:

<script>
function checkUsername() {
  const username = document.getElementById("username").value;
  const xhr = new XMLHttpRequest();
  xhr.open("POST", "check_username.php", true);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
      const response = xhr.responseText;
      const usernameMessage = document.getElementById("usernameMessage");
      if (response === "Nom d'utilisateur disponible.") {
        usernameMessage.innerHTML = "<span style='color:green;'>Nom d'utilisateur disponible.</span>";
        usernameMessage.style.display = "flex";
        document.getElementById('submit-button').disabled = false;
      } else if (response === "Ce nom d'utilisateur est déjà pris.") {
        usernameMessage.innerHTML = "<span style='color:red;'>Ce nom d'utilisateur est déjà pris.</span>";
        usernameMessage.style.display = "flex";
        document.getElementById('submit-button').disabled = true;
      } else {
        // gérer d'autres réponses ici
      }
    }
  };
  xhr.send("username=" + username);
}

</script>

PHP和MySQL:

<?php
session_start();
// Connexion à la base de données
include "./config.php";

// Vérification de la connexion
if ($mysqli->connect_errno) {
    echo "Erreur de connexion à la base de données: " . $mysqli->connect_error;
    exit();
  }
  
  // Récupération du nom d'utilisateur envoyé en POST
  $username = $_GET['username'];
  
  
  // Requête SQL pour vérifier si le nom d'utilisateur est déjà pris
  $query = "SELECT COUNT(*) as count FROM users WHERE username = ?";
  $stmt = $mysqli->prepare($query);
  $stmt->bind_param("s", $username);
  $stmt->execute();
  $stmt->bind_result($count);
  $stmt->fetch();
  $stmt->close();
  
  // Vérification du résultat
  header('Content-Type: application/json');
if ($count > 0) {
  echo "<div class='usernameMessage no'>Ce nom d'utilisateur est déjà pris.</div>";
  echo "<script> document.getElementById('submit-button').disabled = true; </script>";
} else {
  echo "<div class='usernameMessage yes'>Ce nom d'utilisateur est disponible.</div>";
  echo "<script> document.getElementById('submit-button').disabled = false; </script>";
}

  // Fermeture de la connexion à la base de données
  $mysqli->close();
  ?>

<style>
    .usernameMessage {
    }

    .yes{
        color: green;
    }
    .no {
        color: red;
    }
</style>

我试着把

document.getElementById('submit-button').disabled = false;

但它不工作,也许是因为什么东西启动了我的按钮...

xdyibdwo

xdyibdwo1#

你的代码中有许多缺陷。
您在PHP代码中使用了$_GET方法,但在Javascript代码中使用了$_POST方法。PHP代码响应似乎不适合Javascript代码
下面是正确的代码

超文本标记语言

<input onkeyup="checkUsername()" id="username" name="username" type="text" class="form-control" value="<?php echo $row['username'] ?>" placeholder="Nom d'utilisateur" required autocomplete="off">
<div id="usernameMessage"></div>
<button type="submit" id="submit-button" disabled>Submit</button>

脚本语言:

function checkUsername() {
const username = document.getElementById("username").value;
const xhr = new XMLHttpRequest();
xhr.open("POST", "check_username.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
const response = JSON.parse(xhr.responseText);
const usernameMessage = document.getElementById("usernameMessage");
if (response.available) {
usernameMessage.innerHTML = "<span style='color:green;'>Nom d'utilisateur disponible.</span>";
usernameMessage.style.display = "flex";
document.getElementById('submit-button').disabled = false;
} else {
usernameMessage.innerHTML = "<span style='color:red;'>Ce nom d'utilisateur est déjà pris.</span>";
usernameMessage.style.display = "flex";
document.getElementById('submit-button').disabled = true;
}
}
};
if (username.trim() !== '') {
xhr.send("username=" + username);
}
}

PHP代码:

session_start();
// Connexion à la base de données
include "./config.php";

// Vérification de la connexion
if ($mysqli->connect_errno) {
echo json_encode(['error' => "Erreur de connexion à la base de données: " . $mysqli->connect_error]);
exit();
}

// Récupération du nom d'utilisateur envoyé en POST
if (isset($_POST['username'])) {
$username = $_POST['username'];

// Requête SQL pour vérifier si le nom d'utilisateur est déjà pris
$query = "SELECT COUNT(*) as count FROM users WHERE username = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $username);
if ($stmt->execute()) {
$stmt->bind_result($count);
$stmt->fetch();
$stmt->close();
// Vérification du résultat
if ($count > 0) {
  echo json_encode(['available' => false]);
} else {
  echo json_encode(['available' => true]);
}
} else {
echo json_encode(['error' => "Erreur lors de l'exécution de la requête SQL."]);
}
} else {
echo json_encode(['error' => "Le paramètre 'username' n'a pas été fourni."]);
}

相关问题