Facile INSCRIPTION en PHP avec MySQL


Je vais d'abord expliquer ce que ce tutoriel est de vous aider à faire rejoindre et comment voir le processus. Ensuite, je vais vous montrer un exemple de code, et enfin déterrer tout avec mes exemples.

Ce tutoriel est pour PHP et MySQL. Je ne suis pas versé dans tout autre environnement de base de données de sorte que peut ou ne pas être semblable à d'autres logiciels de MySQL. Cela peut rendre le code moins utilisable, mais même si vous ne pouvez pas utiliser le code le reste de ce guide peut vous aider à voir exactement ce qui se passe et comment réaliser ce que vous voulez vous assurer qu'il peut en théorie être utile pour d'autres langues et bases de données.




Le problème

JOIN peut aider à sauver la base de données à gonfler, ce qui est toujours une bonne chose pour éviter ... surtout si le serveur Web hôte impose un quota de disque (que la plupart des les gratuits font et certains de ceux qui sont payés pour les paquets de bas de gamme) , qui comprennent généralement les données enregistrées dans toutes les bases de données. Notez que ce ne sera pas diminuer la largeur de bande que la même quantité de données est envoyé à partir du serveur vers le navigateur du client. Comme il aide à éliminer le ballonnement sera discuté dans la prochaine section.

Utilisation d'une table de jointure vous permettra d'utiliser le plus grand nombre de colonnes d'une table que le script a besoin, mais aussi de tirer colonnes liées d'une autre table comme vous le feriez utiliser les colonnes de la première table.

Notez qu'il existe plusieurs types de joint et cela va vous montrer comment faire le plus simple, mais il peut aider à donner une meilleure compréhension du processus que vous pouvez descendre pour aider à rendre l'apprentissage des autres types de jointures plus facile.

Le programme d'installation

Maintenant, pour une application dans le monde réel ... imaginez que vous programmez un système qui permettra de créer des pages dynamiques. Le script génère «pages» sur la volée en tirant les données que vous souhaitez afficher sur le de la base de données et ensuite de l'impression/données écho qui crée une page Web standard dans le navigateur client. Maintenant, pour obtenir d'autres personnes impliquées vous voulez offrir une fonctionnalité de commentaire que les gens qui lisent la page peuvent commenter.

Maintenant, imaginez que vous avez déjà un système de profil avec sa propre base de données où un utilisateur peut enregistrer un chemin ou l'URL d'une image à utiliser comme leur icône/avatar sur leur profil, et partout où vous publiez quelque chose sur le site.

Voici un set-up possible pour les page_comments de table:

  1. Comment_id - Ce sera probablement un certain nombre d'auto-incrémenté qui agira comme l'indice de la table. Ce serait passée le long pour le bien de l'annulation ou de la modification d'un commentaire. Donne à chaque commentaire laissé sur chaque page 'sur votre site web de votre numéro de membre.
  2. page_id - Pour cet ensemble chaque page possède un numéro d'identification que le script utilise pour extraire les données correctes de la base de données pour imprimer la page affichée. Cela devrait être utilisé dans les commentaires de la table parce que nous ferons de notre script "savoir" à quelle page chaque commentaire appartient. Si vous ne voulez pas de commentaires laissés pour chaque page sur chaque page, car il serait inutile. Dans la forme à laisser un commentaire vous aurez besoin de passer le long de la page d'identification qui serait enregistré dans cette colonne quand un commentaire est laissé.
  3. commentateur - Je l'utilise pour indiquer le nom de la personne qui a laissé le commentaire. Pour que cela fonctionne, et dans la plupart des cas, ce est ainsi que cela sera fait dans tous les cas, le nom du commentateur sera leur nom d'utilisateur si le log-in. Pour que ce code fonctionne correctement ces valeurs devraient être les mêmes. Ainsi, la valeur de cette colonne pour chaque commentaire gauche doit être le nom d'utilisateur d'un membre qui est presque stocké de manière permanente dans un autre base de données.
  4. Date - Ce ne est pas indispensable, mais je aimerais que les gens de voir la date et l'heure qu'un commentaire a été laissé.
  5. Commentaire - Maintenant, ce est le corps du texte, que le membre est entré comme leur commentaire.
Quant à la base de données de profil: Celui-ci contiendra de nombreuses colonnes que jamais vous devez garder la quantité d'informations du profil utilisateur qui vous décidez d'avoir, mais seulement le nom d'utilisateur colonne sera utilisée dans ce exemple.
  1. Nom d'utilisateur - Ce est évidemment le nom d'utilisateur pour le membre qui a laissé un commentaire. Laissant un commentaire ne affecte pas ce profil de table, mais il sera en tirant à partir de quand nous affichons les commentaires qui ont été enregistrés. Ce sera probablement l'indice de colonne pour la table de profil.
