• 締切済み

PHP初心者です。syntax error, unexpectedについて

PHP初心者です。現在PHPでSQliteを動かすプログラムを勉強しているのですが、「syntax error, unexpected T_ELSE」が出てきて困っています。 「SQLite入門」という書籍に書いてある通りに打ち込んでいるのですが、下のプログラムの■の部分でエラーが出ています。 何が原因なのでしょうか?知恵をお貸しください。 <?php //データ取得 $act = (isset($_POST["act"])) ? $_POST["act"] : ""; $id = (isset($_REQUEST["id"])) ? intval($_RIQUEST["id"]) : ""; $contents = (isset($_POST["contents"])) ? $_POST["contents"] : ""; $title = (isset($_POST["title"])) ? $_POST["title"] : "(無題)"; $dt = date("y-m-d H:i:s"); //データベース初期設定 $conn = init(); //処理分岐 if($act == "保存" and $contents <> ""){ //保存 if(empty($id)){ //新規保存 $id = add_data($conn, $title, $contents, $dt); }else{ //既存データ保存 update_data($conn, $id, $title, $contents, $dt); } }elseif($act == "選択したデータを削除"){ //削除 if(isset($_POST["c1"]));{ delete_data($conn, $_POST["c1"]); }else{   ■ここ echo "削除するデータが選択されていませんよ"; } }elseif($act == "全データ削除"){ //全データ削除 delete_data($conn); }elseif(act == "新規作成"){ //新規作成 clear_data(); }elseif(!empty($id)){ //編集 $row = get_data($conn, $id); $title = $row["title"]; $contents = $row["contents"]; } //データベースの初期化 function init(){ //データベースに接続 $conn = new PDD("sqlite:memo.sqlite"); //データベースの作成 $sql = "CREATE TABLE IF NOT EXISTS memo( id INTEGER PRIMARY KEY AUTOINCREMENT, tilte TEXT NOT NULL, contents TEXT NOT NULL, dt TEXT NOT NULL )"; $stmt = $conn->prepare($sql); $stmt->execute89; return $conn; } //データの追加 function add_data($conn, $title, $contents, $dt){ $sql = "INSERT INTO memo(title, contents, dt) VALUES(:title, :contents, :dt)"; $stme = $conn->prepare($sql); $stmt->bindParam(":title", $title); $stmt->bindParam(":contents", $contents); $stmt->bindParam(":dt", $dt); $stmt->execute(); $id = $conn->lastInsertId(); return $id; } //データ追加 function update_data($conn, $id, $title, $contents, $dt){ $sql = "UPDATE memo SET title = :title, contents = :contents,dt = :dt WHERE id = :id"; $stmt = $conn->prepare($sql); $stmt->bindParam(":id", $id); $stmt->bindParam(":title", $title); $stmt->bindParam(":contents", $contents); $stmt->bindParam(":dt", $dt); $stmt->execute(); } //指定データ削除 function delete_data($conn, $data){ $sql = "DELETE FROM memo WHERE (id = :id)"; $stmt = $conn->prepare($sql); for($i = 0; $i < count($data); $i++){ $stmt->bindParam(":id", $data[$i]); $stmt->execyte(); } clear_data(); } //全データ削除 function delete_all_data($conn{ $sql = "DELETE FROM memo"; $stmt = $conn->prepare($sql); $stmt->execute(); clear_data(); } //データのクリア function clear_data(){ global $id, $title, $contents; $id = ""; $title = "(無題)"; $contents = ""; } //編集データの取得 function get_date($conn, $id){ $sql = "SELECT * FROM memo WHERE id = :id"; $stmt = $conn->prepare($sql); $stmt = bindParam(":id", $id); $stmt = execute(); $row = $stmt->fetch(PDD::FETCH_ASSOC); return $row; } ?>

  • PHP
  • 回答数1
  • ありがとう数3

みんなの回答

  • nza49739
  • ベストアンサー率46% (29/62)
回答No.1

"syntax error"とは文法上の間違いがあることを指摘しています。 問題の箇所でエラーとなっているのは if(isset($_POST["c1"]));{ ← ここに";"がある delete_data($conn, $_POST["c1"]); }else{   ■ここ echo "削除するデータが選択されていませんよ"; } 上記の説明どおり、if文が";”の存在のため、予測できない"else"があるとされたためです。もし、書いた通りに入力したのであれば、災難でしたね。

