Nous saisissons les données utilisateur dans la base de données MySql. Requête SQL pour ajouter et supprimer des enregistrements Ajout de données via un formulaire dans MySQL

Maison / Technologies

Et étant donné
. Maintenant, nous allons parler de la façon dont ajouter des images à la base de données MySQL via un formulaire en utilisant PHP.

Création d'un champ dans la base de données MySQL pour ajouter une image

Pour commencer, je veux dire que pour stocker des images dans une base de données MySQL Il est nécessaire de définir l'un des champs de la table comme dérivé du type BLOB.

L'abréviation BLOB signifie Binary Large Object. Le type de stockage de données BLOB propose plusieurs options :

  • TINYBLOB - Peut stocker jusqu'à 255 octets
  • BLOB peut stocker jusqu'à 64 kilo-octets d'informations
  • MEDIUMBLOB - jusqu'à 16 mégaoctets
  • LONGBLOB jusqu'à 4 gigaoctets

Pour stocker un fichier image dans une base de données vous devez lire le fichier dans une variable et créer une requête pour ajouter des données à la table.

Préparer un formulaire sur la page pour ajouter une image à la base de données MySQL

Dans mon cas, la tâche était ajouter deux images à la base de données via un formulaire utilisant PHP. Nous avons un formulaire avec deux champs et un bouton de soumission :

nom du formulaire=”form1″ méthode=”post” action=”add_image.php”
enctype="multipart/form-data"

Permettez-moi de vous rappeler que l'attribut action spécifie le fichier qui effectuera le chargement des fichiers image. Attribut enctype indique comment le contenu du formulaire est codé et les informations de téléchargement de fichier. Voir comment remplir correctement l'attribut enctype afin d'éviter.

Note: la prise en charge du téléchargement de plusieurs fichiers a été introduite dans la version 3.0.10.

Écrire du code PHP pour enregistrer une image dans une base de données MySQL

Puisque nous envoyons deux fichiers dans l'attribut nom après le mot nous indiquons « userfile » avec des crochets, nous indiquons ainsi clairement que nous envoyons plusieurs fichiers en utilisant un tableau contenant les attributs du fichier :

$_FILES['fichierutilisateur']['nom']

Le nom du fichier d'origine sur la machine client.

$_FILES['fichierutilisateur']['type']

Le type MIME du fichier, si le navigateur a fourni cette information.
Exemple : "image/gif" .

$_FILES['fichierutilisateur']['taille']

$_FILES['userfile']['tmp_name']

Nom de fichier temporaire sous lequel le fichier téléchargé a été enregistré sur le serveur.

Comment récupérer les valeurs de chaque fichier ?

Par exemple, supposons que des fichiers nommés /home/test/1.jpg et /home/test/2.jpg soient envoyés.

Dans ce cas, $_FILES['userfile']['name']
contiendra la valeur 1.jpg,
et $_FILES['userfile']['name']
- valeur 2.jpg

De même, $_FILES['userfile']['size'] contiendra la valeur de taille de fichier 1.jpg, et ainsi de suite. Regardons maintenant le code du fichier add_image.php, qui a été spécifié dans l'attribut form action.

1024*1024||$image_size==0) ( $ErrorDescription="Chaque image ne doit pas dépasser 1 Mo ! L'image ne peut pas être ajoutée à la base de données."; return ""; ) // Si le fichier est arrivé, vérifiez si le graphique // il (pour des raisons de sécurité) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") ( //Lire le contenu du fichier $image=file_get_contents($_FILES ["userfile"]["tmp_name"][$num]); //Echapper les caractères spéciaux dans le contenu du fichier $image=mysql_escape_string($image )else( ErrorDescription= "Vous n'avez pas chargé d'image, elle ne peut donc pas être ajoutée."; return "" ) )else( $ErrorDescription="Vous n'avez pas téléchargé d'image, le champ est vide, le fichier ne peut donc pas être ajouté à la base de données. ."; return ; ) return $image; ) ?>

