2016-12-05 3 views
0

Я хочу обновить только одну информацию из записи, используя php-форму, но дело в том, что когда я это делаю, остальные данные удаляются из записи. do i do:/здесь мои коды для обновления. Какая ошибка я делаю. Я очень смущен. Было бы очень полезно помочь.Обновление одной конкретной информации обновляет всю запись в MYSQL с помощью PHP

<?php 

include('db.php'); 

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

    $hostname = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $databaseName = "winc sports"; 

    $connect = mysqli_connect($hostname, $username, $password, $databaseName); 



    $id = $_POST['id']; 
    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $age = $_POST['age']; 
    $country=$_POST['country']; 
    $phone=$_POST['phone']; 
    $email=$_POST['email']; 

    $select = "SELECT * FROM studens WHERE id = '$id'"; 
    $selected = mysqli_query($connect, $select); 
    $row = mysqli_fetch_assoc($selected); 
    if (empty($_POST['fname'])) {$fname = $row['fname'];} else {$fname = $_POST['fname'];} 
    if (empty($_POST['country'])) 
    { 
    $country = $row['country']; 
    } 
    else { 
    $country = $_POST['country']; 
    } 
    if (empty($_POST['id'])) { 
    $id = $row['id']; 
     } 
    else { 
    $id = $_POST['id']; 
    } 
    if (empty($_POST['age'])) {$age = $row['age'];} else {$age = $_POST['age'];} 
    if (empty($_POST['phone'])) {$phone = $row['phone'];} else {$phone = $_POST['phone'];} 
    if (empty($_POST['email'])) {$email = $row['email'];} else {$email = $_POST['email'];} 
    $query = "UPDATE students SET Fname= '$fname', Lname = '$lname', Nationality = '$country', PhoneNumber = '$phone', Email= '$email', Age = '$age' WHERE Id = '$id'"; 

    $result = mysqli_query($connect, $query); 
    var_dump($result); 
    if($result) 
    { 
     echo 'Data Updated'; 
    }else 
    { 
     echo 'Data Not Updated'; 
    } 
    mysqli_close($connect); 
} 

?> 

<!DOCTYPE html> 

<html> 

    <head> 

     <title>PHP INSERT DATA USING PDO</title> 

     <meta charset="UTF-8"> 

     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 

    </head> 
    <body> 
     <form action="updating.php" method="post"> 
    <input type="text" name="id" placeholder="Enter new ID"><br><br> 
    <input type="text" name="fname" placeholder="Enter new First Name"><br><br> 
    <input type="text" name="lname" placeholder="Enter new Last Name"><br><br> 
    <input type="number" name="age" placeholder="Enter new age" min="13" max="90"><br><br> 
    <input type="text" name="country" placeholder="Enter new Nationality"><br><br> 
    <input type="number" name="phone" placeholder="Enter new Phone Number"><br><br> 
    <input type="text" name="email" placeholder="Enter new Email"><br><br> 
    <input type="submit" name="update" value="update"> 
    </form> 

    </body> 

</html> 
+1

Название вашей страницы неверно, 'PHP INSERT DATA USING PDO' вы используете' mysqli'. Вы также используете его опасным образом, используйте параметризованные запросы. Я бы построил запрос динамически и только обновлял столбцы, которые были изменены. – chris85

+0

Вы должны «var_dump ($ row);», чтобы убедиться, что это так, как вы ожидаете. Основываясь на вашем заявлении 'UPDATE', я не удивлюсь, если ваши индексы результата будут' $ row ['Fname'] ',' $ row ['Lname'] 'и т. Д. –

+0

' SELECT * FROM studens' также кажется так как это приведет к тому, что все сломается, так как ваш «ОБНОВЛЕНИЕ» - «ученикам». Используйте отчет об ошибках. Ввод в опечатку закрытия голосования .. – chris85

ответ

1

ЗЕЬЕСТ выполняет выборку данных из таблицы называется studens. Это похоже на опечатку фактической таблицы, поэтому на самом деле она не будет получать какие-либо результаты для обновления. Таким образом, данные, которые вы завершаете обновлением таблицы, пуст. Переименуйте начальную таблицу выбора на учеников, и она должна правильно отобразить данные.

Также, пожалуйста, ознакомьтесь с подготовленными заявлениями или различными другими методами для дезинфекции входных данных. Использование переменных POST непосредственно в запросе делает вас чрезвычайно уязвимым для SQL Injection.

+0

исправил это, но все еще не повезло:/ –

+0

Что вы получаете, когда вы выгружаете выбранную вами строку? Есть ли данные? Вы подтвердили все имена столбцов, которые вы используете. Переменные $ row, о которых вы говорите, отличаются от того, что вы обновляете (вы ссылаетесь на $ row ["phone"], но вставляете в PhoneNumber. Страна также является Национальностью в обновлении, но вы ищете $ row [ country "]. Если фактическим именем столбца является PhoneNumber или National, тогда $ row [" phone "] и $ row [" country "] всегда будут пустыми. Двойной проверить все орфографию и обложку для столбцов, на которые вы ссылаетесь. – princessjackie