web-dev-qa-db-fra.com

Stockage des valeurs de zone de texte dans la base de données

Je suis nouveau dans WordPress mais je suis bon avec les programmations PHP, si je veux obtenir de la valeur de la zone de texte et la stocker dans la base de données dans WordPress, puis-je le faire?

pour ex

form1.html

<form name="form" method="post" action="value_get.php">
<input type="text" id="t1" name="t1">
<input type="submit" value="submit">
</form>

value_get.php

<?php

$firstname = mysqli_real_escape_string($con, $_POST['tb1']);

$con=mysqli_connect("localhost","root","","wordpress");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"INSERT INTO wp_exTable (FirstName)
VALUES ('$firstname')");


if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

Puis-je faire ces choses dans WordPress? avec peu de peaufinage

2
lost_in_magento

De PHP à WordPress

Si vous avez de l'expérience en programmation et en PHP, sachez que la sauvegarde des données provenant d'un formulaire implique essentiellement les étapes suivantes:

  • validation
  • assainissement
  • connexion à la base de données
  • stocker la valeur dans la base de données

même si "plain" PHP fonctionnait pour tous, WordPress dispose d’aides et de meilleures pratiques spécifiques.

Validation

C’est la seule partie que WordPress ne vous aidera pas beaucoup. PHP est votre ami ici.

Assainissement

WordPress a différentes aides pour la désinfection.

Pour les données provenant de formulaires, vous pouvez utiliser différentes fonctions sanitize_ *, telles que sanitize_text_field(). Trouvez-les ici . Notez que toutes les fonctions que vous trouverez dans le lien ne sont pas utiles pour la portée.

Connexion à la base de données

Dans le contexte WordPress, vous ne vous connectez pas à la base de données. Vous laissez WordPress le faire, puis vous utilisez l'API de base de données pour exécuter des requêtes sur la base de données.

L'API de base de données WordPress est résumée dans l'objet wpdb, disponible dans la variable globale $wpdb.

Il n'y a rien d'autre à faire. WordPress se chargera également de fermer la connexion si nécessaire.

Stocker la valeur dans la base de données

Une documentation sur l'API global $wpdb est disponible ici . Comme vous pouvez le voir, il y a beaucoup de méthodes.

Les plus utiles sont probablement les aides pour les opérations CRUD:

  • get_results()/get_row()/get_col()/get_var()
  • insert()
  • update()
  • delete()

Il est important de noter que les données désinfectées avec les fonctions sanitize_* présentées ci-dessus doivent être protégées par des méthodes spécifiques à la base de données avant d'être enregistrées dans la base de données.

Pour la portée, la méthode prepare() fournit un moyen d'échapper aux instructions SQL à l'aide d'une syntaxe semblable à sprintf.

Pages de formulaire et routines de traitement de formulaire

Tout ce qui précède est nécessaire pour traiter les données provenant des formulaires.

Cependant, vous avez également besoin de:

  • une "page" où placer le formulaire
  • un "lieu" où placer routine de traitement de formulaire .

Pages de formulaire frontend et backend

Dans WordPress, nous pouvons distinguer deux catégories de formes: les formes qui appartiennent à frontent et celles qui appartiennent à backend.

Pour les formulaires frontent, vous placerez probablement tout le code HTML dans l'un des modèles, et c'est tout.

Pour les formulaires de base, les possibilités sont nombreuses.

Si vous souhaitez stocker des valeurs reliées à une publication, vous souhaiterez probablement ajouter un metabox et y placer un formulaire. En fait, dans ce cas, vous n'utilisez pas un formulaire "complet", mais simplement des entrées de formulaire qui deviennent partie intégrante du formulaire de post-édition complet.

La même approche peut être adoptée, en utilisant des "points d'ancrage" spécifiques, pour ajouter des champs aux formulaires de modification/création pour les taxonomies, les utilisateurs, etc. Ce site Web et le site Web en général regorgent d'exemples et de conseils à ce sujet.