Maintenant, quand un membre laisse un commentaire sur une page que nous voulons les informations requises ci-dessus pour être enregistré dans les colonnes respectives des page_comments de table. Encore une fois, nous voulons montrer l'icône commentateur/avatar à chaque commentaire, mais pour économiser de l'espace disque nous allons utiliser un JOIN pour tirer le chemin/URL de l'image de chaque commentateur d'une table où il existe déjà. Si votre site devient très populaire et vous avez des centaines de pages, avec une moyenne de dix chaque commentaire nous parlerions de milliers de lignes de la table page_comments chacun avec une colonne remplie avec les données existantes. Avoir une colonne remplie avec éventuellement URL longue est plus de données qui sont stockées, qui peut remplir plus rapidement une part.

Une solution: CODE

$ Résultat = mysql_query (" Page_comments.commentor SELECT, page_comments.date, page_comments.comment, profile.img_url Page_comments DA INNER JOIN profil ON = page_comments.replier profile.username OÙ page_id = '$ page_id' "); while ($ row = mysql_fetch_array ($ result)) { Comment_id $ = $ row ['comment_id']; Commentor $ = $ row ['commentateur']; $ Date = $ row ["date"]; Commentaire $ = $ row ['commentaires']; Img_url $ = $ row ['img_url']; echo " */Ce que vous voulez faire écho pour afficher la disposition des données/éléments de page/commentaire./* »; }

Explications

Maintenant, je vais donner des explications ligne par ligne, puis aider à visualiser ce qui se passe here.Start requête MySQL. Je utilise "$ result" mais vous pouvez utiliser ce que vous voulez tant que vous référencez la même variable pour la ligne de mysql_fetch_array 11.

2. Nous allons commencer par la commande SELECT. Vous êtes probablement très bien ce que ce est l'un des plus couramment utilisé dans les requêtes. Maintenant, vous pouvez nommer les colonnes que vous souhaitez utiliser un séparés par des virgules, comme vous le feriez dans un non-requêtes de jointure, mais il ya une énorme différence. Vous moût référence aux colonnes dans la même table.colonne de manière qui est indiqué dans l'exemple. Ceci est considéré comme "nom de la table name.column". Comme avec non rejoindre questions ne ont pas à déclarer toutes les colonnes disponibles dans le tableau. Seuls ceux contenant des informations que vous allez utiliser dans le reste du code. Tous sauf un sont tirés du tableau page_comments et le dernier est la table de profil. Nous avons besoin de seulement une colonne spécifique de la table de profil, mais vous pouvez utiliser plus ... il suffit d'ajouter d'autres de la même manière.

4. commande standard. Pour cela vient il sera appelé la table primaire que vous pouvez penser comme ça avec la plupart des colonnes que vous allez utiliser. Dans cet exemple nous utilisons page_comments parce que fondamentalement nous voulons utiliser toutes les colonnes de cette table, mais nous ajoutons une colonne supplémentaire à la fin de chaque ligne pour laquelle des données est peuplée par la seconde table.
5. INNER JOIN - Ce est le type le plus commun et ne ont pas de préciser INTERNE. Vous pouvez spécifier que JOIN et se comportera de la même façon. Ce est la table avec la colonne (s) dont les données seront remplir la colonne plus se joignent à la table primaire que nous utilisons. Bien entendu, dans cet exemple, est la table de profil.
6. ON - Ce est le plus important parce qu'il raconte la requête que vous voulez joindre les tables ... comme dans ces colonnes doit correspondre à la colonne plus à ajouter à la table primaire. Vous devez spécifier les colonnes dans le même format que dans table.colonne commande SELECT. Dans l'exemple nous disons MySQL pour créer un match lorsque les données dans la colonne des page_comments de Commentor est le même que le nom de la colonne du profil de l'utilisateur.
7. OÙ - Il est utilisé dans la plupart des requêtes MySQL ainsi. Parce que chaque commentaire «appartient» à une certaine page, puis a une valeur d'entier dans la colonne de la table de page_comments page_id nous voulons utiliser uniquement les lignes de la table où la valeur page_id. Donc, si quelqu'un regarde la page avec le page_id '5' MySQL retournera uniquement les lignes pour les commentaires qui ont été laissés sur la page avec ce ID.
10. Tout - Après l'exécution de la requête que nous voulons utiliser les résultats retournés à mysql_fetch_array utiliser pour créer un tableau associatif contenant les clés et les valeurs des lignes renvoyées par la requête. Soyez certain de changer le nom de la variable ($ result) dans cette ligne si vous avez utilisé un autre dans la première ligne de code.
12-16. Sur ces lignes pour convertir le fichier en variables. Pas tous le faire, mais je le fais parce que ce est plus facile de faire écho des données de la base de données, sans avoir à concaténer $ row ['nom_colonne'] et l'utilisation de guillemets dans toute la déclaration écho.
Le reste: mettez ce que vous voulez echo'd le navigateur qui sera très probablement contenir du code HTML, peut-être dans un format de table et les données extraites de la base de données. Et comme toujours, vous devez formater une seule ligne que la déclaration sera echo'd fois pour chaque ligne que la requête, MySQL retourné.
Bien sûr, dans la requête, vous pouvez ajouter des commandes de limite si vous voulez seulement un certain nombre de lignes retournées, ce qui est essentiel si vous utilisez quelque chose comme ça avec mon code php pagination. Vous pouvez également ajouter la commande ORDER, si vous voulez contrôler la façon dont les lignes sont triées. Techniquement la requête entière peut être écrite sur une seule ligne, mais il est trop long pour mon code travers différentes lignes.

Concept d'affichage

Première photo une représentation physique de la table primaire. Serait par le haut de la colonne des noms avec les lignes suivantes pour être les résultats. Tout comme dans un tableau HTML. Alors, pensez à la table comme page_comments:

Comment_id | page_id | commentor | Date | commentaires

Et la table comme un profil (avec des colonnes inutiles ne figure pas):

nom d'utilisateur | img_url

Vous pouvez penser à se joindre à la création d'une table temporaire. Aucune nouvelle table est créée mais tant que la requête renvoie des lignes ajoute colonne de img_url de valeur dans la rangée dans les page_comments de table pour créer:

Le script premier jeu toutes les lignes où la valeur de la colonne est égale ID page_id de la page que vous consultez. Ce sont les seuls fichiers qui nous intéressent dans chaque requête pour être sûr que nous ne faisons écho aux commentaires relatifs. Ensuite, pour chaque ligne renvoyée par la requête MySQL va ensuite chercher la ligne de la table de profil dans lequel la valeur du nom d'utilisateur de la colonne correspond au nom commentateur associé à chaque commentaire. Quand une ligne dans le tableau correspond profil ajoute ligne de colonne valeur img_url par page_comments ligne ... comme ainsi:

Comment_id | page_id | commentor | Date | commentaires | img_url

Alors maintenant, vous pouvez obtenir le img_url être utilisé dans une balise HTML img src pour montrer leur icône/avatar avec leur nom commentateur/utilisateur, la date du commentaire et le commentaire lui-même. Ceci, bien sûr, cela fonctionne lorsque le même utilisateur a commenté à plusieurs reprises sur la même page.

Je espère que vous avez acquis une certaine connaissance sur ce solide et vous aider dans votre code. Si je peux faire tous les changements pour faire de ce meilleur ou plus claire se il vous plaît commentaire et laissez-moi savoir et je verrai ce que je peux faire.

S'amuser!

mots de prudence!

Je ai trouvé cette friandise de déconner avec mon code. Ceci est particulièrement important avec ce type de jointure. Si les tables de base de données sont correctement définies, vous ne remarquez pas de toute façon. Mais je ajoute cette section parce que je veux donner autant d'informations que possible sur le sujet.

Votre recherche MySQL ne fera pas correspondre à une ligne de la première table si la colonne qui est compensée ne correspond pas à la valeur dans la colonne de la deuxième table.

Afin de tester mon forum je ai créé un peu de fausses réponses à la fin arrière où je ai ajouté le nom d'utilisateur, la date et reply_body manuellement. Quand je ai voulu créer une réponse de fil de quelqu'un d'autre que le compte principal (admin) je ai utilisé "CM" (abréviation de Christopher-Michael, qui I) dans la colonne de la table forum_replies replier. Mais quand je ai vu le forum de toutes les réponses à la discussion pourrait performances, sauf ceux que je ai mis le replier comme CM.

Finalement, je ai réalisé que le nom d'utilisateur correct pour le compte de l'utilisateur était C_M. Une fois que je ai changé pour CM C_M comme replier pour toutes les réponses que vous avez finalement apparu dans le fil comme ils le devraient.

Je voulais préciser cela parce que, à mon avis section Concept Je ne crois que toutes les lignes qui avaient la combinaison 'thread_id »seraient ajoutés à la matrice créée par la requête, et ensuite, si pour une raison quelconque le code n'a pas pu trouver un compte dans le tableau de profil que la ligne thread_reply serait encore un match, mais il n'y aurait pas de valeur pour img_url car il n'y avait pas de match dans le deuxième tableau. Cela se traduirait par une valeur vide pour $ img_url puis une balise img src brisé et un avatar est montré.

Cependant, puisque la requête a été en mesure de trouver une correspondance dans la table de profil, parce que la valeur 'nom d'utilisateur' ne est pas trouvé dans le tableau ... il n'a pas tenu compte des lignes du tableau forum_replies être un jeu, puis le réponse ne est pas affiché, même si elle répond aux critères de l'approprié »thread_id '.

Bien sûr, si je avais utilisé le commentaire forme actuelle lorsque vous êtes connecté au compte C_M puis le nom d'utilisateur correct serait sauvé dans les forum_replies de table et je prouver la réponse comme prévu.

Donc, ce qu'il se résume à cette section: Si vous savez que une ligne dans le tableau suivant dans le DE requête doit être adaptée en remplissant les critères, si ... Assurez-vous que les deux valeurs sont comparées après l'instruction ON vrai allumette.

(0)
(0)
Article précédent Trois singes de Mahatma
Article suivant Dépannage Motorola Xoom

Commentaires - 0

Sans commentaires

Ajouter un commentaire

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caractères restants: 3000
captcha