2013-09-25 34 views
5

Tôi đã xem qua hàng tá chủ đề ở đây về điều này nhưng vẫn chưa tìm được giải pháp.Cập nhật MySQL bằng cách sử dụng Biểu mẫu HTML và PHP

Tôi đã tạo biểu mẫu được cho là hiển thị nội dung của bảng cơ sở dữ liệu trong hộp nhập và khi nội dung của hộp nhập được thay đổi và gửi cơ sở dữ liệu phải cập nhật.

<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> 

Các hình thức hiển thị nội dung của cơ sở dữ liệu tốt, nhưng khi cập nhật tôi nhận được tin nhắn này:

Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn rằng tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần '1' tại dòng 1

Tôi đánh giá cao sự giúp đỡ nào tôi có thể nhận về vấn đề này.

+4

Lệnh 'mysql_ *' chức năng này ** không còn duy trì ** và không nên được sử dụng trong bất kỳ codebase mới. Nó đang được loại bỏ theo hướng ưu tiên các API mới hơn. Thay vào đó, bạn nên sử dụng [** statement statements **] (https://www.youtube.com/watch?v=nLinqtCfhKY) với [PDO] (http://php.net/pdo) hoặc [MySQLi] (http://php.net/mysqli). –

+1

Điều này không thể hoạt động theo cách này bởi vì bạn có nhiều biểu mẫu với cùng một 'tên' cho các trường nhập. Ngoài ra bạn đang thiếu để đặt 'namn' trong một trường ít nhất là ẩn. Và bạn đã bỏ lỡ rất nhiều việc đóng '}' – djot

+1

@djot Cảm ơn bạn đã chỉ ra điều đa dạng! Làm thế nào tôi sẽ đi về chỉ truy vấn UPDATE vào hộp đầu vào mà không sử dụng tên tĩnh? – user2052849

Trả lời

4

Sử dụng mysqli thay vì mysql, và bạn cần phải vượt qua tên cơ sở dữ liệu hoặc schema:

trước:

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

sau:

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

Cảm ơn vì điều này. Tuy nhiên nó đã không khắc phục được vấn đề tôi đang gặp phải. – user2052849

+0

thử đóng kết nối đến cuối mã, đặt này: 'mysql_close ($ conn); ' –

+0

mọi lúc, khi bạn mở kết nối, sau khi sử dụng, bạn cần phải đóng kết nối –

2

Cập nhật truy vấn có thể có một số vấn đề

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

Hãy chắc chắn rằng, biến của bạn không có giá trị với qoutes ('), có thể là truy vấn đang phá vỡ một nơi nào đó.

lặp lại truy vấn và thử thực thi trong chính phpmyadmin. Sau đó, bạn có thể tìm thấy các vấn đề.

1

Bạn đã thực hiện truy vấn của bạn ở đây

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

Vì vậy, dòng này có vấn đề

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

Hãy thử một cái gì đó như thế này:

$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 

Là một sidenote: mysql_ * tiện ích mở rộng không được sử dụng MySQLi_ * hoặc PDO thay thế.

+1

Cảm ơn bạn! Điều này cố định "Bạn có một lỗi trong cú pháp SQL của bạn" msg, tuy nhiên, DB của tôi vẫn không được cập nhật với nội dung mới được thêm vào. – user2052849

+1

db của bạn không được cập nhật vì bạn đang tạo hộp nhập liệu của bạn trong một vòng lặp mà sẽ tạo ra nhiều yếu tố đầu vào có cùng tên. Bạn có thể thử bằng cách thay đổi tên của các trường nhập vào một mảng như thế này ''. Bạn cần phải làm điều này cho mọi yếu tố đầu vào và xử lý phù hợp. – Konsole

0

bạn có lỗi trong cú pháp sql của mình.

vui lòng sử dụng truy vấn và thanh toán này.

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

Hãy thử theo cách này. Đặt tên bảng trong dấu ngoặc kép (``). bên cạnh đặt biến '". $ Xyz."'.

Vì vậy, truy vấn sql của bạn sẽ như thế nào:

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

Mã của bạn không hợp lệ – Naktibalda

+0

. Tôi chỉ làm việc với mã này. Vẫn thế nào? bạn có thể chỉ ra sai lầm như vậy. Tôi có thể cải thiện –

+1

Bạn có vấn đề với dấu ngoặc kép, chuỗi đầu tiên là "UPDATE' anstalld' SET mandag = "lệnh tiếp theo là '. $ Mandag.', Bạn sẽ nhận được lỗi phân tích cú pháp vì không có. giữa họ. Nếu bạn sửa tất cả các lỗi, mã của bạn sẽ trở thành giống như một trong số 0 câu trả lời dưới đây – Naktibalda

1

sql của bạn không đúng.

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

chỉ

$sql = "UPDATE anstalld... 
Các vấn đề liên quan