• 締切済み

phpとmysqlでサイトのコンテンツを制作しているのですが...

phpとmysqlでサイトのコンテンツを制作しているのですが、どうにも解決できないのでどなたかアドバイスをいただけないでしょうか? mysqlで $result = @mysql_query( 'drop tabl main_categories;' ); $sqlstr = "create table main_categories (id INTEGER primary key AUTO_INCREMENT,"."category TEXT)"; $result = mysql_query( $sqlstr ); としてテーブルを作ってこれをphpでデータを取得し格納したいのですがうまくいきません。取得データを $arr=mysql_fetch_array($result); で格納してforeachで出力?したいのですが。。。 foreach( $arr as $key => $value ) { if($value['category'] != ''){ array_push($categories_arr,$value['category']); array_push($catid_arr,$value['id']); } } どなたか教えてください!もう8hはまってます=3

  • PHP
  • 回答数4
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

>ご指摘いただいたようにprint_r($arr);を試してみました。 >そしたらこんなものが出てきました。 >Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) ですから「foreachで回さずに」   array_push($categories_arr,$arr['category']);   array_push($catid_arr,$arr['id']); すればいいのでは?foreachで回すと、keyが'id'とか'category'で、$valueに'1'や'ファイアーキング'が入ってきますよ。

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

>「テーブルの内容を取得するためのSQL文」をmysql_queryで投げた戻り値 ということでしたか。これは当方の考え違いですな。 それにしてもマニュアルは読んだのかと・・・・ [マニュアルより] 取得した行をあらわす配列を返します。もし行が存在しない場合は FALSE を返します。返される配列の形式は、result_type がどのように指定されているかによります。MYSQL_BOTH(デフォルト) を利用すると、連想添字と数値添字を共に持つ配列を取得します。 MYSQL_ASSOC を利用すると( mysql_fetch_assoc() の動作と同様に)連想添字のみが取得され、 MYSQL_NUM を利用すると (mysql_fetch_row() の動作と同様に)数値添字のみが 取得されます。 MYSQL_BOTHだからそんな使いづらいデータになるのです。 おそらく「同じレコードが二つあって困ってる」というのが質問の主旨ではないのですかね。 大人しく明示的にMYSQL_ASSOCを引数に入れるかmysql_fetch_assoc()を使えばよいです。 とにかくマニュアルを読んでエラーログ見て、 それでも分からないなら分からないことをキッチリ書いて質問すべきでしょう。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

ちゃんとテーブルが作成できていることは確認されていますよね?データの投入はどうされたんでしょう? >$arr=mysql_fetch_array($result); この$resultはテーブルを作るときのソースではなく、「テーブルの内容を取得するためのSQL文」をmysql_queryで投げた戻り値ですよね?そのときのSQL文の内容が書かれていないので何とも判断できません。 あと、取得した(出来ているかどうかはSQL文がないので不明ですが)レコードに内容($arr)を foreach( $arr as $key => $value ) { で回しているのに$value['category']とはどういう意味でしょう?とりあえず print_r($arr); として$arrの内容を確認されることをお勧めします。 なお、mysql_queryでSQL文を投げたら必ずエラーチェック入れてください。公開時には詳細な内容表示は出来ないとは思いますが、デバッグ時にはそれなりの情報を表示したいところです。

gooth_1980
質問者

補足

ご指摘いただいたようにprint_r($arr);を試してみました。 そしたらこんなものが出てきました。 Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) テーブルには $sqlstr = "insert into main_categories values (1,'ファイアーキング')"; $result = @mysql_query( $sqlstr ); に入れたのですが。。。助けてください・・・

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

まにゅある http://jp.php.net/manual/ja/function.mysql-affected-rows.php http://jp.php.net/manual/ja/function.mysql-query.php create文などはmysql_fetch_array()で結果を取れません。 create/drop文の結果はリソースとして返ってきた値がtrueなのかfalseなのかで判断しましょう。 >drop tabl main_categories; tabl?tableのtypo? そもそもmysql_query()に渡すクエリにはセミコロンを書いてはいけません。 @でエラーを抑制しているのもわけが分かりません。 意図しない動作をしたらエラーログを見ましょう。 また、質問者様はまだマニュアルをあと42回読むと良いかと思います。 // そこまで書けるならばマニュアル一通り読めば大抵の問題は解決するかと。

