2013-09-25 3 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]와 함께 [** prepared statements **] (https://www.youtube.com/watch?v=nLinqtCfhKY)를 사용해야합니다. 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
이미 여기에 쿼리

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

그래서이 선이 같은 시도

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

문제가있는 실행 한

하십시오 (!) 참고로

$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 구문에 오류가 있습니다"msg가 수정되었지만 내 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'입니다. 구문 분석 오류가 발생합니다. 그들 사이에. 실수를 모두 고치면 030 답변 중 하나와 동일한 코드가 – Naktibalda

1

당신의 SQL이 올바르지 않습니다

그래서 SQL 쿼리처럼 될 것입니다.

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

$sql = "UPDATE anstalld... 
관련 문제