【最大10000ポイント】当たる!!質問投稿キャンペーン!

cakePHPについて、質問があります。

以下のように、サブミット時にPHPの関数を呼び出そうとしましたが、呼び出しを行えません。
echo $form->submit('登録', array('id'=>'XX','controller' => 'controller名', 'action' => 'action名' ));

お手数ですが、解決方法を教えて頂けますでしょうか?

以上です。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> 今回、違うURLへPOSTしたいと考えております。



いや、だからURLが何であろうが<form>タグで囲まれてないとPOSTできないと言っております。これはHTMLの基本です。cakeとかPHPは関係ありません。
この意味が分からないならcake以前にHTMLから勉強することをオススメします。


そんなの分かってるという場合は、僕の解答をよく読み返して下さい。

> $form->create で<form>の開始タグを書き出してあげる必要があるでしょう。

と書いた通りです。$form->createで<form>タグが出力できます。submitでPOSTされるURLはformタグに指定されたaction要素なので、

> controllerやらactionやらを記載するとしたらecho $this->Form->createのほうです。

と書いたのです。

> (同じURLへのPOSTなら特に記載する必要もない)

$form->createに与えるパラメータを省略したら省略したら同じURLへのPOSTになるという意味です。


$form->createのパラメータ指定方法は参考URLを参照してみて下さい。

参考URL:http://qma.way-nifty.com/diary/2009/03/cakephp-f …
    • good
    • 0

> echo $form->submit('登録', array('id'=>'XX','controller' => 'controller名', 'action' => 'action名' ));



普通に(Ajax等を使わずに)POST送信したいなら<form>タグで囲まれていなければなりません。HTMLの基本です。

$form->submit はsubmitボタンタグを書き出すだけです。
$form->create で<form>の開始タグを書き出してあげる必要があるでしょう。
controllerやらactionやらを記載するとしたらecho $this->Form->createのほうです。
(同じURLへのPOSTなら特に記載する必要もない)

この回答への補足

説明不足で、申し訳ございません。
今回、違うURLへPOSTしたいと考えております。

補足日時:2011/07/01 21:48
    • good
    • 0
この回答へのお礼

初歩的な質問で、申し訳ございませんでした。
解決することができました。

お礼日時:2011/07/06 13:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

Qcakephpでのトランザクション処理について

このカテゴリには初めて投稿いたします。
どうにも解決ができないため、質問させていただきました。

cakephpで、注文番号の連番発行のために、今回初めてトランザクション処理が必要なケースが出てきまして、
ネットで検索して出て来る情報を元に、そのとおりに記述しているのですが、どうやってもうまく行きません。
DBのテーブルはInnoDBになっています。

参考にしたサイトは例えば
http://wataame.sumomo.ne.jp/archives/3812
などです。

--------------------実際のコード

-----以下はあるモデル内(ここでは、SamplemodelDataとしています)に記述した関数での処理です。$thisはそのモデルを示します。

$dataSource = $this->getDataSource();
$dataSource->begin($this);

$res = $this->find('first',array('conditions'=>array('classification'=>$classification,'commoncode'=>$commoncode)));

if($this->getNumRows()==0){//レコードなしの場合
$returnNumber = 1;
$this->save(array('classification'=>$classification, 'commoncode'=>$commoncode, 'number'=>1));
}else{
$res['ExsamplemodelData']['number'] += 1;
$returnNumber = $res['SamplemodelData']['number'];
$this->set('id', $res['SamplemodelData']['id']);
$this->saveField('number', $returnNumber);
}

$dataSource->commit($this);

return $returnNumber;

--------------------

■目的
ユーザーが同時刻に何人同時に注文しようと、注文番号を重複させずに注文番号を採番することが目的です。
極端なことを言えば、ある同じ時刻(秒まで一緒)に世界各国から100人同時に全く同じタイミングで注文が入っても、注文番号を重複させないようにしたいです。
※DBのシリアルを使えば確実に重複させないようにできることは知っています。しかし、今回は単純に連番だけでなくいろいろなケースにおいて意味をもつ文字列も付与したものをプライマリキーとしているので、単純なシリアルではだめなのです。


■うまくいかない点
・上記の記述でも、トランザクション自体は機能しているようです。
 最後の $dataSource->commit($this); をコメントアウトにすると、DBの番号が永遠にインクリメントされませんので。
