Estoy trabajando en un proyecto en php/MySQL que me obliga a comprobar el nombre de usuario en tiempo real significa que a medida que el usuario introduce el nombre de usuario.

Este es mi username.php donde el usuario introduce el nombre de usuario & contraseña y de donde el check.php se activa…

<html>
<head>
   <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>

   <script type="text/javascript">

     $(document).ready(function(){
        $("#username").change(function(){
             $("#message").html("<img src='images/loader.gif' /> checking...");


        var username = $("#username").val();

          $.ajax({
                type:"post",
                url:"check.php",
                data:"username =" + username,
                    success:function(data){
                    if(data==0){
                        $("#message").html("<img src='images/tick.png' /><span style='font-size:13px; color: black'> Username available</span>");
                    }
                    else{
                        $("#message").html("<img src='images/err.png' /><span style=font-size:13px; color: red'> Username already taken</span>");
                    }
                }
             });

        });

     });

   </script>
   </head>

   <body>

   <table>
    <tr>
          <td>Username</td>
          <td>:</td>
          <td><input type="text" name="username" id="username"/><td>
            <td id="message"><td>
    </tr>

    <tr>
          <td>Password</td>
          <td>:</td>
          <td><input type="text" name="password" id="password" /><td>
    </tr>
   </table>
   </body>
   </html>

Este es el check.php donde el nombre de usuario se comprueba en la base de datos.

<?php

$con = mysqli_connect("localhost", "root", "hilbi", "userdb");

if (mysqli_connect_errno())
{

  echo "Failed to connect to MySQL: " . mysqli_connect_error();

}

  //$username = $_POST["username"];

  $username = 'hilbi';

  $query = mysqli_query($con,"SELECT * FROM users WHERE username =   '$username' ");

  $find = mysqli_num_rows($query);

  echo $find;

  mysqli_close($con);

  ?>

Ahora la check.php está funcionando bien (que he comprobado a través de la ejecución de solos y devuelve 1 en encontrar el nombre de usuario y viceversa)

Sin embargo, cuando ejecuto el username.php siempre devuelve nombre de Usuario ya ha tomado. Parece que en realidad no busca en la base de datos donde en realidad no hay tal nombre de usuario.

Cualquier tipo de ayuda será muy apreciada…

  • Va a enviar nombre de usuario incorrecto
  • trate de añadir alert(datos); dentro de ur éxito de la función de devolución de llamada, así que usted puede ver lo que se está regresó de php
  • M Sí, tuve que cambiar a una estática nombre de usuario después de la dinámica no estaba trabajando sólo para asegurarse de que la consulta está trabajando.
InformationsquelleAutor echology | 2016-03-06

3 Comentarios

  1. 5

    Enviar sus datos en javascript usando jQuery como este:

    $.post( "check.php", { user: $("#username").val() }, function (data){
      if(data=='1'){
       //do 1
      }
      elseif(data=='0'){
        //do 0
      }
    });

    En su check.php nombre de usuario como este

    //some basic validation
    if(!isset($_POST['user'] || empty($_POST['user']))
    {
       echo '0'; exit();
    }
    
    $username = trim($_POST['user']); 

    Para que esto funcione correctamente usted check.php debe devolver un 1 o un 0, no echo de errores de mysql hay o lo que sea. en caso de cualquier error se producen, sólo echo 0.

    • Se señaló el problema correcto y se dio a la solución correcta. gracias.
    • me alegro de que podría ser de ayuda, jquery es la bestia cuando usted sabe cómo manejarlo.
    • Exactamente. Una bestia cuando usted no puede encontrar una solución a un problema. Mejor cuando en realidad se encuentra. 🙂
    • Sé que esto está ordenado, pero una pequeña sugerencia, con su consulta de selección para comprobar si el usuario existe, no usar «SELECT*», sino sólo «SELECT id», es más rápido y menos estrés en la base de datos. También puedes agregar «LÍMITE de 1» para el final, porque una vez que has encontrado uno que te haga saber que el nombre de usuario existe y no hay necesidad de buscar más.
  2. 0

    Que usted necesita para pasar $variable username correctamente.

    Comillas simples php vars se tratan como cadenas simples y variables no evaluadas.

    $query = mysqli_query($con,"SELECT * FROM users WHERE username = " .  $username . ";");

    O

    $query = mysqli_query($con,"SELECT * FROM users WHERE username = {$username}");
    • gracias por tu respuesta, sin embargo este no parece ser el problema ya que la consulta devuelve un valor booleano.
    • Él es el uso de comillas dobles y su código PHP funciona bien. Mientras que el código hace esta consulta fallar.
  3. -1

    soo pasé algún tiempo buscando, y pruebas de respuesta, por lo que debe, ha publicado los resultados de mi y lo que funciona para mí..

    html, or php form:
    <script src="http://code.jquery.com/jquery-3.3.1.js"></script>
    <form class="a16" action="register.php" method="POST" autocomplete="on">
    <label for="userName" class=" ">Użytkownik:</label>
    <input type="text" name="userName" placeholder="Username" id="userName1" onBlur="checkAvailability()">
    <span id="user-availability-status"></span> 
    <p><img src="LoaderIcon.gif" id="loaderIcon" style="display:none" /></p>
    <script type="text/javascript">     
    function checkAvailability() {
    $("#loaderIcon").show();
    jQuery.ajax({
    url: "proceser.php",
    data:'userName='+$("#userName1").val(),
    type: "POST",
    success:function(data){
    $("#user-availability-status").html(data);
    $("#loaderIcon").hide();
    },
    error:function (){}
    });
    }
    </script>
    and proceser.php :
    <?php
    include 'dbconnect.php';   //standard datebase local connection..
    if(isset($_POST['userName']) && $_POST['userName']!="") {
    if ($stmt = $con->prepare('SELECT userName FROM users WHERE userName = ?')) {
    $stmt->bind_param('s', $_POST['userName']);
    $stmt->execute();
    $stmt->store_result();
    $numRows = $stmt->num_rows;
    if ($numRows > 0) {
    echo "<span class=''> Username Not Available.</span>";
    } else {
    echo "<span class=''> Username Available.</span>";
    }
    }
    }
    $con->close();
    ob_end_flush();
    ?>
    Thank you!:)
    • Se podría mejorar esta respuesta explicando lo que está pasando en el código como se opuso a pegar un gran bloque de código que es difícil de leer y se relacionan con la pregunta.

Dejar respuesta

Please enter your comment!
Please enter your name here