web-dev-qa-db-fra.com

insérer dans la base de données à partir des champs de formulaire Joomla

Je suis débutant chez Joomla! développement et ont créé un module très simple.

Comment créer un formulaire avec 3 champs de texte puis enregistrer les valeurs entrées dans une table de base de données?

15
jehan

Essayez cet exemple:

Nous publierons le nom et le prénom d'un utilisateur sur une table.

créer une table dans votre base de données. Notez qu'il devrait avoir le préfixe "jos_"

Nous appellerons ce formulaire, "noms". Nous allons donc nommer notre table "jos_names"

À la ligne SQL dans PHPMyAdmin (ou l’outil que vous utilisez ..), procédez comme suit pour créer une nouvelle table:

CREATE TABLE `databasename`.`jos_names` (`id` int(11) NOT NULL auto_increment, `firstname` VARCHAR(100), `lastname` VARCHAR(100), PRIMARY KEY  (`id`) )

Pour simplifier les choses, nous publierons les résultats sur la même page. Construisons le formulaire:

<?php

/** post form to db module **/

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );



//--POST YOUR FORM DATA HERE-->
$fname = $_POST['fname'];
$lname = $_POST['lname'];
//--END POST YOUR FORM DATA---|
//--build the form------------>
?>
<form name="names" id="names" action="<?php echo JURI::current(); ?>" method="post">
  <p><input type="text" name="fname" id="fname" value="" /></p>
  <p><input type="text" name="lname" id="lname" value="" /></p>
  <p><input id="submit" name="submit" type="submit" value="Submit Names" /></p>
</form>
//--END BUILD THE FORM--------|
<?
if( (isset($lname)) || (isset($fname)) ) {
   //first name or last name set, continue-->
   $data =new stdClass();
   $data->id = NULL;
   $data->firstname = $fname;
   $data->lastname = $lname;

   $db = JFactory::getDBO();
   $db->insertObject('#__names', $data, id);

}  else {
  echo '<h4>One Field Is Required!</h4>';
}

?>

Ça devrait le faire. Si vous écrivez un module Joomla traditionnel, cela devrait être votre fichier helper.php.

REMARQUES: Incluez le script "die" une seule fois dans un document joomla .. (défini ('_JEXEC') .. ..

JURI :: current () lit automatiquement l'URL de la page en cours. Si vous appelez echo JURI :: current (); sur une page contenant l'url http://www.example.com/names , le lien sera alors affiché.

Il est important que l'action = "" pointe vers l'URL exacte où vous allez publier ce module.

De plus, il est considéré comme une mauvaise pratique de poster des données sur 'SELF', mais vous êtes limité à un module. Ainsi, à moins de créer un composant ou un plugin, vous devez poster votre formulaire sur 'SELF' comme dans cet exemple. (JURI :: current ();)

Dans le framework Joomla, il n'est pas nécessaire de déclarer votre nom de base de données, nom d'utilisateur ou mot de passe car Joomla est déjà "connecté". Ainsi, au lieu d'interroger databasename.jos__tablename, vous pouvez remplacer la requête par ceci: #__tablename. En fait, il s'agit de la meilleure pratique pour traiter les requêtes de base de données et Joomla, car les utilisateurs ne doivent pas utiliser le préfixe jos_ par défaut. Joomla remplace automatiquement "#" par le préfixe. Dans mon cas, "# " est égal à "jos"

Prenez note lorsque vous interrogez le sql pour créer la table .. assurez-vous de remplacer databasename par le nom réel de votre base de données ..

Ça devrait le faire.

Si, pour une raison quelconque, vous ne parvenez pas à publier de données: 1) Assurez-vous que le formulaire ne soit pas redirigé vers une page différente lorsque vous cliquez sur Soumettre. Si tel est le cas, modifiez l'action de formulaire "" en l'URL absolue à l'emplacement où cette page est publiée .. à partir de là.

2) Parfois, la méthode $ data = new ne fonctionne pas. Cela dépend de la manière dont vous configurez votre module, vos fonctions et vos classes. Voici une alternative:

$db =& JFactory::getDBO();
$query = "INSERT INTO `#__names` (`fname`, `lname`)
    VALUES ($fname, $lname);";
$db->setQuery( $query );
$db->query();   
14
Kevin Florida

Essayez quelque chose comme http://www.chronoengine.com/ - Chronoforms

0
Jeepstone

Vous pouvez exécuter une requête personnalisée pour obtenir un résultat sur le fichier tmpl, ce qui est simple.

<?php // no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
$category =  $_REQUEST['category'];
if(isset($category))
    {
$db = JFactory::getDbo();
$db->setQuery("SELECT machine_id FROM j25_machinefinder_products WHERE category = '$category'");
// Load the row.
$result = $db->loadRowList();

//your result will return here
print_r($result);



    }

 ?>
<form action="" method="get" name="usedequipment">
<select name="category">
<?php foreach($hello as $category)
    {
    ?><option value="<?php echo $category[0]; ?>"> <?php echo $category[0]; ?></option><?php
    } ?>

</select>
<input type="submit"  />
</form>
0
Tousif