2017-01-25 5 views
1

У меня есть приложение CRUD для онлайн-курсов. Он содержит, среди прочих страниц, инструктор BIO.

Во-первых, инструкторы добавляются в таблицу с основными данными: first_name, last_name и email; то BIO может быть добавлен, возможно, для любого инструктора. Для этой цели существует вторая таблица базы данных, называемая «bios».

мне нужно пройти $user_id в курсы стола, (как инородное KEY) ап для этой цели я использую $ _GET:

<?php 
    $user_id = $_GET['id']; 
    if(isset($_POST['submit-btn'])) { 
     $no_courses = $_POST['no_courses']; 
     $years_exp = $_POST['years_exp']; 
     $fav_lang = $_POST['fav_lang']; 
     $courses = $_POST['courses']; 

     $sql = "INSERT INTO courses (user_id, no_courses, years_exp, fav_lang, courses) VALUES ('$user_id', '$no_courses', '$years_exp', '$fav_lang', '$courses')"; 

     if (mysqli_query($con, $sql)) { 
      echo("<p>Instructor bio was added.</p>"); 
     } else { 
      echo "Error: " . mysqli_error($con); 
     } 
    } 
?> 

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="add_bio"> 
     ... 
</form> 

Использование $_GET кажется удобным, потому что в таблице с большим из строк, содержащих инструкторов, справа от самой ячейки/столбца, у меня есть набор кнопок ссылок для операций CRUD, «Добавить био» - одна из этих кнопок.

<a title="Add bio" href="add_bio.php?id=<?php echo $arr['id']?>"><span class="glyphicon glyphicon-plus-sign"></span></a>` 

Но вместо передачи $user_id переменную так, что может быть добавлен био, сервер бросает эти ошибки:

Примечание: Undefined индекс: идентификатор в E: \ XAMPP \ HTDOCS \ курсы \ add_bio. php в строке 7 Ошибка: не удается добавить или обновить дочернюю строку: ограничение внешнего ключа завершено

Как передать идентификатор пользователя, если я хочу сохранить ссылки CRUD, упомянутые выше?

Спасибо!

+0

также является идентификатор в URL или нет? это код 'add_bio.php', потому что строка 7 не имеет ничего общего с идентификатором пользователя – nogad

+0

Да, это: add_bio.php? id = 5. Это перед отправкой формы. –

+0

Кажется, вы пытаетесь «INSERT» вместо «UPDATE» ... Также обратите внимание, что ваше приложение чрезвычайно открыто для [SQL-инъекции] (http://stackoverflow.com/questions/332365/how-does-the -sql-injection-from-the-bobby-tables-xkcd-comic-work) – Scopey

ответ

0

Форма пропускал эту линию, прямо над кнопкой представить:

<input type="hidden" name="id" value="<?php $user_id;?>"> 
0

Возможно, у вас есть некоторые проблемы с передаваемым контентом.

Отличный подход к поиску и устранению неисправностей: print_r ($ _ GET); или print_r ($ _ POST);

Другой вариант: echo print_r ($ _ GET, true); Второй аргумент (True) сообщает функции print_r как строку вместо вывода в браузер.

Просмотрите этот вывод и убедитесь, что вы действительно получаете значение «ID» в своих переменных GET и POST.

Кроме того, некоторые проблемы безопасности, любые данные, которые вы берете в из GET или POST или ЗАПРОС или COOKIE должны быть «очищены» вы можете посмотреть по адресу: mysqli_real_escape_string

Кроме того, никогда не используйте PHP_SELF. Практически во всех случаях его можно манипулировать, чтобы выполнить Cross Site Scripting Attack, и это плохая новость. если вы хотите отправить форму в текущий скрипт, вы можете оставить атрибут «действие» пустой строкой. action = ""

Надеюсь, что это поможет !!!

Смежные вопросы