私はJoomlaの初心者です!開発し、非常に単純なモジュールを作成しました。
3つのテキストフィールドを持つフォームを作成し、入力した値をデータベーステーブルに保存するにはどうすればよいですか?
この例を試してください:
ユーザーの姓名をテーブルに投稿します。
データベースにテーブルを作成します。プレフィックス「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();
次のようなものを試してください http://www.chronoengine.com/ --Chronoforms
カスタムクエリを実行して、単純な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>