Получение сообщения «У вас ошибка в синтаксисе SQL» - PHP, MySQL - PullRequest
1 голос
/ 18 апреля 2011

Я пишу страницу «Изменить», которая получает информацию из базы данных и отображает ее в форме, и позволяет пользователю изменять ее, нажимая кнопку «Изменить». Однако я получаю эту ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса рядом с заметками ... 'WHERE ID = 2' в строке 5

Я много раз проверял свой код, чтобы понять его, но безуспешно. Вот мой код:

<?php
    if (isset($_POST["submit"])) {
        $ind_name = $_POST["ind_name"];
        $age = $_POST["age"];
        $gender = $_POST["gender"];
        $notes = $_POST["notes"];
        $query = "UPDATE individual SET 
                    ind_name = '{$ind_name}',
                    age = {$age},
                    gender = '{$gender}',
                    notes = '{$notes}'
                    WHERE id = {$_GET["ind"]} ";
        $result = mysql_query($query);
        if (mysql_affected_rows () == 1) {
            header("Location: edit_ind.php?ind={$_GET["ind"]}");
        } else {
            echo "ERROR : " . mysql_error();
        }
    }
?>

А вот мой HTML-код формы:

<form action="edit_ind.php?ind=<?php echo $_GET["ind"]; ?>" method ="post" >
    <div id="formWrapper_ind">
        <label for="ind_name">Individual Name : </label>
        <?php $ind_name_form = get_ind_info_ind("ind_name"); ?>
        <input type="text" placeholder="Individual Name" name="ind_name" value="<?php echo $ind_name_form; ?>" required>
        <br/>

        <label for="age">Age : </label>
        <?php $ind_age_form = get_ind_info_ind("age"); ?>
        <input type="text" name="age" placeholder="Age" value="<?php echo $ind_age_form; ?>" required>
        <br/>

        <label for="gender">Gender : </label>
        <div id="radios">
            <?php $ind_gender_form = get_ind_info_ind("gender"); ?>
            <p><input type="radio" name="gender" value="Male" <?php if ($ind_gender_form== 'Male') {echo "checked"; } ?>>  Male
            <input type="radio" name="gender" value="Female" <?php if ($ind_gender_form == 'Female') {echo "checked"; } ?>>  Female</p>
        </div>
        <br/>

        <label for="notes">Notes : </label>
        <?php $ind_notes_form = get_ind_info_ind("notes"); ?>
        <textarea placeholder="Individual Notes..." name="notes"><?php echo $ind_notes_form; ?></textarea>
        <div id="buttons">
            <input type="reset" value="Reset">
            <input type="submit" name="submit" value="Done">
        </div>
    </div>
</form>

Я не могу найти синтаксическую ошибку в своем коде SQL, пожалуйста, посмотрите на нее. Заранее спасибо.

Ответы [ 6 ]

2 голосов
/ 18 апреля 2011

Вам нужно экранировать все переменные, используемые в запросе:

$ind_name = mysql_real_escape_string($_POST["ind_name"]);
$age = intval($_POST["age"]);
$gender = mysql_real_escape_string($_POST["gender"]);
$notes = mysql_real_escape_string($_POST["notes"]);
$ind = intval($_GET["ind"]);

$query = "UPDATE individual SET 
            ind_name = '$ind_name',
            age = $age,
            gender = '$gender',
            notes = '$notes'
            WHERE id = $ind";
1 голос
/ 18 апреля 2011

Вы действительно не должны играть с $_GET таким образом:

$query = "UPDATE individual SET 
                ind_name = '{$ind_name}',
                age = {$age},
                gender = '{$gender}',
                notes = '{$notes}'
                WHERE id = {$_GET["ind"]} ";

Я Настоятельно Предлагаю вам констатировать это как WHERE id = " . $_GET['ind'] . "";

SQL-инъекция

Вы должны быть очень осторожны с кодом, который вы только что опубликовали, потому что он может быть легко внедрен в вредоносный код. Всегда очищайте ваши переменные . Любые вводимые пользователем данные предполагают, что это ПЛОХОЙ , и они хотят использовать его против вашего приложения.

1 голос
/ 18 апреля 2011

Вот ваша проблема:

WHERE id = {$_GET["ind"]} ";

Вы используете двойные кавычки.

1 голос
/ 18 апреля 2011

Измените WHERE id = {$_GET["ind"]} "; на это:

WHERE id = ". $_GET["ind"];

Обратите внимание, что он открыт для инъекций SQL !!

1 голос
/ 18 апреля 2011

Вы уверены, что $_GET["ind"]} является целым числом?

1 голос
/ 18 апреля 2011

Вы можете начать с вывода запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...