・begin ~ commit までの間に、他のスレッドで、
$this->find('first',array('conditions'=>array('classification'=>$classification,'commoncode'=>$commoncode)));
が実行されると、インクリメントされる前の番号が返されるのです。
=>それよりも前のスレッドが begin をした瞬間からcommitするまでは、他のスレッドでfindしても、待ち状態になって欲しいのです。
・検証用プログラムで、上記の処理を、2つのブラウザから同時に100回繰り返す(2つ併せて200回繰り返し処理させる)と、
毎回200件中、5~7件程度、番号が重複してしまいます。

■質問内容
・このような精度を求めるようなケースでは、cakephpでトランザクション処理をしても、もともと無理な要望なのでしょうか?
・上記の記述で不足している部分は何でしょうか?例えば、mysqlのトランザクションには他スレッドから、updateだけを禁止にする指定と、updateとselectも禁止にする指定ができるようですが、上記の記述だと他スレッドではupdateしか禁止されていないために、selectであるfindは待ちが発生しないということなのでしょうか?しかし、selectも禁止にするとかそういう指定方法がどう探してもそういう情報が見つけられませんでした。


要約すると、つまり、
「cakephpでトランザクション処理(beginからcommitの間は、他スレッドからはupdateもselectも禁止)にする方法はどうやったらよいのでしょうか?」
ということでございます。

ご存じの先生方、是非、お力お貸しいただけますでしょうか。
何卒よろしくお願いいたします。

このカテゴリには初めて投稿いたします。
どうにも解決ができないため、質問させていただきました。

cakephpで、注文番号の連番発行のために、今回初めてトランザクション処理が必要なケースが出てきまして、
ネットで検索して出て来る情報を元に、そのとおりに記述しているのですが、どうやってもうまく行きません。
DBのテーブルはInnoDBになっています。

参考にしたサイトは例えば
http://wataame.sumomo.ne.jp/archives/3812
などです。

--------------------実際のコード

