2014-09-05 129 views
0

J'essaye de soumettre des données d'un formulaire HTML à PHP pour être sauvé dans la base de données mysql. Je l'avais déjà fait et pour une raison quelconque, ça ne marche pas, il me manque quelque chose.Formulaire Soumettre à PHP

C'est la page Inscription

<form action="reg.php" method="POST"> 
     <table > 
      <tr> 
       <td>Email :</td> 
       <td><input name="Email" type="text" /></td> 
      </tr> 
      <tr> 
       <td>Password :</td> 
       <td><input name="Password" type="password" /></td> 
      </tr> 
      <tr> 
       <td> </td> 
       <td><input type="submit" name="submit" value="Submit"> </td> 
      </tr> 


     </table> 
    </form> 

C'est le reg.php

<?php 

include_once("db.php"); 

$SQL = "INSERT INTO users (Email, Password ) VALUES ('".$_GET["Email"]."','". $_GET['Password'] ."')";  

mysql_query($SQL); 
error_reporting(E_ALL); 
?> 

Et c'est le db.php

<?php 

$MyUsername = "root"; 
$MyPassword = ""; 
$MyHostname = "localhost";  

$dbh = mysql_pconnect($MyHostname , $MyUsername, $MyPassword); 
$selected = mysql_select_db("dbName",$dbh); 
?> 

Si je cours

localhost/[email protected] & Mot de passe = 123456

Il fonctionne et ces valeurs sont présentées dans la base de données, je dois manquer quelque chose dans la page du registre.

Il pourrait être une erreur stupide comme Im nouveau à PHP.

Merci à l'avance

+0

essayez 'INSERT INTO utilisateurs (\' Email \ ', \' passe \ ')' – Sunand

+4

S'il vous plaît *** *** S'IL VOUS PLAÎT cesser d'utiliser ' mysql_ * 'est une extension dangereuse, ancienne, imparfaite, non maintenue et (donc) _deprecated_. Apprenez à utiliser 'mysqli_ *' ou 'PDO' à la place. Et utilisez _prepared statements_. Ce code est à peu près aussi dangereux que possible (attaques par injection de google). Aussi: n'utilisez pas mysql_pconnect. Les connexions persistantes peuvent (et si vous apprenez toujours) vous mordre –

+0

de toute façon vous devez faire une demande de publication, des valeurs d'échappement telles que 'VALUES (' ".mysql_real_escape_string ($ _ POST [" Email "])." ',' " ' – Sunand

Répondre

2

Vous devez utiliser $ _POST au lieu de $ _GET

.$_GET["Email"]."','". $_GET['Password'] ."')";  

devrait être

.$_POST["Email"]."','". $_POST['Password'] ."')"; 

Lorsque vous tapez l'URL, qui est une requête GET c'est pourquoi ça marche. Vous devriez vraiment POST un formulaire, car un GET transmettra les variables dans la chaîne de requête, et sera visible. Un champ de mot de passe est toujours en texte brut lorsqu'il est transmis. Comme nous l'avons déjà mentionné, vous utilisez des méthodes obsolètes pour parler à la base de données et vous vous exposez à l'injection SQL. Jetez un oeil à AOP http://php.net/manual/en/book.pdo.php


Use mysqli with prepared statements ou PDO with prepared statements

Pensez également à utiliser la fonction de CRYPT_BLOWFISH ou PHP 5.5 password_hash() pour le stockage des mots de passe.

Pour PHP < 5.5 utilisez le password_hash() compatibility pack.

Le stockage de ce qui semble être fait en texte brut n'est pas sûr.

+0

Je choisis le vôtre comme réponse parce que vous m'a dirigé vers une méthode plus sûre PDO, que je ont maintenant utilisé. Le problème avec le code précédent était que j'avais une étiquette de forme ouverte que j'ai copiée et collée pour obtenir une partie d'un modèle d'une autre page. :/Maintenant, je devrais le faire avec des déclarations préparées. – drinu16

1

Vous faites une erreur avec la méthode de forme, changer

<form action="reg.php" method="POST"> 

à

<form action="reg.php" method="GET"> 

Si vous souhaitez continuer à utiliser la méthode POST utilisation

$SQL = "INSERT INTO users (Email, Password ) VALUES ('".$_POST["Email"]."','". $_POST['Password'] ."')"; 
+0

Bien que vous soyez * techniquement * correct, il serait en fait un * bit * plus sûr si OP utilisait POST au lieu de GET, étant donné qu'il passe un mot de passe via un formulaire/méthode déjà dangereux. –

+1

Oui! merci, je vais l'éditer –

+0

De rien. Faites-le comme une édition bien que pour décrire les erreurs d'OP. –

0

vous debug code et vérifiez l'erreur, vous obtiendrez des données dans $ _POST dans reg.php.print_r ($ _ POST) sur votre fichier reg.php vous obtiendrez les données

Questions connexes