0

私はphpが初めてで、これでうまくいくと思いますが、構文に何か問題があるのか​​ どうかわかりません。これは、フォームから送信されたデータを処理するスクリプトです。

フォームから投稿されたデータにphp変数を設定すると、変数に正しいデータが表示されます。問題はデータベース内のレコードの更新にあり、そうではありません...

DB のテーブルには、adID、iconURL、webURL の 3 つの属性があります。

フォームには 2 つの入力テキスト フィールドと、非表示フィールドの iconPath、webPath、および recordN があります。

<?php
$recNum = $_POST["recordN"];
$iconU = $_POST["iconPath"];
$webU = $_POST["webPath"]; 
echo 'Number of record updated: ' . $recNum;
echo '<br />New Icon Path: ' . $iconU;
echo '<br />New Web Path: ' . $webU;

$con = mysql_connect("localhost","admin","pass");
if (!$con)  {   die('Could not connect: ' . mysql_error());   }

mysql_select_db("DBNAME", $con);

mysql_query("UPDATE adSources set iconURL = $iconU, webURL = $webU 
WHERE adID = $recNum");

mysql_close($con);

echo '<br /><a href="http://mydomain.com/thePage.html" target="_blank">Return to main page</a>' . "\n"; 
?> 

adID = recNum の場合、iconURL = $iconU と webURL = $webU を上書きしたい

$iconU と $webU には使用したい値があり、iconURL と webURL はデータベース内のフィールドの名前です。私はそれらを問​​題なく読み、それらの名前で問題なく表示できますが、これを更新することはできません。

ユーザーとそのすべてに対して、データベースで完全な権限を付与しました。

何か助けはありますか?PHP は、他の言語に比べて非常に醜いように見えます。

4

2 に答える 2

1

変数名に沿って引用符を逃しました。試す:

mysql_query("UPDATE adSources set iconURL = '$iconU', webURL = '$webU'
            WHERE adID = $recNum");

変数もエスケープできるとよいでしょう。

mysql_query("UPDATE adSources set iconURL = '".mysql_real_escape_string($iconU).
            "', webURL = '".mysql_real_escape_string($webU).
            "' WHERE adID = $recNum");

これにより少しは良くなりますが、 の使用mysql_real_escape_string()は実際にはお勧めできません。コツをつかんだら、チェックアウトして交換する必要がPDOあります。

于 2012-07-26T03:58:43.157 に答える
1

デバッグするには、mysql_error() を使用します。文字列 ($iconU など) を引用符で囲む必要があるため、構文にエラーが発生します。

しかし... PDOを学ぶ方がはるかに良いでしょう。これにより、変数のラップと安全化が処理されます。mysql 関数は減価償却されているため、古いものから始めないでください。新しいものから始めてください! http://php.net/manual/en/book.pdo.php

$sth = $dbh->prepare('UPDATE adSources set iconURL = :iconU, webURL = :webU WHERE adID = :recNum');
$sth->bindValue(':iconU', $iconU , PDO::PARAM_STR);
$sth->bindValue(':webU', $webU , PDO::PARAM_STR);
$sth->bindValue(':recNum', $recNum , PDO::PARAM_INT);
$sth->execute();

編集:「ひどく醜い」についてのコメントへの返信。議論を始めるつもりはありませんが、そうです、それは醜いものです。次に、これを素敵なクラスにラップし、エラー処理を正しく行い (try/ctach でラップ)、笑っています。したがって、醜いものから始めれば、すぐにそれをきれいにする方法を学ぶことができます.

于 2012-07-26T04:00:53.253 に答える