2015-04-20 10 views
8

Chcę zaktualizować bazę danych o nowe dane, tak aby po umieszczeniu tekstu w polu tekstowym, a następnie kliknięciu przycisku Wyślij dane zostaną przesłane do bazy danych o określonym identyfikatorze . Wszystko, co chcę wysłać, to jasność, z kodem poniżej. Kiedy piszę coś takiego, a ja go uruchomię, otrzymuję błąd 403: dostęp jest zabroniony. Jak mogę to naprawić?Zaktualizuj dane bazy danych za pomocą przycisku przesyłania

<?php 
    function updater($value,$id){ 
// Create connection 
    $conn = new mysqli('localhost' , 'user_name' , '' , 'data_base_name'); 
// Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $sql = "UPDATE table_name SET name=$value WHERE id=$id"; 
    if ($conn->query($sql) === TRUE) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . $conn->error; 
    } 
//$conn->close(); 
} 
?> 

<!DOCTYPE html> 
<html> 
<header> 
</header> 
<body> 
    <form action="<?php updater($_POST['name'],1); ?>" method="post" style="height:50px;width:50px;"> 
     <input type="text" name="name" /><br><br> 
     <input type="submit" /><br/> 
    </form> 
</body> 
</html> 
+4

to 'action =" "jest zdecydowanie wątpliwa, a twoja wartość jest ciągiem znaków, traktuj ją jako taką w SET. –

+0

nie wywołujesz funkcji wewnątrz atrybutu akcji, umieszczasz tam adres URL, który będzie przetwarzany w formularzu – Ghost

+0

Wiem ... czy możesz mi pokazać prawdziwą drogę? – Sonoo

Odpowiedz

2

tak:?

<?php 
function updater($value,$id){ 
    // Create connection 
    $conn = new mysqli('localhost' , 'user_name' , 'pass' ,'data_base_name'); 
    $value =mysqli_real_escape_string($conn,$value); 
    $id =mysqli_real_escape_string($conn,$id); 
    // Check connection 

    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $sql = "UPDATE table_name SET name='{$value}' WHERE id='{$id}'"; 
    if ($conn->query($sql) === TRUE) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . $conn->error; 
    } 
    $conn->close(); 
} 

if(isset($_POST['name'])){ 
    updater($_POST['name'],$_POST['id']) 
} 
?> 

<!DOCTYPE html> 
<html> 
<header> 
</header> 
<body> 
<form action="" method="post" style="height:50px;width:50px;"> 
    <input type="hidden" name="id" value="1" />   
    <input type="text" name="name" /><br><br> 
    <input type="submit" /><br/> 
</form> 
</body> 
</html> 
4

Musisz umieścić adres URL wewnątrz atrybutu działania, dokłada przetwarzania formularzy, a nie funkcji:

action="<?php updater($_POST['name'],1); ?>" // not this 
action="<?php echo $_SERVER['PHP_SELF']; ?>" // path to this page 

Jeśli jest na tej samej stronie, można po prostu pominąć go lub użyj $_SERVER['PHP_SELF'] , a następnie złap złożenie formularza. Wewnątrz tego procesu wywołaj swoją niestandardową funkcję.

if($_SERVER['REQUEST_METHOD'] === 'POST') { 
    $value = $_POST['name']; 
    $id = 1; 

    updater($value, $id); 
} 

łatwo naprawić byłoby po prostu zacytować napis wewnątrz niego:

$sql = "UPDATE table_name SET name='$value' WHERE id=$id"; 

Ale to jest otwarty na SQL injection, innym sposobem na bezpieczniejsze zapytań jest je przygotować:

function updater($value,$id) { 
    // Create connection 
    $conn = new mysqli('localhost' , 'user_name' , '' , 'data_base_name'); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $sql = "UPDATE table_name SET name = ? WHERE id= ?"; 
    $update = $conn->prepare($sql); 
    $update->bind_param('si', $value, $id); 
    $update->execute(); 
    if ($update->affected_rows > 0) { 
     echo "Record updated successfully"; 
    } else { 
     echo "Error updating record: " . $conn->error; 
    } 
} 
+0

Po prostu notatka, to jest bardzo niebezpieczne, ale tak właśnie postąpiłbyś zgodnie z pytaniem, ewentualnie powinieneś zajrzeć do przygotowanych oświadczeń –

+0

Myślałem, że będę dodaj moje 2 centy, teraz naprawdę muszę lecieć, nie uruchamiać lol –

+0

Wygląda na to, że moje 2 centy zniknęły lol będąc 'SET name = '$ value'' –

Powiązane problemy