-1

誰かがこれを見て、これが私のデータベースを更新していない理由を理解できますか?

これはデータベースからデータを取得するフォームであり、更新ボタンをクリックするとデータベースを更新する必要がありますが、更新されません。

エラーを返しているかどうかを表示する方法はありますか?

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Beerlist Admin</title>
</head>

<body>

<?php include '../beerlist/config.php'; ?>
<table border="0" width="95%" align="center" cellspacing="0" cellpadding="5">
    <tr>

<?php

#///////////////////////////////////
#//////////// ALL BEERS/////////////
#///////////////////////////////////
$sql = "SELECT * FROM bottles ORDER BY name";
$mydata = mysql_query($sql,$con);

if (isset($_POST['update'])){
$UpdateQuery = "UPDATE bottles SET new='$_POST[new]', name='$_POST[name], style='$_POST[style], location='$_POST[location], size='$_POST[size], abv='$_POST[abv], number='$_POST[number], price='$_POST[price]' WHERE name='$_POST[hidden]'";
mysql_query ($UpdateQuery, $con);

};


while($record = mysql_fetch_array($mydata)){

echo "<form action=beerlist_admin.php method=post>";

    echo "<td><input size=7 type=text name=new value=\"" . $record['new'] . "\" > ";
    echo "<input type=text size=50 name=name value=\"" . $record['name'] . "\" >";
    echo "<input type=text size=20 name=style  value=\"" . $record['style'] . "\" >";
    echo "<input type=text size=20 name=location  value=\"" . $record['location'] . "\" >";
    echo "<input type=text size=7 name=size   value=\"" . $record['size'] . "\" >";
    echo "<input type=text size=5 name=abv   value=\"" . $record['abv'] . "\" >";
    echo "<input type=text size=5 name=number   value=\"" . $record['number'] . "\" >";
    echo "<input type=text size=7 name=price   value=\"" .$record['price'] . " \" >";
    echo "<input type=hidden name=hidden value=" . $record['number'] . "\"> <input type=submit name=update value=update></td></tr>";

echo "</form>";
}

echo "</table>"
?>


</body>

</html>
4

1 に答える 1

0

何よりもまず、mysql_*は廃止されたため、MySQLi または PDO への移行を検討し、削除されたときに備えてmysql_*、サイトの動作が停止しないようにする必要があります。


コードはmysql_real_escape_string($variable)、それを防ぐために使用する必要がある SQL インジェクションに対して広く開かれています。

を組み合わせるsprintfことで、期待する変数の種類をさらに定義できます。たとえば、次のようになります。

%s- 文字列データに使用するためのものです。
%d- 数値に使用するためのもので、(符号付き) 10 進数として表示されます。

以下の例では、挿入しようとしているデータとデータベース テーブルのフィールド タイプがわからないため、%s のみを使用しました。

クエリのUPDATE記述が不十分で、提供するデータによってはさまざまなケースで問題が発生する可能性があるためmysql_error、少なくとも開発プロセス中は常に を使用して、この種のエラーをデバッグし、ライブ サイトに移動したら makeこれらのエラーは、代わりにサイレントにファイルに記録されます。

HTML のすべての小さな部分を常に印刷する必要はありません。コードechoをどのように変更したかを確認してください。WHILE

また、テーブル内でフォームを使用している方法は、正しい方法ではない可能性があります。

の内容を投稿していないのでconfig.php、そこに問題があるかどうかもわかりません。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Beerlist Admin</title>
</head>
<body>
<?php
$con = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$con)
{
    die('Not connected : ' . mysql_error());
}

$db_selected = mysql_select_db('beerlist', $con);
if (!$db_selected)
{
    die ('Can\'t use foo : ' . mysql_error());
}
?>
<table border="0" width="95%" align="center" cellspacing="0" cellpadding="5">
<?php
if (isset($_POST['update']))
{
    $UpdateQuery = sprintf("UPDATE bottles 
                               SET new='%s', 
                                   name='%s', 
                                   style='%s',
                                   location='%s',
                                   size='%s',
                                   abv='%s',
                                   number='%s',
                                   price='%s'
                             WHERE name='%s'",
                             mysql_real_escape_string($_POST['new']),
                             mysql_real_escape_string($_POST['name']),
                             mysql_real_escape_string($_POST['style']),
                             mysql_real_escape_string($_POST['location']),
                             mysql_real_escape_string($_POST['size']),
                             mysql_real_escape_string($_POST['abv']),
                             mysql_real_escape_string($_POST['number']),
                             mysql_real_escape_string($_POST['price']),
                             mysql_real_escape_string($_POST['hidden']));
    if (!mysql_query($UpdateQuery))
    {
        die('Invalid query: ' . mysql_error());
    }
}

$sql = "SELECT * 
          FROM bottles 
      ORDER BY name";
$mydata = mysql_query($sql);
if (!$mydata)
{
    die('Invalid query: ' . mysql_error());
}

while($record = mysql_fetch_array($mydata))
{
?>
<form action="beerlist_admin.php" method="post">
<tr><td>
<input size="7" type="text" name="new" value="<?php echo $record['new']; ?>">
<input type="text" size="50" name="name" value="<?php echo $record['name']; ?>">
<input type="text" size="20" name="style" value="<?php echo $record['style']; ?>">
<input type="text" size="20" name="location" value="<?php echo $record['location']; ?>">
<input type="text" size="7" name="size" value="<?php echo $record['size']; ?>">
<input type="text" size="5" name="abv" value="<?php echo $record['abv']; ?>">
<input type="text" size="5" name="number" value="<?php echo $record['number']; ?>">
<input type="text" size="7" name="price" value="<?php echo $record['price']; ?>">
<input type="hidden" name="hidden" value="<?php echo $record['number']; ?>">
<input type="submit" name="update" value="update">
</td></tr>
</form>
<?php
}
?>
</table>
</body>
</html>
于 2013-09-26T19:00:46.227 に答える