関連するQ&A

  • mysqlのデータをPDOでDELETEできない

    PDOオブジェクト(PHP)を使用したmysqlのデータ削除について、質問させてください。 PDOオブジェクトを使用して、mysqlのデータ読み込み・削除を行っています。 特定のデータを読み込み、処理を行わせた後、対象のデータの削除をしたいのですが 読み込みは出来るのに、削除で失敗してしまいます。 処理を行わせるSQLをvar_dumpで出力させ、 それを直接phpMyAdminでSQL実行してみたのですが、 問題なく削除が行われています。 SQLの問題ではなく、PHP側の問題だと思うのですが、 解決方法が見つかっておりません。 知恵を貸していただけないでしょうか。 $post_data = explode('¥t', $_POST['data_array']); $user_id = $post_data[0]; $account_name = $post_data[1]; $data_id = $post_data[2]; $gunre_id = $post_data[3]; try { // DB接続 $dbh = new PDO($serverInfo["SERVER"], $serverInfo["USER"], $serverInfo["PASS"]); $dbh -> query('SET NAMES utf8'); // 処理させる対象アカウント情報を取得 $sql_account; $sql_account = 'SELECT * FROM '. $serverInfo['TBL_ACCOUNT']. ' WHERE GUNRE_ID = :gunre'; } $stmt_account = $dbh -> prepare($sql_account); $stmt_account -> bindParam(':gunre', $gunre_id, PDO::PARAM_STR); $stmt_account -> execute(); while($account = $stmt_account -> fetch(PDO::FETCH_ASSOC)) { // 取得してきたデータを使用して処理 // この処理は正常に行われているので、SELECTは正常に行われていると考えられます } // 処理が完了したら、データを削除 // ↓ここで組み立てたSQLを出力し、phpMyAdminでSQL実行すると、データは削除されました $sql_delete = 'DELETE FROM '. $serverInfo['TBL_DATA']. ' WHERE USER_ID = "'. $user_id. '" AND ACCOUNT_NAME = "'. $account_name. '" AND DATA_ID = "'. $data_id. '"'; $stmt_delete = $dbh -> prepare($sql_delete); // ↓元々はbindParamで指定していたのですが、処理が出来なかったので // $SQL_deleteの中に値を埋め込み、処理を行わせました。結局出来なかったのですが・・・ // $stmt_delete -> bindParam(':id', $user_id, PDO::PARAM_STR); // $stmt_delete -> bindParam(':account', $account_name, PDO::PARAM_STR); // $stmt_delete -> bindParam(':data', $data_id, PDO::PARAM_STR); $result = $stmt_delete -> execute(); var_dump($result); // ←出力結果は「false」です } catch (Exception $ex) { echo '<font color="red">システムエラーが発生しました</font><br />'; exit(); } 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLのテーブル名を変数に置いた場合

    お世話になります。 jQueryのプラグインを使用してDBから吐き出したデータを並べ替えをして、 UPDATEをさせているのですが、UPDATE先のテーブル名を変数に置いた場合、 例えば、 $id_set = "1"; if (isset($_POST['result'])) { $sql = "UPDATE `{$id_set}` SET no = ? WHERE id = ?"; $stmt = $conn->prepare($sql); foreach (explode(',', $_POST['result']) as $i => $id) { $stmt->execute(array(++$i, $id)); } //foreachの終了 } //if (isset($_POST['result'])) の終了 $sql1 = "SELECT id, name, price, no FROM `{$id_set}` ORDER BY no"; $stmt = $conn->prepare($sql1); $stmt->execute(); foreach ($stmt as $row) { $state[] = array("id"=>$row['id'], "name"=>$row['name'], "price"=>$row['price'], "no"=>$row['no']); $this->smarty_obj->assign("state_loop",$state); } //foreachの終了 とすれば、「 1 」というテーブルのデータをSELECTしてUPDATEと正常に走るのですが、 $id_set = $_POST["id"]; 等としてpostした場合、UPDATEの際に「 Call to a member function execute 」のエラーが 吐かれます。該当のテーブルが存在しないと認識されているのだと思いますが、 ページ遷移してくる際に持ってきたデータを活用してテーブル名にセットして、 尚且つ正常にUPDATEさせるにはどの様な構文にすれば良いのでしょうか? ご教示の程、どうぞよろしくお願い申し上げます。 ---------------- ▼スペック PHP 5.3.3 MySQL 5.0.95 ----------------

    • ベストアンサー
    • PHP
  • HTML+PHPのリストボックス表示について

    現在HTML+PHPで勉強しながらアプリを作成しています。 MySQLからデータをよみ、その値からリストボックスを作成し表示させていますが、そのリストボックスがテーブル内に表示されず、位置がずれて表示されます。どうすればうまくテーブル内に表示されるのか教えてください。よろしくお願いします。(PHPというよりHTMLの質問かもしれませんが) <?php //データベース接続設定 $dbtype="mysql"; $sv="localhost"; $dbname="hogehoge"; $user="root"; $pass="abcdefg"; //データベースに接続 $dsn = "$dbtype:dbname=$dbname;host=$sv"; $conn = new PDO($dsn,$user,$pass); //---------------------------------------- // ■ POST時 //---------------------------------------- if ($_SERVER["REQUEST_METHOD"]=="POST"){ // □ 新規追加 if (isset($_POST["submit_add"])){ $new_code = htmlspecialchars($_POST["new_code"], ENT_QUOTES); //追加コード $new_kbncod = htmlspecialchars($_POST["new_kbncod"], ENT_QUOTES); //追加項目 $sql = "INSERT INTO kekka VALUES(null,'$new_code','$new_kbncod')"; $stmt = $conn->prepare($sql); $stmt->execute(); } // □ 変更 if (isset($_POST["submit_upd"])){ $id = key($_POST["submit_upd"]); //押下したボタン番号を取得 //-------------------------------- // □ POSTされたデータを取得 //-------------------------------- $upd_kbncod = htmlspecialchars($_POST["kbn_code"][$id], ENT_QUOTES); //変更項目 $upd_code = htmlspecialchars($_POST["code"][$id], ENT_QUOTES); //変更コード $sql = "UPDATE kekka SET code = $upd_code, kbn_code = $upd_kbncod WHERE id=$id"; $stmt = $conn->prepare($sql); $stmt->execute(); } // □ 削除 if (isset($_POST["submit_del"])){ $id = key($_POST["submit_del"]); //押下したボタン番号を取得 //テーブルからデータを削除 $sql = "DELETE FROM kekka WHERE (id = $id)"; $stmt = $conn->prepare($sql); $stmt->execute(); } } //===================================================================== // ■ H T M L //===================================================================== ?> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>テスト</title> </head> <body> <h1>テスト中</h1> <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST"> <table border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#666666"> <tr bgcolor="#eee8aa"> <td align="center"><font size="2">項目名(リスト)</font></td> <td align="center"><font size="2">コード:数字4桁</font></td> <td align="center"><font size="2">ボタン</font></td> </tr> <?php //---------------------------------------- // □:テーブルからデータを読む //---------------------------------------- $sql = "SELECT * FROM kekka ORDER BY id"; $stmt = $conn->prepare($sql); $stmt->execute(); while($row = $stmt->fetch()){ $id = $row["id"]; $code = $row["code"]; $kbncod = $row["kbn_code"]; echo "<td>".disp_list($conn,"code_hyo", "KBN_CODE", "KBN_NAME", $kbncod, "kbn_code[$id]")."</td>"; echo "<td><input type=text name=code[$id] value=$code size=10></td>"; echo "<td><input type=submit name=submit_upd[$id] value='変更' size=4>"; echo "<input type=submit name=submit_del[$id] value='削除' size=4></td>"; echo "</tr>"; } //追加リスト表示用に、変数の初期化を行う。(ゴミデータ除去) $kbncod=""; $code=""; $new_kbncod=""; $new_code=""; ?> <tr> <td><?php echo disp_list($conn,"code_hyo", "KBN_CODE", "KBN_NAME", $new_kbncod, "new_kbncod"); ?></td> <td><input type="text" name="new_code" value="<?=$new_code ?>" size="15"></td> <td><input type="submit" name="submit_add" value="追加" size="4"></td> </tr> </table> </form> </body> </html> <?php // パラメータ:接続/テーブル名/リスト値/表示値/選択値/リスト名称 function disp_list( $conn2,$table, $value, $text,$selected_value, $m_name) { // DBから項目情報を取り出す $sql2 = "SELECT * FROM " . $table . " ORDER BY " . $value; $stmt2 = $conn2->prepare($sql2); $stmt2->execute(); // 取り出した項目情報をプルダウンリストに表示する echo "<select name=\"" . $m_name . "\">"; while ($row2 = $stmt2->fetch()){ echo "<option "; if ($selected_value == $row2[$value]) { echo " selected "; } echo " value=\"".$row2[$value]."\">"; echo $row2[$text]."</option>"; } echo "</select>"; } ?>

    • ベストアンサー
    • PHP
  • レコード削除・sqlインジェクション対策

    このようなSQL文は危険でしょうか? $sql = "delete テーブル名 where id = :id"; $stmt = $dbh->prepare($sql); $stmt->execute(array(":id" => $_POST['id'])); 上記の例だと、$_POST['id']は、 ちゃんとエスケープできているのでしょうか?

    • ベストアンサー
    • MySQL
  • PDOクラスのprepareメソッドについて。

    いつもお世話になっております。 PHP5.2.5 1|$conn = new PDO($dsn,~略~);   //データベース接続 2|$sql = "略";             //SQL文 3|$stmt = $conn->prepare($sql);   // PDOStatementオブジェクトを返す 4|$stmt->bindParam(~略~);     //プレースホルダに変数をバインド 5|$stmt->execute();         //クエリ実行 という、よくある流れにおいて、 4行目のbindParamメソッドは、PDOクラスのメソッドではなく、 PDOStatementクラスのメソッドだと思うのですが、 これを、$stmt-> で呼び出せているのが、どうしてなのかがよく分からずにいます。 3行目で、PDOクラスのprepareメソッドを使うことで、 PDOStatementオブジェクトが返されるため、 その返り値を受け取った「$stmt」によって、 「$stmt->bindParam」できているという感じでしょうか? ★まず、この私の考え方について、合っているか間違っているか、 お聞きしたいと思います。(質問1) //=================================================== 恐らく、上記の考え方は「合っている」のだと思うのですが、 その上で、さらに質問をさせて頂くと、 ではなぜ、PDOStatementクラスを使う時に、 new PDOStatement; というようにしないのでしょうね? PDOクラスの1メソッドであるprepareメソッドを使うようにして、 PDOStatementクラスをインスタンス化しているのはなぜなのでしょう? (prepareメソッドはどういうコードになっているのでしょう?その中で、new PDOStatement という記述があるのでしょうね?) PDOのこのような仕様の背景には、どういう意図があるのか、 どなたか何か思い当たることなどありましたらご助言下さい。 (質問2)

    • ベストアンサー
    • PHP
  • phpのコードでうまく動かず困っています

    現在ある書籍でログイン機能の基礎を学んでいるのですが、エラーが出て困っています。 書籍内のコードや付属のサンプルファイルの物をいれたり確認したりするのですがエラーがでます。 エラー Fatal error: Call to a member function bindParam() on a non-object in C:\xampp\htdocs\tennis\login.php on line 15 (この15行目は〇の部分です) コード <?php session_start(); //セッション開始 if(isset($_SESSION['id'])){ //セッションにユーザーIDがある(ログインしている) header('Location:index.php'); }else if(isset($_POST['name']) && isset($_POST['password'])){ $dsn = 'mysql:host=localhost; dbname=tennis; charset=utf8'; $user ='tennisuser'; $password = 'password'; try{ $db = new PDO($dsn, $user, $password); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $stmt = $db->prepare("SELECT * FROM users WHERE name=:name AND password=:pass"); ○$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR); $stmt->bindParam(':pass', sha1($_POST['password']), PDO::PARAM_STR); //クエリ実行 $stmt->execute(); if($row = $stmt->fetch()){ //ユーザーが存在していたので、セッションにユーザーIDをセット $_SESSION['id'] = $row['id']; header('Location:index.php'); exit(); }else{ //1レコードも取得できなかった場合 //ユーザー名・パスワードは間違っている可能性があるのでもう一度ログインフォームを表示 header('Location:login.php'); exit(); } }catch(PDOException $e){ die('エラー:'.$e->getMessage()); } }else{ //ログインしていない場合はログインフォームを表示 ?> <html> ~省略~

    • ベストアンサー
    • PHP
  • 突如!接続エラー!?php

    いつもお世話になりありがとうございます。 標記の件。 下記のエラーがlocalhost/index.php/で出ました。 接続失敗SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for $host failed: ���̂悤�ȃz�X�g�͕s���ł��B 大変恐縮ではございますが、下記のコードを吟味して頂けないでしょうか? 度々申し訳ございません。 宜しくお願い申し上げます。      記 index.php <?php require_once ('blog.php'); $blog = new Blog(); $blogData = $blog->getAll(); function h($s){ return htmlspecialchars($s, ENT_QUOTES,"UTF-8"); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <p><a href="/form.html">新規作成</a></p> <table> <tr> <th>タイトル</th> <th>カテゴリー</th> <th>投稿日時</th> <tr> <?php foreach ($blogData as $column): ?> <tr> <td><?php echo h($column['title']) ?></td> <td><?php echo h($blog->setCategoryName($column['category'])) ?></td> <td><?php echo h($column['post_at']) ?></td> <td><a href="/detail.php?id=<?php echo $column['id'] ?>">詳細</a></td> <td><a href="/update_form.php?id=<?php echo $column['id'] ?>">編集</a></td> <td><a href="/blog_delete.php?id=<?php echo $column['id'] ?>">削除</a></td> </tr> <?php endforeach; ?> </body> </html> env.php <?php define('DB_HOST','localhost'); define('DB_NAME','blog_app'); define('DB_USER','blog_user'); define('DB_PASS','**********'); ?> dbc.php <?php require_once('env.php'); class Dbc { protected $table_name; protected function dbConnect() { $host = DB_HOST; $dbname = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = 'mysql:host=$host;dbname=$dbname;blog_app;charset=utf8'; try { $dbh = new \PDO($dsn, $user, $pass, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(\PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $sql = "SELECT * FROM $this->table_name"; $stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function delete($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); echo 'ブログを削除しました!'; return $result; } } ?> <p><a href="/">戻る</a></p> 大変、お手数をおかけします。 どうか教えてください。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 前のidをコピーするSQL文

    MySQLを使って管理画面を作っております。 $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; という文で使ったidをコピーしてから次のINSERTの文でそのidの番号を使って別テーブルのカラムにその番号をINSERTするしくみを作りたいのですがなかなか上手くいきません。 var_dump($last_id);では番号がコピーされているのですが、INSERTができません。 いつもお世話になってしまい大変恐縮なのですが、どなたかご教授いただけないでしょうか?よろしくお願い致します。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="../../xxxxx/team.css"/> <title>選手追加完了</title> </head> <body> <div id="main"> <?php $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_position_id=$_POST['position_id']; $pro_team=$_POST['team_name']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $pro_position_id=htmlspecialchars($pro_position_id); $pro_team=htmlspecialchars($pro_team); $dns = "mysql:host=localhost; dbname=player;charset=utf8"; $dns_id = "xxxxx"; $dns_pw = "xxxxxxx"; try { $conn = new PDO($dns, $dns_id, $dns_pw, array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (Exception $e) { echo 'ERROR: ' . $e->getMessage(); die(); } try { //トランザクションを開始する。オートコミットがオフになる $conn->beginTransaction(); //処理その(1) $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; $stmt=$conn->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[]=$pro_position_id; $stmt->execute($data); //直近id取得 $last_id_sql = "SELECT LAST_INSERT_ID() as id"; $stmt = $conn->prepare($last_id_sql); $stmt->execute(); $last_id = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); //確認var_dump($last_id); //処理その(2) $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql2='INSERT INTO team(team_id,team_name) VALUES(?,?)'; $stmt=$conn->prepare($sql2); $data2[]=$pro_team; $data2[]=$last_id; $stmt->execute(array($last_id,$pro_team)); $stmt->closeCursor(); //確認var_dump($last_id); //変更をコミットする $conn->commit(); } catch(PDOException $e){ //変更をロールバックする $conn->rollBack(); echo 'ERROR:' . $e->getMessage(); } // 切断 $conn = null; print $pro_name; print'を追加しました。<br />'; ?> <a href="xxxxx">戻る</a> </div><!--main--> </body> </html>

    • ベストアンサー
    • MySQL
  • コードの終端にエラー???php

    いつもお世話になり誠にありがとうございます。 標記の件。 エラーメッセージは次です。 ( ! ) Parse error: syntax error, unexpected end of file in /srv/www/htdocs/blog.php on line 98 コードは97行になります。 どうか教えてください。 アドバイスを宜しくお願い申し上げます。      記 <?php require_once('dbc.php'); class Blog extends Dbc { protected $table_name = 'blog'; //カテゴリー名を表示 //引数:数字 //返り値:カテゴリーの文字列 public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function blogCreate($blogs) { $sql = "INSERT INTO blog(title,content,category,publish_status) VALUES (:title, :content, :category, :publish_status)"; $dbh = $this->dbConnect(); $dbh->biginTransaction(); try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT); $stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT); $stmt->execute(); $stmt->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } function blogUpdate($blogs) { $sql = "UPDATE $this->table_name SET title = :title, content = :content, category = :category, publish_status = :publish_status Where id = :id"; $dbh = dbConnect(); $dbh->biginTransaction(); try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT); $stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT); $stmt->execute(); $stmt->commit(); echo 'ブログを更新しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } } function blogUpdate($blogs){ } //ブログのバリデーション function blogValidate($blogs) { if (empty($blogs['title'])) { exit('タイトルを入力してください。'); } if (mb_strlen($blogs['title']) > 191) { exit('タイトルは191文字以下にしてください。'); } if (empty($blogs['content'])) { exit('本文を入力してください。'); } if (empty($blogs['category'])) { exit('カテゴリーは必須です。'); } if (empty($blogs['publish_status'])) { exit('公開ステータスは必須です。'); } } ?>

    • ベストアンサー
    • PHP
  • PHP初心者です。エラーが出て困っております。

    ※下記がスクリプトです。((エラーは最下部にございます。) <?php require('../dbconnect.php'); session_start(); if (!empty($_POST)) { // エラー確認 if (isset($_POST['name']) == '') { $error['name'] = 'blank'; } if (isset($_POST['mail1']) == '') { $error['mail1'] = 'blank'; ..........省略 } } // 重複アカウントチェック if (isset($_POST['mail1'])) { if (empty($error)) ; $sql = sprintf('SELECT COUNT(*) AS cnt FROM ○○ WHERE mail1="%s"', mysql_real_escape_string($_POST['mail1']) ); $record = mysql_query($sql) or die(mysql_error()); $table = mysql_fetch_assoc($record); if ($table['cnt'] > 0) { $error['mail1'] = 'duplicate'; } } if (empty($error)) { // 画像をアップロードする $upfile = date('YmdHis') . $_FILES['upfile']['name']; move_uploaded_file($_FILES['upfile']['tmp_name'], '../member_picture/' . $upfile); $_SESSION['join'] = $_POST; $_SESSION['join']['upfile'] = $upfile; header('Location: check.php'); } } // 書き直し if (isset($_REQUEST['action']) == ('rewrite')) { $_POST = $_SESSION['join']; $error['rewite'] = true; } ?> <html.....省略 <body> <h1>会員登録</h1> <div id="content"> <p>記入ください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd> <input type="text" name="name" size="35" maxlength="255" value="<?php if (isset($_POST['name'])) {echo htmlspecialchars($_POST['name'],ENT_QUOTES, 'UTF-8'); } ?>" /> <?php if (!isset($error['name'])) {$error['name']="blank";} if ($error['name'] == 'blank'): ?> <p class="error">* ニックネーム</p> <?php endif; ?> </dd>................続く ※エラーは、 Notice Undefined index: name in....... です。 どうすれば上記エラーが消えますでしょうか? また、その際はどこをどのように直せばよろしいでしょうか。 お手数をおかけ致しますが、お力をお貸しいただければ嬉しく思います。 お願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう