質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • PHP

    19224questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5529questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

配送リスト管理システのコード(php)

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 295

bigin

score 52

現在配送システムの管理ページを政策しているのですが、エラーが出まくっていて先に進めません、、、以下エラー内容です。

Parse error: parse error, expecting `'('' in /Library/WebServer/Documents/system.php on line 18


お尋ねしたいこと
①フォームから格納したデータを呼び出すプログラムのやり方は問題ないでしょうか?
②<?php ?>のつけどころがわからない。これであっていますでしょうか?

以下コードです。
よろしくお願いいたします。

<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html";  charset="UTF-8">
<link rel="stylesheet" href="style.css" type="text/css">
<title>システム管理</title>
<body>
<?php
$dsn = "mysql:dbname=delivery_system;host=localhost;charset=utf8";
$user = "root";
$password = "";
try{
    $db = new PDO($dsn,$user,$password);
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $sql='insert into delivery_list (name,prefecture,city,address,type,tel,person_name,copies,set_type) 
     values(:name,:prefecture,:city,:address,:type,:tel,:person_name,:copies,:set_type)';
     $stt = &db -> prepare(&sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
     $stt ->execute(array(':name' => [$_POST['name'],':prefecture' => $_POST['prefecture'],':city' => $_POST['city'],':address' => $_POST['address'],':type' => $_POST['type'],':tel' => $_POST['tel'],':peron_name' => $_POST['person_name'],':copies' => $_POST['copies'],':set_type' => $_POST['set_type']]));
}catch(PDOException $error){
    echo "接続失敗:".$error->getMessage();
    die();
}

<table border='1' class="TableStyle1" width="1000">
<tr><th>編集</th><th>名称</th><th>都道府県</th><th>市区町村</th><th>番地</th><th>区分</th><th>電話番号</th><th>担当者名</th><th>部数</th><th>設置/配布</th><th>消去</th></tr>
<?php 
$sql = "SELECT * FROM table_name";
$stmt = $db->query($sql)
foreach($stmt as $row){
?> 
<tr> 
    <td><?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['prefecture'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['city'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['address'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['type'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['tel'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['person_name'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['copies'],ENT_QUOTES,'UTF-8'); ?></td> 
    <td><?php echo htmlspecialchars($row['set_type'],ENT_QUOTES,'UTF-8'); ?></td> 
</tr> 
<?php 
} 
?>
</table> 
</body>
?>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kosuke_Shibuya

    2017/10/09 23:12

    ツッコミどころが複数あって、何が聞きたいのかわかりません。エラーメッセージなどは明記してください。また、何を聞きたいのか絞って質問してください。

    キャンセル

  • bigin

    2017/10/09 23:21

    失礼しました。ご確認ください。

    キャンセル

回答 2

+1

エラー内容に記載のエラーの発生箇所は特定できませんでした。
ご提示いただいているコードがsystem.phpということで認識あっておりますでしょうか。

①フォームから格納したデータを呼び出すプログラムのやり方は問題ないでしょうか?

処理の前半ではINSERT文によりデータの登録が行われているように見えます。
いずれかのページからPOSTでフォームデータが渡される画面なのでしょうか。

後半の処理では取得したデータを表示するような記述がありますが、これがファイルの全文なのであれば、SELECT文等によるデータの取得はどこにも記述されていないようです、と書いていましたが追記されているようですね。詳しく見ていませんが、こちらはデータがあれば動作するのではないでしょうか。

INSERTの箇所にもおかしいと思われる点があります。
':name' =>の直後から最後の記述までが[ ]で囲まれているため、下記のように解釈されます。
これは想定の内容になっているでしょうか?

Array
(
    [:name] => Array
        (
            [0] => 
            [:prefecture] => 
            [:city] => 
            [:address] => 
            [:type] => 
            [:tel] => 
            [:peron_name] => 
            [:copies] => 
            [:set_type] => 
        )

)

②<?php ?>のつけどころがわからない。これであっていますでしょうか?

最初の<?phpと最後の?>が対応するのだとすれば、記述がネストしています。
<?php ?>はネストして記述することはできません。
一部を抜粋し、ついでにheadタグの不存在など修正すると下記のような<?php ?>の記載対応となるものと思われます。

<!DOCTYPE html>
<html>
<head>
(略)
  <title>システム管理</title>
</head>
<body>
<?php
$dsn = "mysql:dbname=delivery_system;host=localhost;charset=utf8";
(略)
    die();
}
?>
  <table border='1' class="TableStyle1" width="1000">
(略)
<?php 
$sql = "SELECT * FROM table_name";
$stmt = $db->query($sql);
foreach($stmt as $row){
?> 
    <tr>
(略)
    </tr>
<?php 
} 
?>
  </table> 
</body>
</html>

追記:
下記コメントでも触れましたが、質問に記載のエラーメッセージは下記行の記述が原因と思われます。

$stt = &db -> prepare(&sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$ cat -n 95631.php
     1  <?php
     2  $dsn = "mysql:dbname=delivery_system;host=localhost;charset=utf8";
     3  $user = "root";
     4  $password = "";
     5  try{
     6      $db = new PDO($dsn,$user,$password);
     7      $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     8      $sql='insert into delivery_list (name,prefecture,city,address,type,tel,person_name,copies,set_type)
     9       values(:name,:prefecture,:city,:address,:type,:tel,:person_name,:copies,:set_type)';
    10       $stt = &db -> prepare(&sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    11       $stt ->execute(array(':name' => [$_POST['name'],':prefecture' => $_POST['prefecture'],':city' => $_POST['city'],':address' => $_POST['address'],':type' => $_POST['type'],':tel' => $_POST['tel'],':peron_name' => $_POST['person_name'],':copies' => $_POST['copies'],':set_type' => $_POST['set_type']]));
    12  }catch(PDOException $error){
    13      echo "接続失敗:".$error->getMessage();
    14      die();
    15  }
$ php -l 95631.php
PHP Parse error:  syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting '(' in 95631.php on line 10

Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting '(' in 95631.php on line 10
Errors parsing 95631.php

対応としては、&を$に置き換えてください。

$stt = $db -> prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));

また、下記箇所の記述もSQL中に改行が含まれるので望ましくありません。

    $sql='insert into delivery_list (name,prefecture,city,address,type,tel,person_name,copies,set_type) 
     values(:name,:prefecture,:city,:address,:type,:tel,:person_name,:copies,:set_type)';

コード中で改行する場合は、文字列を分割して結合するような対応とした方がよいかと思います。

    $sql='insert into delivery_list (name,prefecture,city,address,type,tel,person_name,copies,set_type)'
        . ' values(:name,:prefecture,:city,:address,:type,:tel,:person_name,:copies,:set_type)';

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/10 00:03

    ご回答ありがとうございます。
    >いずれかのページからPOSTでフォームデータが渡される画面なのでしょうか。
    はい、そうです。

    >INSERTの箇所にもおかしいと思われる点があります。
    こちらも修正しました。

    ><?php ?>はネストして記述することはできません。
    確かにネストされていました。

    ご指摘いただいた点おっしゃる通りでした。ありがとうございます。ただ、まだエラーが変わらないので他もおかしな点がありそうです、、、ちょっと地道に調べて見ます。

    キャンセル

  • 2017/10/10 00:19

    エラーの発生箇所がもし提示されていない部分にあるのだとすれば、指摘のしようもありません。エラー発生箇所の特定のために、まずは全てコメントアウトするなどして動作ができる状態にしてから、部分ごとに確認を進められるとよいでしょう。

    キャンセル

  • 2017/10/10 00:22

    読み飛ばしていましたが、下記の&は$db、$sqlなのではありませんか?
    $stt = &db -> prepare(&sql

    キャンセル

  • 2017/10/10 20:51

    ご指摘ありがとうございます。ただ、エラー状態が変わらなかったので初めから検証してみますm(._.)m

    キャンセル

0

①フォームから格納したデータを呼び出すプログラムのやり方は問題ないでしょうか?

データを呼び出す記述はどこにも書かれていません。

②<?php ?>のつけどころがわからない。これであっていますでしょうか? 

問題ないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/09 23:35

    ありがとうございます。
    >データを呼び出す記述はどこにも書かれていません。
    SELECT文を追加して見ました。もしよろしければ再度ご確認頂けますと幸いです。

    キャンセル

  • 2017/10/09 23:35

    何を確認して欲しいんですか?

    キャンセル

  • 2017/10/09 23:38

    ①フォームから格納したデータを呼び出すプログラムのやり方は問題ないでしょうか?
    上記についてです。

    キャンセル

  • 2017/10/09 23:40

    動かしてみればわかることだと思いますが、あっていればテーブルにレコードセットが表示されるはずですね。動作させて動かないのでしたら、間違っていると言うことです。

    まず、$row がなんの値も代入されることなく、突然出ていることに気づいていますか?

    キャンセル

  • 2017/10/10 00:04

    >$row がなんの値も代入されることなく、突然出ていること
    foreachで&stmtの値を代入するために登場させたつもりですが、その前に値を代入しておかなければいけないということでしょうか?勉強不足ですみません。もう一度foreachについて調べて見ます。

    キャンセル

  • 2017/10/10 00:18

    PDOについて、公式マニュアルを調べましょう。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19224questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5529questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。