-----以下はあるモデル内(ここ...続きを読む

Aベストアンサー

find('first', のとき、降順設定しないと、取得する先頭1行目は最小値だけど、そこは設定してますか?
ちゃんと最大値を得るようになっていたとして、あとは、cakePHPよりは、MySQL innodb の問題じゃないかな。
http://dev.mysql.com/doc/refman/5.1/ja/innodb-locking-reads.html

innodb のtransaction は、defaultは REPEATABLE READ で、select 文でのデータ取得時は、他者に読み書き可能なので、これを防ぐには、先に発行される select文に for update が必要です。これで、他者の読み書きをブロックします。
Modelの findメソッドでは、それを追加するすべはないので(接続先データベースによって対応の違う物は実装されていない)
よって、 Model->query(string $sql ,array $placedata) メソッドで直接SQL文を渡して実行することになります。
プレースホルダーも使えるので、pdoでのプレースホルダー指定方法に則って作成するとよいです。
SQL例
SELECT max( number ) as number FROM exsample_models where classification=? and commoncode=? FOR UPDATE;

find('first', のとき、降順設定しないと、取得する先頭1行目は最小値だけど、そこは設定してますか?
ちゃんと最大値を得るようになっていたとして、あとは、cakePHPよりは、MySQL innodb の問題じゃないかな。
http://dev.mysql.com/doc/refman/5.1/ja/innodb-locking-reads.html

innodb のtransaction は、defaultは REPEATABLE READ で、select 文でのデータ取得時は、他者に読み書き可能なので、これを防ぐには、先に発行される select文に for update が必要です。これで、他者の読み書きをブロックしま...続きを読む

Qphpにcssを適応させたいのですが?

phpで出力させた結果をブラウズするのに、css指定させたいのですが?

できるのでしょうか?

Aベストアンサー

PHPだから特別な考えはしなくて良いです

PHPはあくまでも、サーバー側で動いて、その結果を出力させるだけです

つまり出力させたHTMLにごくごく普通にCSSを適用させれば良いだけです
又、テクニックとしCSSそのものをPHPで処理させることも可能ですよ

例えば
---------------index.html(又はindex.php)のhead内
<link rel="stylesheet" type="text/css" href="stylecss.php"/>
---------------

------------stylecss.php
BODY {
background-color: #<?php echo $background; ?>;
margin: 0px;
}

A:link {
color: #<?php echo $acollar; ?>;
text-decoration:none;
}
-----------
のようにしてしまって、CSSそのものを動的に生成することも可能です

PHPだから特別な考えはしなくて良いです

PHPはあくまでも、サーバー側で動いて、その結果を出力させるだけです

つまり出力させたHTMLにごくごく普通にCSSを適用させれば良いだけです
又、テクニックとしCSSそのものをPHPで処理させることも可能ですよ

例えば
---------------index.html(又はindex.php)のhead内
<link rel="stylesheet" type="text/css" href="stylecss.php"/>
---------------

------------stylecss.php
BODY {
background-color: #<?php echo $background; ?>;
margin: 0px;
...続きを読む

Qチェックボックスから複数のvalueを取り出す

HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。

例:
グループAのラジオボタン1にチェック、送信
→グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A
→value==Aの場合に表示する文章を変数に受け渡し、その変数で表示

ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。
チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

Aベストアンサー

チェックボックスはちょっと特殊

まずHTML部分で、以下のように定義します
<input type="checkbox" name="sample[]" value="test1">test1
<input type="checkbox" name="sample[]" value="test2">test2

ここでは、nameの部分に[]をつけるのがポイント


次にphpで受け取る方法として、
$sample = $_POST["sample"];
で問題ありません。

受け取ったデータを使うときは、$sampleは配列になっていますので、
仮に上記のtest1とtest2両方にチェックが付いているとしたら、
$sample[0]にはtest1が、$sample[1]にはtest2が入っています。

$sampleをforeachで使うか、$sampleのデータ数を調べてforでループさせるなどで使えます。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

Qテキストボックスに数字しか入力できないようにするには?

タイトルの通りなのですが、あるテキストボックスに数字しか入力できないようにしたいのですが可能でしょうか?また、

「あいうえお 12345 「」:・、¥・」

というような文字列をコピーし、そのテキストボックスにペーストした際にも数字の12345だけが残るといった事も実現したいのですが…

どなたかご存知の方いらっしゃいましたら教えて頂けると幸いです。

Aベストアンサー

>英数字

では、こんな感じで

<input type="text" onKeyup="this.value=this.value.replace(/[^0-9a-z]+/i,'')">

Q宜しくお願いします。

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから--->

$min = h($r -> x);
$max = h($s -> y);
for($i=$min ; $i<= $max; $i++){
$search = sprintf("SELECT id FROM Sheet WHERE no='%d'",$i);
$q_search = mysql_query($search);
$result = mysql_fetch_object($q_search);
echo $result;
}

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから...続きを読む

Aベストアンサー

PHPあまり詳しくないので間違っていたらすいません。


>$result = mysql_fetch_object($q_search);
でresultはobject型で代入しておりそれを表示するときにString型に変換できていないのが原因かとおもわれます。

参考URL
mysql-query
http://php.net/manual/ja/function.mysql-query.php

mysql-fetch-array
http://php.net/manual/ja/function.mysql-fetch-array.php

mysql_fetch_object
http://phpspot.net/php/man/php/function.mysql-fetch-object.html

Qテーブル作成でエラーが出てきます。

こんにちは。
いつもお世話になっております。

テーブルを作っていたのですが、
ERROR 1060: Duplicate column name
というエラーが帰ってきてしまいます。

予約語とかぶっているフィールド名でもないし、
何が悪いのかわからなくって・・・。

どうかご指導よろしくお願いいたします。

Aベストアンサー

実際にエラーが出た create 構文を示していただければ指摘できると思います。

QPHPで偶数と奇数を判断するには

宜しくお願いします。
一覧表示等をする時に見やすいように一行ずつテーブルの色を変えたりすると思うのですが、これをPHPのfor文で自動的に交互に色を変えるようなプログラムを作ろうと思っております。for文で繰り返し処理場合、例えば、

for($n = 0; $n < 100; $n++)
{
 if($n = 偶数)
 {
 $bgcolor = "#ff0000";
 }
 elseif($n = 奇数)
 {
 $bgcolor = "#0000ff";
 }
}

といった形で交互に色を変るには、偶数/奇数の判断が出来ないと無理だと思うのですが、何か良い方法は無いでしょうか?

Aベストアンサー

if($n % 2 == 0) {
 偶数の処理;
} else {
 奇数の処理;
}

%は、割り算をした、余りです。
例)
3を2で割った余りは1
4を2で割った余りは0 

ANDで求める方法もあります。

またこの場合は、一度偶数で判定すれば、奇数の判定は不要です。


人気Q&Aランキング