0

mysql クエリを使用して顧客情報を更新しようとしています。変数は次のように定義されています。

$member_id = $_POST['member_id'];
$username = $_POST['username'];
$password = $_POST['password'];
$bizname = $_POST['bizname'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$url = $_POST['url'];
$contact = $_POST['contact'];
$notes = $_POST['notes'];
$sales_rep = $_POST['sales_rep'];
$member_type = $_POST['member_type'];

$password = md5($password);

以下のクエリを実行すると、データベースで何も更新されません

$qry = "update members set username='".$username."',password='".$password."',bizname='".$bizname."',phone='".$phone."',email='".$email."',url='".$url."',contact='".$contact."',notes='".$notes."',sales_rep='".$sales_rep."',member_type='".$member_type."' where member_id='".$member_id."'";

私はエコーし$qry、結果は以下のとおりです。

update members set 
username='',password='d41d8cd98f00b204e9800998ecf8427e',bizname='',phone='',
email='',url='',contact='',notes='',sales_rep='',member_type='' 
where member_id=''

$password変数だけが値を持つ理由について、誰かが考えを持っていますか? 他の変数でmd5暗号化を使用して、それが機能するかどうかを確認してみましたが、それらに値が含まれますが、明らかにパスワードに対してのみこれを行いたいです。

編集: これは edit-client.php フォームです

    <?php
require_once('auth.php');
require_once('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 http-equiv="Content-Type" content="text/html; />
<title>Untitled Document</title>
</head>

<body>
<?php


//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

//define username variable and sanitize
$username = clean($_POST['username']);

//Run query for selected user and store in an array
$result = mysql_query("select * from members where username='".$username."'");
$row = mysql_fetch_array($result);

//display all clients information in a form to edit
echo '<h1>'.$username.'</h1>';
echo '<form name="update-client" action="update-client.php" />';
echo '<table>';
echo '<tr><td>';
echo '<input type="hidden" name="member_id" value="'.$row['member_id'].'"';
echo '</td></tr>';
echo '<tr><td>';
echo 'Username: <input name="username" type="text" value="'.$username.'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Password: <input name="password" type="text" value="'.$row['password'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Business Name: <input name="bizname" type="text" value="'.$row['bizname'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Phone: <input name="phone" type="text" value="'.$row['phone'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Email: <input name="email" type="text" value="'.$row['email'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Website Address: <input name="url" type="text" value="'.$row['url'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Contact: <input name="contact" type="text" value="'.$row['contact'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Notes: <input name="notes" type="text" value="'.$row['notes'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo 'Sales Representative: <input name="sales_rep" type="text" value="'.$row['sales_rep'].'" />';
echo '</td></tr>';
echo '<tr><td>';
echo '<input name="submit" type="submit" value="Edit" />';
echo '</td></tr>';
echo '</table>';
echo '</form>';


?>
</body>
</html>
4

2 に答える 2

1

変化する:

echo '<form name="update-client" action="update-client.php" />';

に:

echo '<form name="update-client" action="update-client.php" method="post"/>';

あなたが忘れてしまったmethod="post"

于 2012-06-19T23:21:28.350 に答える
1

デバッグに費やす時間を制限するために、常に値/エラーを確認する必要があります。

たとえば、次のようなことを行う方がはるかに良い方法です。

if (isset ($_POST['member_id']) && !empty ($_POST['member_id'])) {
  $member_id = $_POST['member_id'];
} else {
  echo 'Error: member_id not provided!';
}

そして、すべてのフィールドに対してそれを行いたいと思うでしょう。さらに、コードにいくつかの検証を組み込み (数値のみ、有効な書式設定、SQL インジェクションなどをチェック)、入力が完全で、有効で安全な場合にのみ、実際の SQL を続行する必要があります。

これは非常に基本的なことですが、スクリプトでこれを開始すると、問題がどこにあるかがすぐにわかります。

ただし、より具体的には、HTML フォームの内容を投稿していただく必要があります。

EDIT:また、SQLクエリを読みやすく/デバッグしやすい方法でフォーマットすることをお勧めします。あなたの例では、次のように書きます。

$qry = "UPDATE `members`
        SET    `username`    = '$username',
               `password`    = '$password',
               `bizname`     = '$bizname',
               `phone`       = '$phone',
               `email`       = '$email',
               `url`         = '$url',
               `contact`     = '$contact',
               `notes`       = '$notes',
               `sales_rep`   = '$sales_rep',
               `member_type` = '$member_type' 
         WHERE `member_id`   = '$member_id'";

また、「.$var」を使用していないこともわかります。これは、PHP 文字列で二重引用符を使用すると変数を直接参照できるためです。一方、単一引用符を使用した場合は、文字列を終了して変数を挿入する必要があります。

于 2012-06-19T22:42:23.493 に答える