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
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:
même si "plain" PHP fonctionnait pour tous, WordPress dispose d’aides et de meilleures pratiques spécifiques.
C’est la seule partie que WordPress ne vous aidera pas beaucoup. PHP est votre ami ici.
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.
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.
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
.
Tout ce qui précède est nécessaire pour traiter les données provenant des formulaires.
Cependant, vous avez également besoin de:
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à.
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:
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 } _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.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 ...
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.
pour afficher une zone de texte sur le serveur et stocker des données dans une base de données, procédez comme suit:
Créez un fichier php dans votre dossier de thème activé et mettez le code suivant:
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. .
Maintenant, visualisez la page et vous trouverez la zone de texte sur la page.
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.
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(); ?>