Donc, dans cet article, nous avons expliqué comment enregistrer une image dans une base de données MySQL. , en utilisant PHP.

Ce guide vous montrera comment commencer à gérer une base de données à partir de votre PHP scénario. Vous étudierez ajouter un enregistrement à une table MySQL, en utilisant Code PHP. Avant de commencer, consultez nos autres didacticiels qui couvrent les étapes de base de l'utilisation de PHP et des bases de données : connexion de PHP à une base de données MySQL.

Avant de commencer, vérifiez les points suivants :

  • Accès à votre panneau de contrôle d'hébergement

Étape 1 - Création d'un tableau

Tout d'abord, nous devons créer un tableau pour vos données. Il s'agit d'une procédure très simple que vous pouvez effectuer en phpMonAdmin depuis votre panneau de contrôle d’hébergement. Nous avons déjà abordé le processus de création d'une base de données MySQL dans un didacticiel précédent, nous allons donc ignorer cette partie ici.

Après vous être connecté à la page phpMyAdmin, vous verrez une image comme celle-ci :

Créons une table avec le nom Étudiants pour notre base de données u266072517_nom. Vous pouvez créer un nouveau tableau en utilisant le bouton Créer un tableau. Après cela, vous verrez nouvelle page où vous pouvez saisir toutes les données nécessaires pour votre tableau :

C'est le moyen le plus simple de créer une table. Pour plus d'informations sur la structure de la table/base de données et sur les paramètres pouvant être utilisés pour chaque champ, veuillez vous référer à la documentation officielle de phpMyAdmin.

Voici quelques explications simples sur les champs que nous utiliserons :

  • Nom est le nom de votre champ. Apparaîtra tout en haut de votre tableau.
  • Taper– ici, vous pouvez définir le type de champ. Par exemple, nous choisissons Varchar car ici, nous devons entrer une chaîne avec un nom (qui contient des lettres et non des chiffres).
  • Longueur/Valeurs– utilisé pour définir la longueur maximale de votre saisie dans ce champ.
  • Indice– nous utilisons l’index « Primary » pour notre champ « ID ». Lors de la création d'une table, il est recommandé de n'avoir qu'un seul champ ID. Il est utilisé pour indexer les enregistrements d'une table lorsque les relations entre les tables sont configurées. On peut également noter ici "A_I", ce qui signifie Incrémentation automatique. Ce paramètre augmentera automatiquement l'index (1,2,3,4...).

Cliquez Sauvegarder et votre table sera créée.

Étape 2 - Créez du code PHP et ajoutez une entrée à la table MySQL

Option 1 – Méthode MySQLi

Tout d’abord, vous devez établir une connexion à la base de données, selon notre précédent tutoriel. Après cela, nous pouvons continuer avec la requête SQL pour ajouter un enregistrement à la table MySQL - INSÉRER. Voici un exemple de code complet avec méthode de connexion et d'insertion :

" . mysqli_error($conn); ) mysqli_close($conn); ?>

Ainsi, la première partie du code (lignes 3 – 18 ) font référence à la partie établissement de la connexion à la base de données. Nous ne reviendrons pas sur cette partie, si vous souhaitez savoir ce que signifie chaque ligne, référez-vous à notre précédent guide sur comment se connecter à une base de données.

Commençons par la ligne 19 :

$sql = "INSÉRER DANS LES Étudiants (nom, prénom, email) VALEURS ("Thom", "Vial", " [email protégé]")";

Il s'agit de la ligne de code la plus importante, elle fait tout ce que nous couvrons dans ce tutoriel : ajouter un enregistrement à une table MySQL dans la base de données. INSÉRER DANS est une expression qui ajoute un enregistrement à la table de base de données MySQL spécifiée. Dans notre exemple, nous ajoutons des données à une table Étudiants.

