2017-03-19 1 views
0

Je suis un novice quand il s'agit de PHP. J'essaie de créer une page Web de connexion et de déconnexion. Maintenant, j'ai créé une page qui ajouterait des enregistrements. Mon code renvoie toujours 1 à partir du formulaire que j'ai construit, quelle que soit la valeur dans le formulaire. Mon code-La valeur isset renvoie toujours 1

<?php 
    $servername = "localhost"; 
    $username = "username"; 
    $password = "password"; 
    $alpha = isset($_GET["username"]); 
    $beta = isset($_GET["password"]); 
    $gama = isset($_GET["hobby"]); 
    // Create connection 
    $conn = mysqli_connect("localhost","root" ,"","member"); 

    // Check connection 
    if (!$conn) { 
     die("Connection failed: " . mysqli_connect_error()); 
    } 

    $sql = "INSERT INTO data (username,password,hobby) 
     VALUES ($alpha, $beta, $gama)"; 

    if ($conn->query($sql)=== TRUE) { 
     echo $alpha."Your record is added into our database "; 
    } else { 
     echo $sql.$conn->error; 
    }           
?> 

Et voici ma forme:

<form action="add.php"> 
    <table> 
    <tr> 
     <td>Username :</td> <td><input type="text" name="username"></td> 
    </tr> 
    <tr>  
     <td>Password :</td> <td><input type="text" name="username"></td> 
    </tr> 
    <tr> 
     <td>Hobbies:</td> <td><textarea name="hobby" id="hobby" cols="22" rows="7"></textarea></td> 
    </tr> 
    <tr> 
     <td> </td><td><input type="submit" name="submit"></td> 
    </tr> 

    </table> 
</form> 
+1

caisse [opérateur ternaire] (http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary) et votre code est vulnérable aux injections sql; – hassan

Répondre

1

Cela arrive parce que isset() retourne une valeur booléenne.

Si vous souhaitez imprimer directement le champ username vous pouvez juste:

if(isset($_GET["username"])) { 
    echo $_GET["username"]; 
} 

Vous devez donc comprendre que les variables $alpha, $beta, $gamma ne tiennent pas la chaîne réelle que vous attendez, mais une valeur booléenne

Voir plus: http://php.net/manual/en/function.isset.php

+0

Ceci est correct. Notez également qu'il est extrêmement dangereux d'essayer d'insérer des données utilisateur par requête directe comme celle-ci. S'il vous plaît rechercher sur les sujets d'attaques par injection SQL et PDO – Christopher

+0

Vous avez absolument raison. Mais la question concerne le comportement d'isset. – Nikitas

-1

Son parce que les contrôles de la fonction isset() si la clé dans un tableau est défini ou non elle ne présente pas vérifie si la valeur est défini ou non. Dans ton cas; Lorsque vous publiez votre formulaire dans l'action, le tableau POST contient toutes les clés et renvoie donc 1 comme d'habitude. Je pense que vous devez jeter un oeil à la fonction php vide(). Ou vous pouvez utiliser le mélange de isset() et empty().

http://php.net/manual/en/function.empty.php

+0

OP aura le même problème car il utilise le résultat booléen comme données à insérer. – Christopher