2013-09-25 48 views
5

Przeglądałem tu dziesiątki wątków, ale jeszcze nie znalazłem rozwiązania.Zaktualizuj MySQL za pomocą HTML Form i PHP

Utworzono formularz, który ma wyświetlać zawartość tabeli bazy danych w polach wejściowych, a gdy zawartość pól wprowadzania zostanie zmieniona i przesłana, baza danych ma zostać zaktualizowana.

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

Formy pokazać zawartość grzywny bazy danych, ale po aktualizacji otrzymuję komunikat:

masz błąd w składni SQL; sprawdzić podręcznika, który odpowiada twojej wersji serwera MySQL dla prawego składnię używaną blisko „1” w linii 1

Doceniam każdą pomoc mogę uzyskać na ten temat.

+4

Opcja 'mysql_ * funkcje są' ** ** nie utrzymuje i nie powinien być stosowany w każdym nowym kodzie. Jest on stopniowo wycofywany na rzecz nowszych interfejsów API. Zamiast tego powinieneś użyć [** przygotowanych wyciągów **] (https://www.youtube.com/watch?v=nLinqtCfhKY) z [PDO] (http://php.net/pdo) lub [MySQLi] (http://php.net/mysqli). –

+1

To nie może działać w ten sposób, ponieważ masz wiele formularzy z zawsze tymi samymi 'nazwami' dla pól wejściowych. Brakuje ci też nazwy 'namn' w przynajmniej ukrytym polu. A ty przegapiłeś dużo zamknięcia '}' – djot

+1

@djot Dzięki za wskazanie rzeczy z wielu form! W jaki sposób chciałbym skierować kwerendę UPDATE do pól wejściowych bez używania nazw statycznych? – user2052849

Odpowiedz

4

Zastosowanie mysqli zamiast mysql, i trzeba podać nazwę bazy danych lub schematu:

Przed:

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

po:

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

Dzięki za to. Nie naprawiło to jednak problemu, który mam. – user2052849

+0

spróbuj zamknąć połączenie z końcem kodu, wstaw to: 'mysql_close ($ conn);' –

+0

za każdym razem, gdy otwierasz połączenie, po użyciu, musisz zamknąć połączenie –

2

Aktualizacja kwerendy mogą mieć pewne problemy

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

Upewnij się, że twoja zmienna nie ma wartości z qoutes ('), może być zapytaniem gdzieś pęka.

echo kwerendy i spróbuj wykonać w phpmyadmin się. Następnie możesz znaleźć problemy.

1

Już wykonywane zapytanie tutaj

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

więc ta linia ma problemu

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

Spróbuj czegoś takiego:

$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 

Jak sidenote: MySQL_ * rozszerzenie jest przestarzałe, użyj MySQLi_ * lub PDO zamiast tego.

+1

Dziękuję! Naprawiono błąd "Masz błąd w składni SQL" msg, jednak mój DB nadal nie jest aktualizowany z nowo dodaną treścią. – user2052849

+1

Twoja baza danych nie jest aktualizowana, ponieważ generujesz pole wprowadzania w pętli, która utworzy wiele elementów wejściowych o tej samej nazwie. Możesz spróbować, zmieniając nazwę pól wejściowych na tablicę podobną do ''. Trzeba to zrobić dla każdego elementu wejściowego i odpowiednio je przetwarzać. – Konsole

0

Masz błąd w składni sql.

proszę użyć tego zapytania i zamówienia.

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

Wypróbuj w ten sposób. Umieść nazwę tabeli w cudzysłowie (``). obok ustaw zmienną "". $ Xyz. "'.

Więc zapytanie SQL będzie jak:

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

Twój kod jest nieprawidłowy – Naktibalda

+0

jest. Pracuję tylko z tym kodem. Wciąż jak? czy możesz wskazać błąd. Mogę poprawić –

+1

Masz problem z cudzysłowami, pierwszy ciąg to "UPDATE' anstalld' SET mandag = "następny to". $ Mandag. ', Dostaniesz błąd parsowania, ponieważ nie ma. między nimi. Jeśli usuniesz wszystkie swoje błędy, kod stanie się taki sam jak jedna z odpowiedzi 0 poniżej – Naktibalda

1

Twój SQL jest niepoprawny.

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

tylko

$sql = "UPDATE anstalld...