En allant plus loin, entre parenthèses, nous définissons les champs du tableau auxquels nous ajouterons des valeurs : (nom, prénom, email). Les données seront ajoutées dans un ordre spécifique. Si nous écrivons (email, nom, prénom), les valeurs seront ajoutées dans un ordre différent.

Partie suivante du sens VALEURS. Ici, nous définissons nos valeurs dans les champs précédemment spécifiés. Ainsi, chaque champ recevra sa propre valeur. Par exemple, dans notre cas, ce serait quelque chose comme : nom = Thom, nom = Vial, email = [email protégé] .

Ce qu'il est important de noter, c'est que nous formons ici requête SQL en utilisant du code PHP. Les requêtes SQL doivent être placées entre guillemets. Dans notre exemple, tout ce qui se trouve entre les guillemets et après $sql = est une requête SQL.

La partie suivante du code ( 20 – 22 lignes) exécute notre requête et vérifie le succès de la requête :

If (mysqli_query($conn, $sql)) ( echo "Nouvel enregistrement créé avec succès"; )

Un message de réussite s'affiche si la requête a été exécutée correctement.

Et la dernière partie ( 22 – 24 lignes) affichent un autre message en cas d'échec de notre demande :

Sinon ( echo "Erreur : " . $sql . "
" . mysqli_error($conn); )

Ce code nous montre un message d'erreur en cas de problème.

Option 2 – Méthode d’objet de données PHP (objet de données PHP)

Comme dans l'exemple précédent, nous devons d'abord établir une connexion à la base de données, ce qui est effectué lors de la création d'un nouvel objet PDO - le didacticiel précédent explique comment cela se produit. Puisqu'une connexion à une base de données MySQL est un objet PDO, nous devons utiliser diverses « méthodes » PDO (une sorte de fonctions qui font partie d'un objet spécifique) pour préparer et exécuter la requête. Les méthodes objets sont appelées comme ceci :

$the_Object->the_Method();

PDO vous permet de « préparer » le code SQL avant de l’exécuter. Requête SQL calculé et ajusté avant le lancement. Donc, attaque simple par Injection SQL peut être fait en remplissant le code SQL dans un champ de formulaire. Par exemple:

// L'utilisateur écrit ceci dans le champ nom d'utilisateur d'un formulaire de connexion thom"; DROP DATABASE user_table; // La requête finale devient ceci "SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

Puisque le code SQL est syntaxiquement correct, le point-virgule fait DROP DATABASE table_utilisateur nouvelle requête SQL et votre table d'utilisateurs est supprimée. Les expressions préparées n'autorisent pas les caractères Et ; pour compléter la demande originale et les instructions SUPPRIMER LA BASE DE DONNÉES ne sera jamais exécuté.

Toujours Utilisez des requêtes préparées lors de l'envoi ou de la réception de données d'une base de données avec PDO.

Pour utiliser des expressions préparées, vous devez créer une nouvelle variable qui appellera la méthode préparer() sur l'objet de base de données.

Sous sa forme correcte, le code ressemble à :

$nom du serveur = "mysql.hostinger.com" ; $base de données = "u266072517_name" ; $nom d'utilisateur = "u266072517_user" ; $mot de passe = "achatpwd" ; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // Créez une nouvelle connexion à la base de données MySQL à l'aide de PDO, $my_Db_Connection est un objet try ( $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Connecté avec succès"; ) catch (PDOException $ error) ( echo "Erreur de connexion : " . $error->getMessage(); ) // Définit les variables de la personne que nous voulons ajouter à la base de données $first_Name = "Thom"; $last_Name = "Flacon" ; $email = " [email protégé]"; // Nous créons ici une variable qui appelle la méthode prepare() de l'objet de base de données // La requête SQL que vous souhaitez exécuter est entrée en paramètre et les espaces réservés sont écrits comme ceci : placeholder_name $my_Insert_Statement = $my_Db_Connection-> prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Nous indiquons maintenant au script à quelle variable chaque espace réservé fait réellement référence en utilisant la méthode bindParam() // Tout d'abord Le paramètre est l'espace réservé dans l'instruction ci-dessus - le deuxième paramètre est une variable à laquelle il doit faire référence $my_Insert_Statement->bindParam(:first_name, $first_Name->bindParam(:last_name, $last_Name); , $email); // Exécute la requête en utilisant les données que nous venons de définir // La méthode execute() renvoie TRUE si elle réussit et FALSE si elle ne réussit pas, vous permettant d'écrire vos propres messages ici if ( $my_Insert_Statement-> execute()) ( echo "Nouvel enregistrement créé avec succès"; ) else ( echo "Impossible de créer l'enregistrement"; ) // À ce stade, vous pouvez modifier les données des variables et exécuter à nouveau pour ajouter plus de données à la base de données $first_Name = "John"; $last_Name = "Smith" ; $email = " [email protégé]"; $my_Insert_Statement->execute(); // Exécuter à nouveau maintenant que les variables ont changé if ($my_Insert_Statement->execute()) ( echo "Nouvel enregistrement créé avec succès"; ) else ( echo "Impossible de créer l'enregistrement"; )

Aux lignes 28, 29 et 30 nous utilisons la méthode bindParam() objet de base de données. Il existe aussi une méthode liaisonValue(), différent du précédent.

  • bindParam() – cette méthode compte les données lorsque la méthode exécuter() atteint. La première fois que le script atteint la méthode exécuter() il voit ça $premier_Nom fait référence à « Thom », lie cette valeur et exécute la requête. Lorsque le script atteint la méthode une seconde fois exécuter(), il a l'air de ça $premier_Nom fait désormais référence à « John », lie cette valeur et exécute à nouveau la requête avec la nouvelle valeur. Il est important de comprendre que nous créons la requête une seule fois, puis remplaçons différentes données à différents endroits du script.
  • liaisonValue() – cette méthode calcule les données dès que c'est son tour. Puisque la valeur $premier_Nométait réglé sur « Thom » au moment où nous avons atteint la méthode liaisonValue(), il sera utilisé lors de l'appel de la méthode exécuter() Pour $my_Insert_Statement.

Veuillez noter que nous réutilisons la variable $premier_Nom et donnez-lui une nouvelle valeur une seconde fois. Si vous vérifiez votre base de données après avoir exécuté ce script, les deux noms donnés seront là, contrairement à cette valeur de variable $premier_Nom sera égal à « John » à la fin de ce script. N'oubliez pas que PHP évalue le contenu d'un script avant son exécution.

Si vous modifiez votre script en remplaçant bindParam sur valeur de liaison, vous ajouterez « Thom Vial » à la base de données MySQL deux fois et John Smith sera ignoré.

Étape 3 : Vérifiez le succès et résolvez les problèmes généraux

Si la requête que nous avons exécutée dans la base de données MySQL a réussi, nous verrons le message suivant :

Résoudre les erreurs courantes

MySQLi

Dans tous les autres cas, un message d'erreur s'affichera à la place du message ci-dessus. Par exemple, faisons une erreur de syntaxe dans notre code et nous obtiendrons ceci :

Comme nous pouvons le voir, la première partie du code est correcte, la connexion a été établie avec succès, mais notre requête SQL a rencontré un échec lors de son exécution.

"Erreur : INSÉRER DANS LES Étudiants (nom, prénom, e-mail) VALEURS ("Thom", "Vial", " [email protégé]") Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de "(nom, nom, email) VALEURS ("Thom", "Vial", " [email protégé]")" à la ligne 1"

Une erreur de syntaxe s'est produite qui a entraîné l'échec de notre script. L'erreur était là :

$sql = "INSÉRER DANS LES Étudiants (nom, prénom, email) VALEURS ("Thom", "Vial", " [email protégé]")";

Comme vous pouvez le constater, nous utilisons des accolades au lieu de parenthèses. Ceci est incorrect et entraîne une erreur de syntaxe dans notre script.

AOP

Sur la ligne 7 de la connexion PDO, le mode de gestion des erreurs est défini sur « afficher toutes les exceptions ». Si vous supprimez cela du script et que la demande échoue, vous ne recevrez aucun message d'erreur. Avec les exceptions activées, les problèmes spécifiques rencontrés seront affichés. Il est généralement préférable de l'utiliser lors du développement d'un script, car il peut révéler des noms de bases de données et de tables que vous souhaiteriez cacher à toute personne susceptible d'obtenir un accès non autorisé à vos données. Dans le cas ci-dessus, lorsque des accolades ont été utilisées à la place des parenthèses, l'erreur ressemble à ce qui suit :

Erreur fatale : exception non interceptée "PDOException" avec le message "SQLSTATE : erreur de syntaxe ou violation d'accès : 1064 Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de "(nom, nom, email) VALEURS ("Thom", "Vial", " [email protégé]")" à la ligne 1"

Autres problèmes que vous pourriez rencontrer :

  • Les champs sont mal renseignés (champs inexistants ou noms mal orthographiés).
  • Le type de valeur ne correspond pas au type de champ. Par exemple, lorsque l'on veut attribuer la valeur d'un nombre 47 champ Nom, nous obtiendrons une erreur car la valeur est censée être une chaîne. Mais, si vous spécifiez un nombre entre guillemets, par exemple, “47” , il n'y aura pas d'erreur car notre numéro sera écrit sous forme de chaîne dans ce champ.
  • Une tentative de saisie de données dans une table qui n'existe pas ou une erreur d'orthographe du nom de la table.

Toutes ces erreurs peuvent être corrigées en suivant les guides de correction d'erreurs ou en consultant le journal des erreurs.

Après avoir ajouté les données avec succès, nous devrions les voir dans notre base de données. Voici un exemple du tableau auquel nous avons ajouté nos données, en regardant phpMonAdmin.

Conclusion

Dans ce tutoriel, vous avez appris à utiliser Code PHP pour ajouter un enregistrement à une table MySQL en utilisant MySQLi Et AOP. Nous avons également examiné les erreurs courantes et leurs solutions. Savoir comment utiliser le code PHP pour l'ajouter à une base de données MySQL vous sera utile si vous apprenez à programmer ou si vous créez déjà votre propre site Web.

Tous les modules d'un site ou d'une application web où il est nécessaire de saisir et d'enregistrer certaines données (par exemple, nom, âge, adresse, etc.) utilisent une fonction simple en langage mysql INSERT INTO `name_base` (nom, valeur1, valeur2 ) VALEURS ('Vasya ','1','2');

Toutes les variables sont saisies dans la base de données selon les valeurs que nous avons définies dans les premières parenthèses. Il est important de prendre en compte le codage du script du gestionnaire, de la base de données et du fichier de configuration. Il est conseillé d'utiliser le codage UTF-8 le plus courant.

Veuillez noter que vous pouvez écrire dans la base de données de deux manières.

Première façon si nous ne précisons pas initialement les noms de cellules des tables de la base de données. Ensuite, nous devons lister toutes les variables pour chaque cellule, à savoir le nombre de cellules dans la table de la base de données, donc de nombreuses variables doivent être répertoriées entre parenthèses après la valeur VALUE.

Par exemple:
Il y a quatre cellules dans une table de base de données. Cela signifie qu'après l'élément VALUE (..), les quatre variables doivent être répertoriées entre parenthèses. Et encore une chose : si la variable n'existe pas, disons que c'est un paramètre facultatif. Ensuite, nous écrivons simplement une valeur vide entre guillemets '',

"INSÉRER DANS LES VALEURS `name_base` (NULL, `".$name."`,``,`2`)"; // la troisième valeur vide est écrite entre guillemets

Mais cette demande présente quelques inconvénients mineurs. Si vous ajoutez une ou deux cellules à une table de base de données, alors cette demande renverra une erreur. Car dans cette méthode, lister toutes les cellules de la requête est obligatoire.

Deuxième façon si après une requête INSERT INTO `name_base` (...), répertoriez toutes les cellules après le nom de la base de données. Un exemple a déjà été discuté ci-dessus. Si vous avez oublié, réécrivons-le :

"INSERT INTO `name_base`(`name`,`value`,`value2`) VALUES (NULL, `".$name."`,``,`2`)";

Ici, nous avons répertorié toutes les cellules (name,value1,value2) . Et si vous ajoutez deux cellules supplémentaires à la table de la base de données, la syntaxe de la requête ne devra pas être modifiée. Mais à moins que nous devions ajouter immédiatement en une seule requête les variables supplémentaires dont nous avons besoin pour ces toutes nouvelles cellules créées.

Cette erreur survient très souvent après une petite modification sur le site. Disons que l'administrateur a ajouté une cellule supplémentaire à la base de données, disons le statut. Mais le processeur de script n'a pas eu le temps de changer de module, ou a tout simplement oublié. Mais certains sites ont une structure très complexe et trouver une erreur peut prendre beaucoup de temps et d'efforts. Par conséquent, il est conseillé d’utiliser la deuxième méthode d’écriture dans la base de données. Bien que ce type d'erreur soit plus souvent commis par les programmeurs Web débutants.

Entrée PHP dans la base de données MySQL. Exemples pratiques

Passons maintenant au cœur du problème lorsque nous travaillons avec des requêtes de base de données. Nous ferons tout en utilisant des exemples pratiques. Créons un script simple pour enregistrer les commentaires que les visiteurs du site laisseront.

Commençons par créer un tableau msg dans la base de données avec quatre cellules. Dans la première cellule, nous écrivons l'identifiant du commentaire. Le nombre de caractères dans une cellule peut aller jusqu'à dix caractères avec le paramètre d'incrémentation automatique. Ce paramètre automatique changera à chaque fois qu'un commentaire sera ajouté à +1.

La cellule suivante est le nom de l'utilisateur. Nombre de caractères - jusqu'à deux cents - trois cents caractères de votre choix, paramètre char. Ensuite, la cellule de commentaire - dans cette cellule, nous entrerons le texte du commentaire lui-même. Si vous souhaitez enregistrer des textes de commentaires volumineux, vous pouvez définir le paramètre texte - vous pouvez alors saisir simplement des textes énormes, plus de cinq cent mille caractères, ou définir le paramètre tinytext, alors un peu moins de caractères rentreront, mais ce sera le cas. travailler un peu plus vite.

Mais dans notre cas, nous garderons à l’esprit que les visiteurs n’écriront pas de gros textes. Et par conséquent, nous allons nous limiter et enregistrer deux mille caractères avec le paramètre varchar pour enregistrer les valeurs de chaîne.

Dans la dernière cellule, nous écrirons la date à laquelle le texte du commentaire a été enregistré. Nous écrirons au format numérique en secondes, en utilisant la fonction de la date et de l'heure actuelles time(); Pour plus de simplicité, nous définirons la fonction sur la variable $time=time(); Et créons une cellule dans la base de données. Appelons-le du même nom que time avec le paramètre int (pour valeurs numériques). Notons le nombre de caractères - onze c'est mieux (avec une petite marge pour le futur :-).

Le dump de la base de données est le suivant :

Structure de la table `msg` -- CREATE TABLE IF NOT EXISTS `msg` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` char(250) NOT NULL, `comment` varchar(2000) NOT NULL, `time` int(11) NON NULL, CLÉ PRIMAIRE (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Ça y est, un tableau de commentaires a été créé. Maintenant, nous écrivons un formulaire pour écrire un commentaire et le gestionnaire de script lui-même. Le code HTML du formulaire de commentaire est le suivant.

© 2024 ermake.ru -- À propos de la réparation de PC - Portail d'information