アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。

php初心者です。sqlでデータの更新を行いたいのですが、更新ができません。
お力を貸していただきたいです。

t_edit.php

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>商品修正</title>
<link rel="stylesheet" href="kanri.css">
</head>
<body>
<div class="base">
<?php
if ($error) echo "<span class=\"error\">$error</span>" ?>
<form action="edit.php" method="post" accept-charset="utf8">
<p>
商品名<br>
<input type="text" name="name" value="<?php echo $name ?>">
</p>
<p>
商品説明<br>
<textarea name="comment" rows="10" cols="60"><?php echo $comment ?></textarea>
</p>
<p>
価格<br>
<input type="text" name="price" value="<?php echo $price ?>">
</p>
<p>
<input type="hidden" name="code" value="<?php echo $code ?>">
<input type="submit" name="submit" value="更新">
</p>
</form>
</div>
<div class="base">
<a href="index.php">一覧に戻る</a> 
</div>
</body>
</html>

edit.php

<?php

require_once('index.php');

$link = connect();
mysql_query("set names utf8");


$error = '';
if (@$_POST['submit']) {
$code = (string)filter_input(INPUT_POST, 'code');
$name = (string)filter_input(INPUT_POST, 'name');
$comment = (string)filter_input(INPUT_POST, 'comment');
$price = (string)filter_input(INPUT_POST, 'price');
if (!$name) $error .= '商品名がありません。<br>';
if (!$comment) $error .= '商品説明がありません。<br>';
if (!$price) $error .= '価格がありません。<br>';
if (preg_match('/\D/', $price)) $error .= '価格が不正です。<br>';
if (!$error) {
$sql = "UPDATE goods SET name='$name',comment='$comment',price=$price WHERE code=$code";
Var_dump($name);
Var_dump($comment);
Var_dump($sql);
$sql = prepare($sql);
$result = mysql_query($sql);
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
exit();
}
} else {
$code = $_GET['code'];
$sql = "SELECT * FROM `goods` WHERE code=$code";"set name utf8";
$sql = prepare($sql);
$result = mysql_query($sql);
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
while($row = mysql_fetch_array($result)) {
$name = $row['name'];
$comment = $row['comment'];
$price = $row['price'];
}}
require 't_edit.php';
?>

ご教授、宜しく御願い致します。

A 回答 (3件)

どうやら単純に文法エラーですね



$sql = "UPDATE goods SET name='$name',comment='$comment',price=$price WHERE code=$code";をした後の

$sql = prepare($sql);の部分ですが、そもそもprepare処理がなされていないので、
この行をコメントアウトしてみてください
mysql_queryを使う限りいろいろセキュリティ上問題が残りますが、
当座チェックをする限りはなくても問題ないと思います。

もしここの部分が問題だった場合は
prepare関数を調整することになるのでしょう。

ということでPDOを利用して書きなおすほうが早いかもしれません。
    • good
    • 1

とりあえずエラーが発生しているならそのエラー内容を表示すべきです


またなにをもって更新されていないと判断しているか提示ください

>if (@$_POST['submit']) {
以降で$_POST["code"]を利用して更新していますが
更新したデータを取得する部分がelse以降にあるため
更新した直後はデータを確認していませんよね?
しかも検索するコードは$_GET["code"]を利用しているし、
もうすこしきちんとフローを練り直した方がよいのでは?
(PDOへの移行も含めて要検討)
    • good
    • 1
この回答へのお礼

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'\バ\イカラーシャツ\',comment=\'\ステ\ンカラ??\?\',price=5432 WHER' at line 1
と表示されています。

勉強が足らなすぎで申し訳ありません。
ご回答ありがとうございます。

お礼日時:2015/02/26 14:29

mysql_query()で実行される$sqlの中身を直接mysqlで実行して検証してください。



また、プレースホルダーを利用したクエリではないため、クエリキャッシュによるパフォーマンス向上が望めない点、安易な脆弱性が存在する点は認識されていますか?
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
検証してみます。
脆弱性について認識していませんでした。もっと勉強していきます。

お礼日時:2015/02/26 14:32

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