2013-09-25 12 views
5

私はここで数十のスレッドを探していますが、解決策を見つけることはまだありません。HTMLフォームとPHPを使用してMySQLを更新してください

入力ボックスにデータベーステーブルの内容を表示するフォームを作成しました。入力ボックスの内容を変更して送信すると、データベースが更新されます。

<html> 
<head> 
</head> 
<body> 

<?php 

$dbhost = '****'; 
$dbuser = '****'; 
$dbpass = '****'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('****'); 

$query = "SELECT * FROM anstalld"; 
$result = mysql_query($query) or die(mysql_error()); 

?> 


<form method="post" action="<?php $_PHP_SELF ?>"> 
<table width="400" border="0" cellspacing="1" cellpadding="2"> 
<tr> 

<?php 

while($row = mysql_fetch_array($result)) 
      { 

$namn = $row['namn']; 
$mandag = $row['mandag']; 
$tisdag = $row['tisdag']; 
$onsdag = $row['onsdag']; 
$torsdag = $row['torsdag']; 
$fredag = $row['fredag']; 
?> 


<td width="100"></td> 
<td><?=$namn?></td> 
</tr> 
<tr> 
<td width="100">Mandag</td> 
<td><input name="mandagid" type="text" value="<?=$mandag?>"></td> 
</tr> 
<tr> 
<td width="100">Tisdag</td> 
<td><input name="tisdagid" type="text" value="<?=$tisdag?>"></td> 
</tr> 
<tr> 
<td width="100">Onsdag</td> 
<td><input name="onsdagid" type="text" value="<?=$onsdag?>"></td> 
</tr> 
<tr> 
<td width="100">Torsdag</td> 
<td><input name="torsdagid" type="text" value="<?=$torsdag?>"></td> 
</tr> 
<tr> 
<td width="100">Fredag</td> 
<td><input name="fredagid" type="text" value="<?=$fredag?>"></td> 
</tr> 
<?php } ?> 
<tr> 
<td width="100"> </td> 
<td> </td> 
</tr> 
<tr> 
<td width="100"> </td> 
<td> 
<input name="update" type="submit" id="update" value="Update"> 
</td> 
</tr> 
</table> 
</form> 



<?php 

if(isset($_POST['update'])) 
{ 

$namn = $_POST['namnid']; 
$mandag = $_POST['mandagid']; 
$tisdag = $_POST['tisdagid']; 
$onsdag = $_POST['onsdagid']; 
$torsdag = $_POST['torsdagid']; 
$fredag = $_POST['fredagid']; 

$sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'"); 

$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysql_error()); 
} 
echo "Updated data successfully\n"; 

} 


?> 
</body> 
</html> 

フォームは、データベースの罰金の内容を示すが、更新時に、私はこのメッセージが表示されます。

あなたのSQL構文でエラーが発生しています。 が近く を使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認し、「1」行1

で私はこの上で取得することができます任意の助けに感謝。

+4

'mysql_ *'関数は**もはや**維持されていないと、新しいコードベースでは使用しないでください。より新しいAPIのために段階的に廃止されています。代わりに、[PDO](http://php.net/pdo)または[MySQLi]([php] http://php.net/mysqli)。 –

+1

これは、入力フィールドに常に同じ名前を持つ複数のフォームを持つため、この方法では機能しません。また、少なくとも隠されたフィールドに 'namn'を置くために欠けています。そしてあなたはたくさんの閉鎖を逃した '}' – djot

+1

@djotマルチフォームのことを指摘してくれてありがとう!静的な名前を使用せずにUPDATEクエリを入力ボックスに向けるにはどうすればよいでしょうか? – user2052849

答えて

4

代わりのMySQLの使用mysqliの、そしてあなたは、データベース名またはスキーマ渡す必要があります。

前:

$conn = mysql_connect($dbhost, $dbuser, $dbpass); 

後:

$conn = mysql_connect($dbhost, $dbuser, $dbpass, $myDBname); 
+0

ありがとうございます。しかし、それは私が持っている問題を解決しませんでした。 – user2052849

+0

コードの最後に接続を試みて、これを入れてください:mysql_close($ conn); ' –

+0

毎回、あなたが接続を開いたときに、使用後に接続を閉じる必要があります –

2

更新クエリは、いくつかの問題が発生する可能性がありを

$query = "UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn' "; 
echo $query; 

変数がqoutes( ')で値を持たないことを確認してください。クエリがどこかで壊れている可能性があります。

クエリをエコーし​​、phpmyadmin自体で実行しようとします。次に、問題を見つけることができます。

1

あなたは既にので、この行が問題

$retval = mysql_query($sql, $conn); //$sql is not a query its a result set here 

このような何か試してみてくださいここから

$sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'"); 

をクエリを実行した:追記として

$sql = "UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'";  
$retval = mysql_query($sql, $conn); //execute your query 

:MySQL_を*拡張機能は廃止予定です。MySQLi_ *またはPDO 。

+1

ありがとうございます!これにより、 "あなたはSQL構文にエラーがあります"というメッセージが修正されましたが、私のDBはまだ新しく追加されたコンテンツで更新されていません。 – user2052849

+1

同じ名前の入力要素が多数作成されるループで入力ボックスを生成しているため、データベースが更新されていません。入力フィールドの名前を ''のような配列に変更することで試してみることができます。これを行うには、すべての入力要素と処理に応じて処理する必要があります。 – Konsole

0

あなたのSQL構文にエラーがあります。

このクエリとチェックアウトを使用してください。

$query = mysql_query("UPDATE `anstalld` SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn' "); 
0

この方法で試してください。テーブル名を引用符( ``)で囲みます。 put変数の隣に 。$ xyz。 "'。

$sql = mysql_query("UPDATE `anstalld` SET mandag = "'.$mandag.'" WHERE namn =".$name)or die(mysql_error()); 
+1

コードが無効です – Naktibalda

+0

です。私はこのコードだけで作業しています。それでもどう?間違いを指摘できますか?私は改善することができます –

+1

引用符に問題があります。最初の文字列は "UPDATE' anstalld' SET mandag = "次の文字は '。$ mandag'です。それらの間の。すべての間違いを修正した場合、コードは – Naktibalda

1

あなたのSQLが間違っている:

だからあなたのSQLクエリは次のようになります。

$sql = mysql_query("UPDATE anstalld.... 

のみ

$sql = "UPDATE anstalld... 
関連する問題