Si les données que vous souhaitez stocker ne sont aucunement liées à une "entité" centrale de WordPress (par exemple, vous allez créer une page d'option pour un plugin personnalisé), vous souhaiterez probablement enregistrer une page d'administrateur et placer la forme là.

Traitement de formulaire

Le traitement des données provenant d’un formulaire dépend de la manière dont vous print it.

Si vous avez utilisé l'un des moyens d'ajouter des champs à des formulaires WordPress existants, vous ne pouvez pas utiliser votre propre routine mais vous devez accrocher la routine existante et traiter vos données.

Par exemple, si vous avez ajouté une métaboxe à une publication, vos champs ont été ajoutés au formulaire de modification/création, et vous devrez raccrocher save_post ou tout autre crochet déclenché lors de l'enregistrement d'une publication par WordPress , vérifier les données provenant de vos champs de formulaire et les traiter.

Si votre formulaire provient de frontend ou si vous avez créé un tout nouveau formulaire dans le backend, vous pouvez être tenté de créer un fichier qui traite le formulaire.

Cela ne fonctionnera pas vraiment, car vous allez utiliser l’environnement WordPress (rappelez-vous l’objet $wpdb?) Et vous aurez donc besoin d’amorcer WordPress manuellement, ce qui n’est pas vraiment recommandé.

Au lieu de cela, vous pourriez:

  • envoyez le formulaire à la même page qui contient le formulaire et placez le code de traitement par-dessus le balisage. Cela n’est vraiment pas suggéré car le mélange de code de traitement et de code de balisage est un désordre à maintenir.
  • envoyez le formulaire à admin-ajax.php (l'URL complète est obtenue via admin_url('admin-ajax.php')), puis utilisez "admin_ajax_{$action}"/admin_ajax_nopriv_{$action} pour accrocher votre routine. Voir Codex sur AJAX_in_Plugins } _
  • envoyez le formulaire à admin-post.php (l'URL complète est obtenue via admin_url('admin-post.php')), puis utilisez "admin_post_{$action}"/admin_post_nopriv_{$action} pour accrocher votre routine.
  • Utilisez l'API REST _ pour enregistrer un itinéraire personnalisé, puis traitez le formulaire dans le gestionnaire de route REST.

Sur la structure de données

WordPress a ses propres tables et une structure de données spécifique.

En utilisant la fonction dbDelta , vous pouvez créer des tables personnalisées et l’objet $wpdb peut toujours fonctionner sur celles-ci, mais cela devrait être évité autant que possible.

La raison en est que les tables personnalisées dans WordPress sont difficiles à maintenir (il manque à WP des éléments tels que des migrations ou des fixtures) et en utilisant des tables personnalisées, vous manquez la possibilité d'utiliser de nombreuses API WordPress disponibles si vous adaptez vos données à WordPress "Entités". .

Par exemple, si vos données sont liées à des publications, vous pouvez utiliser des taxonomies ou des méta-publications pour les stocker.

Si les données sont des données liées à l'utilisateur, vous pouvez utiliser les méta utilisateur, ou les méta termes pour les données liées aux termes de taxonomie.

Dans le cas de données "génériques", vous pouvez utiliser des options ou des modifications de thème dans le cas d'une confugration spécifique à un thème.

Si vous le faites, lorsque vous avez besoin de récupérer/stocker des données, au lieu d'utiliser des méthodes wpdb, vous pouvez utiliser des API spécifiques.

Taxonomies , post meta , terme meta , méta utilisateur , options , modifications de thème ... fournissent des méthodes pour interagir avec les données à un niveau plus élevé, simplifiant l'accès aux données et offrant d'autres avantages tels que le cache, la filtrabilité, la compatibilité avec d'autres parties du cœur (par exemple, le personnaliseur et l'API REST plugins ...

3
gmazzap

Une solution simple pour stocker la valeur dans la base de données consisterait à utiliser la fonction add_option() de WordPress. Il stocke la valeur dans la table wp_options dans la base de données.

$firstname = mysqli_real_escape_string( $con, $_POST[ 'tb1' ] );
add_option( 'first_name' , $firstname );
echo "1 record added";

Vous pouvez ensuite accéder à la valeur à tout moment en utilisant get_option( 'first_name' ).

Si vous souhaitez exécuter davantage de requêtes personnalisées, utilisez $wpdb->query(). Lisez la page ẁpdb Codex pour plus de détails.

2
Ram Shengale

pour afficher une zone de texte sur le serveur et stocker des données dans une base de données, procédez comme suit:

  1. Créez un fichier php dans votre dossier de thème activé et mettez le code suivant:  enter image description here 

  2. Maintenant, créez une page dans Wordpress en utilisant le menu de la page sur Backend et dans la section Ajouter une nouvelle page, vous obtiendrez la section "Attribut de la page" sur le côté droit de la page. Choisissez maintenant la page de votre modèle dans la liste déroulante Modèle et publiez la page. .

  3. Maintenant, visualisez la page et vous trouverez la zone de texte sur la page.

  4. Remplissez la valeur et enregistrez, la valeur sera enregistrée dans la base de données dans une table personnalisée.
2
Arpita Hunka

Au lieu d'utiliser les fonctions natives PHP telles que mysqli_connect, vous devez utiliser les possibilités offertes par WordPress pour faire de même. C'est mieux pour des raisons de compatibilité et de maintenabilité. Vous pouvez notamment utiliser la classe wpdb , qui peut non seulement être utilisée pour les propres bases de données de WordPress, mais également pour les tables externes. Pour ajouter de nouvelles entrées, vous pouvez utiliser la méthode insert() de la classe. Pour plus d'informations, voir la section INSERT rows de la page de code wpdb. Vous trouverez ci-dessous un exemple de code:

global $wpdb;
$fname  = $_POST[ 'txt_fname' ];
$lname  = $_POST[ 'txt_lname' ];
$tbl    = 'wp_exTable';
$others = $_POST[ 'txt_email' ];
$wpdb->insert(
    'wp_exTable',
    array(
        'first_name' => $fname,
        'last_name'  => $lname,
        'email'      => $others
    ),
    array(
        '%s',
        '%s',
        '%s'
    )
);

Dernier point mais non le moindre, vous devriez probablement penser au fait que vous ayez réellement besoin d’une table supplémentaire. Vous pouvez par exemple utiliser post meta comme suggéré par @RamShengale.

1

Veuillez essayer ce code pour mettre à jour les enregistrements de la base de données dans wordpress. Pour cela, commencez par créer un file.php dans le dossier wordpress sélectionné, puis utilisez ce fichier comme modèle. Et ce code fonctionnera parfaitement et si quelqu'un connaît la bonne expression régulière pour valider le nom, veuillez me le suggérer. Merci à tous.

<?php /* Template Name: your template name */ ?>
<style>
.error {color: #FF0000;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"
        type="text/javascript"></script>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css"
        rel="Stylesheet" type="text/css" />
<script type="text/javascript">
    $(document).ready(function() {
            //this calculates values automatically 
            $("#name").keypress(function() {
            validate();
            });
            });
function validate() {

            /*=============== Validate The Name ======================*/
                var fname =document.forms["abc"]["name"].value; 
                var name_regex = /^[a-z A-Z]+$/;
            if(fname == 0||fname==null )
            {
                    document.getElementById('nameErr').innerHTML = "* Please fill your name";
                    return false;
            }
            else
            {
                    if (!fname.match(name_regex)) {
                    document.getElementById('nameErr').innerHTML = "* Name should be alphabet";
                    return false;
                    }
                    else{
                                document.getElementById('nameErr').innerHTML = "";
                    }
            }
}

        <?php get_header(); ?>
        <?php
        if (!empty($_POST)) {
        global $wpdb;
            $table = wp_tablename;
            $data = array(
                'firstname' => $_POST['yourname']
            );
            $format = array(
                '%s'
            );
            $success=$wpdb->insert( $table, $data, $format );
            if($success){
            echo 'Thanks for submitting your information soon we will contact to you'; 
        }
        }
        else   {
        ?>
        <div class="container">
            <div class="row">
                <form method="post" class="form-horizontal" id="abc" onsubmit="return validate(this)">
                <div class="col-md-3">Full name: </div><div class="col-md-8"> <input type="text" name="yourname" class="form-control" id="name"><span class="error" id="nameErr"></span></div>

                <div class="col-md-6"><input type="reset" name="reset" class="btn btn-danger"></div><div class="col-md-6"><input type="submit" value="Register" class="btn btn-success"></div>
                </form>
            </div>
        </div>
        <?php }  ?>

<?php get_footer(); ?>
0
ABHISHEK GUPTA