関連するQ&A

  • phpでmysqlからデータを取り出して一覧表示

    phpでmysqlからデータを取り出して一覧表示させるプログラムを造りたいのですが、どうもうまくいきません。まずはデータの取り出し表示の仕方を教えてください。 $sqlstr="select * from webdiary where username=$id order by topicid asc"; $result = mysql_query( $sqlstr ); この後どのようにしたらよいでしょうか?

    • ベストアンサー
    • PHP
  • PHP+MySQLで文字化けします

    PHPでMySQLに接続して以下のように テーブルの作成・そのテーブルにInsertをすると文字化けします。 PHPサーバーの文字コードはEUC-JP、MySQLの文字コードはlatin1です。 PHPのバージョンは5.04でMySQLのバージョンは4.1.20です。 無料レンタルサーバーなので詳細な設定は変更できません。 <?php // データベースに接続し、選択する mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); $link = mysql_connect('localhost',"user","password") or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('user') or die('Could not select database'); mysql_query("SET NAMES UTF-8",$link); // SQL クエリを実行する $name = 'test'; $query = "CREATE TABLE IF NOT EXISTS `$name` ( `id` varchar(50) primary key, `name` varchar(50), `pw` varchar(50) );"; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); $query = "INSERT INTO $name (id, name) VALUES('test', 'テスト');"; $mojicode = mb_detect_encoding($query); $query = mb_convert_encoding($query, "UTF-8", "$mojicode"); $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // HTML に結果を出力する echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // 結果セットを開放する mysql_free_result($result); // 接続を閉じる mysql_close($link); ?> まだまだPHP、MySQL共に技術が未熟なため 説明不足な部分が多々あるかと思いますがご教授お願いします。

    • ベストアンサー
    • PHP
  • PHPのforeachでMysqlにINSERT

    PHPのforeach文を使いMysqlにデータをINSERTしたいです。 配列$resultは以下のような連想配列になっています。 Array ( [0] => Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 ) [1] => Array ( [A] => 2 [B] => 4 [C] => 6 [D] => 8 [E] => 10 ) ) 上記の連想配列をforeach()文で以下の処理をします。 foreach ($result as $key => $value) { /** * データベースへの追加(新規追加時だけ実行。コメント忘れずに) */ $sql = $pdo->prepare('INSERT INTO sample(a, b, c, d, e) VALUES(:a, :b, :c, :d, :e)'); $sql->execute(array(':a' => $value[A], ':b' => $value[B], ':c' => $value[C], ':d' => $value[D], ':e' => $value[E])); } その後データベースでselect * from test;とすると1行目のデータしか格納されていません。原因が不明です。 print すると期待する配列要素が表示されますので配列のデータ配置不備ではありません。 アドバイス頂きたくお願い申し上げます。

    • ベストアンサー
    • PHP
  • MYSQLとPHPによって取得する多次元配列

    はじめてご質問させていただきます。 現在以下のようなテーブルが3つあります。 [ tbl1 ] | tbl1Key | title | | 1 | a | | 2 | b | | 3 | c | | 4 | d | [tbl2] | tbl2Key | tbl1Key | tbl3Key | | 1 | 2 | 2 | | 2 | 3 | 1 | | 3 | 3 | 4 | | 4 | 1 | 3 | [tbl3] | tbl3Key | value | | 1 | aaa | | 2 | bbb | | 3 | ccc | | 4 | ddd | 上記のデータソースを元に以下のような結果を得たいと考えています。 array( array( 'tbl1Key'=>1, 'title'=>'a', 'values' => array( array( 'tbl3Key'=>3, value='ccc' ) ), array( 'tbl1Key'=>2, 'title'=>'b', 'values' => array( array( 'tbl3Key'=>2, value='bbb' ) ), array( 'tbl1Key'=>3, 'title'=>'c', 'values' => array( array( 'tbl3Key'=>1, value='aaa'), array( 'tbl3Key'=>4, value='ddd' ) ), array( 'tbl1Key'=>4, 'title'=>'d', 'values' = > array( array( 'tbl3Key'=> , value='' ) ) ) この場合phpによって $sql = ("select * from `tbl1`"); $res = mysql_query( $sql, $con ); $data = array(); while( $row =mysql_fetch_object( $res ) ) { $sql = ("select * from `tbl3` inner join `tbl2` on `tbl3`.`tbl3Key`=`tbl2`.`tbl3Key` where `tbl2`.`tbl1Key`={$row->tbl1Key}"); $res2 = mysql_query( $sql, $con ); $tmp = array(); while( $r = mysql_fetch_object( $res2 ) ) { $tmp[] = $r->value; } $row->values = $tmp; $data = $row; } まずtbl1のデータをすべて取り、配列dataに格納する段階で、tbl1と関連付けされたtbl3のvalueを取得し配列tblに格納、それを新しい要素として配列dataにプッシュしている状況です。 こういったテーブルでいうところの1カラムのみ配列で返すような事は、こういったループを使って以外にも可能なのでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • fetch_arrayで期待する値が返ってこない

    こんにちは PHP初心者です。 ハマってしまったので助けてください。 先にソース書きます↓ ------------------------- $sqlStr = "SELECT fld1 FROM table1 WHERE fld2 = '$aaa' AND fld3 = '$bbb' AND fld4 = '$ccc'"; $rsd = mysql_query($sqlStr, $Conn); $rsd_rows = mysql_num_rows($rsd); echo "rsd_rows= ".$rsd_rows."\n"; $rsd_array = mysql_fetch_array($red, MYSQL_ASSOC); foreach( $rsd_array as $key => $value ) { echo "Key= ".$key." Value= ".$value."\n"; } ------------------------- 結果↓ rsd_rows= 50 Key= ABC Value= XYZ ------------------------- $rsd_rowsには50が返されおり、それは正しい数値です。 ところが$rsd_arrayはなぜか結果の最初の一行しか返されていません。 どこかを間違ってるのはわかりますが、どこが問題なのかわからないです。 $rsd_arrayに50行分のデータすべてを取得するには、どうしたらいいですか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP・MySQL・javascriptを用いたセレクトボックスによる絞込み検索

    はじめまして!現在PHPを勉強し始めた初心者なのですが、PHP・MySQL・javascriptを用いて、検索機能を実現させたいと思い思考錯誤しているのですが、やりたいことができず、困っております。 やりたいことというのは、MySQLに商品テーブルが存在し、材質やサイズなどのフィールドをいくつか設けているのですが、セレクトボックスを5つ配置し、それぞれのセレクトボックスを選んでいくと他のセレクトボックスが連動して絞り込まれていき、5つ全て選んだ時に1つの商品がヒットするというものを作りたいのです。 一つ目のセレクトボックスからポストされた値を次のセレクトボックスのクエリのwhere句の条件として絞り込んで二つ目を表示させることはできたのですが、三つ目以降どうしていいかわかりません>< 初心者なので、詳しく解説して頂ければ幸いです。 どうか宜しくお願いいたします。 現在製作中のソースですは下記をご参照下さい。 <?php //MySQLクラスファイルの取り込み require_once("mysql.php"); //MySQLクラスファイルの取り込み $mysql = new MySQL; //ポストされた値を変数に格納 $category = $_POST["category"]; $syo_code = $_POST["syo_code"]; ?> <html> <head> <body> <form action="jon2.php" method="post"> <!--jon2.phpは現在のページの名前です--> <select name="category" onChange="this.form.submit()"> <option value="">-------------</option> <? $query = "select * from category"; $result = $mysql->query($query); while ($rows = $mysql->fetch($result)) { ?> <option value="<?=$rows["category_id"]?>"><?=$rows["category"]?></option> <? }//while終わり ?> </select><br /> <select name="syo_code"> <option value="">-------------</option> <? $query = "select syo_code from syohin where category_id=$category"; $result = $mysql->query($query); while ($rows = $mysql->fetch($result)) { ?> <option value="<?=$rows["syo_code"]?>"><?=$rows["syo_code"]?></option> <? }//while終わり ?> </select> </body> </head> </html>

    • 締切済み
    • PHP
  • mysql_fetch_objectの書き方を教えて下さい。

    PHP5.1.6を使用しています。 次のスクリプトを書きましたが、データが取得できません。 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT abcd,efgh from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); $xdata = array(); while($row = mysql_fetch_array($result)){  ← 11行目 array_push($ydata, $row->efgh);   ← 12行目 array_push($xdata, $row->abcd);   ← 13行目 } エラーログを見ると、 PHP Notice: Trying to get property of non-object in /***/***/****.php on line 12 PHP Notice: Trying to get property of non-object in /***/***/****.php on line 13 となっています。 var_dump($row) 句を入れ、ブラウザから見ると、当然ながら(?)bool(false) と表示されます。 11行目の mysql_fetch_array を mysql_fetch_object に入れ換えて while($row = mysql_fetch_object($result)){ としても結果は変わりません。 リファレンスマニュアルやサンプルを参照して種々手直ししましたが、今ひとつ正解に辿り着けません。 データを取得して配列に入れるには、どのように修正すれば良いか、教えて頂けませんでしょうか。

    • ベストアンサー
    • PHP
  • レンタルサーバーで PHP+MySQL のサイトを作ってます。

    レンタルサーバーで PHP+MySQL のサイトを作ってます。 極稀に、一部のクエリーが原因で、 MySQLのプロセスが大量にSleep状態で長時間滞留してしまう事態が生じ、 サーバーに高負荷をかけてしまいます。 これを解消するために、 $sql = "SHOW PROCESSLIST"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result,MYSQL_NUM)){ $id = $row['0']; $time = $row['5']; if($time > 60) mysql_query("KILL {$id}"); } こんな感じのコードをcronで数分毎に実行し、問題のプロセスを停止させようと思ったのですが... どうなんでしょう? アドバイスを頂けないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • 【PHP・MySQL】一文字だけ抜き出したい

    php・MySQL初心者です。 何とかここまで自力でやってこれたのですが、もうお手上げで…。 サンプルコードを解析し、部分的に理解しながら進んでる状態です。 やりたいことは、 「ユーザーが入力した文字列の最後の1文字だけを抜き出し、データベースに代入する」です。 ←(2) ちなみに、 「ユーザーが入力した文字列をそのまま、データベースに代入する」はできました。←(1) 参考に、(1)のソースコードの一部を書きます。 ------------------------------------------- 『main.php』 <form action="result.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="<?= $file_maxsize ?>"> タイトル:<INPUT type="text" name="title" size="50"><br> コメント:<INPUT type="text" name="comment" size="50"><br> <input type="submit" value="送信"> </form><hr> ------------------------------------------- 『result.php』 $comment = @trim($_REQUEST['comment']); //※ $query = "insert into main_t (comment, last)" . " values ('$comment', '$last')"; $result = mysql_query($query); ------------------------------------------- だいたいこんな感じで(1)は出来ました。 (関係がありそうなところだけを抜き出したつもりです…) 『main.php』で出力して確認もしました。 (2)の現状の私のコードを書きます。 ------------------------------------------- 『result.php』 $x = mysql_query("select right('$title', 1)"); $last = mysql_fetch_assoc($x); ------------------------------------------- これを(1)の //※  の部分に記述してみましたが、うまくいきません。 出力するとなぜか「Ar」と出てきます…泣 『select right('いちもじ', 1)』で『じ』とちゃんと右一文字が取り出せるのをbatファイル?みたいなので確認しました。 このSQL文をPHP内で行いたいのですが、やり方がわかりません…。 (そもそも根本的に間違っているのでしょうか…) $x = mysql_query("select * from ○○ where 条件"); $last = mysql_fetch_assoc($x); みたいにfromで検索先や条件を指定して得た「配列」を取得し、表示する方法はネット検索で沢山見つかったのですが、fromやwhereを使わず、結果も配列ではなく1つだけ得られるような場合は、どうすればよいのでしょうか? わかりづらい文章ですみません; 難しい質問かとは思いますが、PHPやMySQLに詳しい方がいましたら、是非ともご教授いただけたらと思います。 よろしくお願いいたします。