web-dev-qa-db-ja.com

Joomlaフォームフィールドからデータベースに挿入します

私はJoomlaの初心者です!開発し、非常に単純なモジュールを作成しました。

3つのテキストフィールドを持つフォームを作成し、入力した値をデータベーステーブルに保存するにはどうすればよいですか?

15
jehan

この例を試してください:

ユーザーの姓名をテーブルに投稿します。

データベースにテーブルを作成します。プレフィックス「jos_」が必要であることに注意してください

このフォームを「名前」と呼びます。したがって、テーブルに「jos_names」という名前を付けます。

PHPMyAdmin(または使用するツール..)のSQL行で、次のクエリを実行して新しいテーブルを作成します。

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

簡単にするために、結果を同じページに投稿します。フォームを作成しましょう。

<?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>';
}

?>

それはそれをする必要があります。従来のJoomlaモジュールを作成している場合、これはhelper.phpファイルである必要があります。

注:「die」スクリプトは、joomlaドキュメントに1回だけ含めてください。(defined( '_ JEXEC')..

JURI :: current()は、現在のページのURLを自動的に読み取ります。 echo JURI :: current();を呼び出す場合URLが http://www.example.com/names のページでは、同じリンクが表示されます。

Action = ""が、このモジュールを公開する正確なURLを指していることが重要です。

さらに、データを「SELF」に投稿することは悪い習慣と見なされますが、モジュールに制限があるため、コンポーネントまたはプラグインをビルドしない限り、この例のようにフォームを「SELF」に投稿する必要があります。 (JURI :: current();)

Joomlaフレームワークでは、Joomlaはすでに「ログイン」しているため、データベース名、ユーザー名、またはパスワードを宣言する必要はありません。したがって、databasename.jos__tablenameをクエリする代わりに、joomlaでクエリを次のように置き換えることができます:#__tablename。実際、ユーザーはデフォルトのjos_プレフィックスを使用する必要がないため、これはdbクエリとJoomlaを処理する場合のベストプラクティスであり、joomlaは自動的に「#」をプレフィックスに置き換えます。私の場合、「#」は「jos」と同じです

SQLにクエリを実行してテーブルを作成するときは注意してください。必ず、databasenameをデータベースの実際の名前に置き換えてください。

それはそれをする必要があります。

何らかの理由でデータを投稿できない場合:1)[送信]をクリックしたときにフォームが別のページにリダイレクトされないことを確認します。含まれている場合は、フォームアクション ""をこのページが公開されている絶対URLに変更し、そこから移動します。

2)$ data = newメソッドが機能しない場合があります。これは、モジュール、関数、およびクラスの設定方法によって異なります。別の方法は次のとおりです。

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

次のようなものを試してください http://www.chronoengine.com/ --Chronoforms

0
Jeepstone

カスタムクエリを実行して、単純なtmplファイルの結果を取得できます。

<?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