2010-08-04 6 views
1

Quelqu'un peut-il me conseiller si je joue correctement les étapes ci-dessous:

Lorsqu'un utilisateur souhaite enregistrer sur le site, register.php poignées son/sa demande Ci-dessous est une partie du code de register.php:

$sql="INSERT INTO Members (fldFullName, fldEmail, Password, Gender, DOB) 
VALUES 
('$fname','$email','$pass', '$gender', '$date')"; 

En particulier quand j'ai écrit le code ci-dessus, j'étais un peu nouveau pour PHP/MySQL et je suis encore. Par conséquent, j'ai fait tous les champs ci-dessus manuellement dans le tableau via phpmyadmin. En outre, j'ai également ajouté le champ ID manuellement via phpmyadmin, en tant que premier champ avec incrément automatique et clé primaire bien sûr. Pourquoi je l'ai fait manuellement, je ne me souviens pas de la raison de. Mais je suis sûr que c'est peut-être la raison pour laquelle j'ai des problèmes. Ce que j'essaye de faire est, quand un utilisateur s'inscrit sur le site Web, je veux créer une URL de profil pour lui/elle. Par exemple, le champ de la table peut être nommé ProfileURL, tandis que la valeur réelle peut être http://www.domain.com/profile.php?id=1, où le id est hérité du ID réel dans la table. Comment puis-je faire cela avec mon code ci-dessus? Ai-je fait quelque chose de mal quand j'ai décidé de sauvegarder tous les champs manuellement via phpmyadmin? Note: J'ai également créé des tables, des bases de données, des champs manuellement via phpmyadmin. Cependant, ses valeurs sont INSERT automatiquement, bien sûr. Suis-je même sur la bonne voie?

Merci.

Répondre

1

Comme indiqué ci-dessus, vous n'avez pas besoin d'enregistrer une URL de profil dans la base de données. Je suppose que toutes les URL de profil suivront un formulaire standard (par exemple www.example.com/profile.php?id=1)? Eh bien, si vous avez sauvegardé tous ceux dans votre base de données et que vous avez décidé de changer le format en quelque chose comme www.example.com/profile/1, vous aurez beaucoup de données obsolètes dans votre base de données. Vous allez devoir parcourir chaque enregistrement et le mettre à jour, et cela pourrait être dangereux sur une table de base de données avec, disons, des millions de lignes.Par conséquent, la solution consiste à avoir un script qui prend un paramètre. Dites profile.php. Comme ci-dessus, vous vérifiez le profil en utilisant les données du tableau $_GET:

<?php 
if (isset($_GET['id'])) { 
    $id = mysql_real_escape_string($_GET['id']); 
    $sql = "SELECT * FROM members WHERE id = '$id' LIMIT 1"; 
    $res = mysql_query($sql); 
    if (mysql_num_rows() > 0) { 
     $member = mysql_fetch_object($res); 
     // handle displaying of member's profile here 
    } 
    else { 
     // member does not exist with ID 
    } 
} 
?> 

De cette façon, si vous décidez de changer le nom du script ou utiliser des URL de moteur de recherche convivial, vous n'avez pas besoin de changer votre structure de base de données.

+0

Merci Martin et tout. –

1

En profile.php, vérifiez $_GET['id'], alors si elle existe, utilisez une requête SELECT pour la même ID dans la base de données. Cela ressemblerait à quelque chose comme ça.

<?php 
if (isset($_GET['id'])) 
{ 
    $id = (int) $_GET['id']; 
    $sql = 'SELECT * FROM Members WHERE ID = ' . $id; 

    // Then the rest of the code to check the results goes here 
} 
?> 

Un utilisateur avec un identifiant de 1 serait profile.php?id=1

1

Vous faites bien. Maintenant, écrivez SQL comme ceci:

$sql = sprintf("SELECT * FROM Members WHERE ID=%d", mysql_real_escape_string($_GET['id'])); 

Et vous serez en mesure d'obtenir par userdata $ _GET [ 'id']. N'oubliez pas d'utiliser mysql_real_escape_string pour protéger vos requêtes contre l'injection SQL. sprintf est également une bonne chose pour substituer les types de données justes comme les nombres ou les chaînes.

+0

Qu'est-ce que mysql_real_escape_string ici? –

+0

Pour échapper la valeur et la rendre sûre pour la requête, bien que la fonction 'sprintf()' vérifie automatiquement si le paramètre était un chiffre ou non basé sur le délimiteur '% d'. –

+0

@col. shrapnel pour empêcher les attaques par injection SQL. Depuis l'utilisation de index.php? Id = 1 et en se basant sur $ _GET ['id'] = 1 comme valeur, qu'est-ce qui empêche un utilisateur du site de changer? Id = 1 en quelque chose de malveillant. Voir: http://unixwiz.net/techtips/sql-injection.html – Chris

1

Vous ne tenez pas compte de l'URL du profil.
Vous devez le construire dynamiquement.
Parce que la plupart de l'URL reste le samy, seul l'identifiant change.
Donc, récupérez l'ID de la base de données et ajoutez-le à l'URL.

Questions connexes