2016-03-13 2 views
1

Im, пытаясь найти способ вставить текущий идентификатор пользователя и cursuscode в мою БД, но они, как я пытаюсь, пока еще не преуспели. Если кто-то нажимает кнопку отправки, я бы хотел нажать ее в базу данных, но когда я нажимаю на кнопку, ничего не происходит. Вот почему я считаю, что запрос неверен/синтаксис неправильный или мой способ использования метода post неправильный.Как вставить текущие данные в базу данных при нажатии кнопки отправки?

<?php 
session_start(); 
require_once('includes/mysql_config.php'); 

$id = isset($_SESSION['id']) ? $_SESSION['id'] : header('location: login.php'); 
$Cursist = mysqli_query($con, "SELECT id FROM Cursist WHERE id =".$_SESSION['id']) || false; 
if(!$Cursist){ 
    header('location: login.php'); 
} 
require_once('./header.php'); 

$cursusCode = $_GET['cursusCode']; 
$query = "SELECT * FROM cursus WHERE cursusCode = $cursusCode"; 
$result = mysqli_query($con, $query); 
$amount = mysqli_affected_rows($con); 

for ($i = 0; $i < $amount; $i++) { 
    $cursus = mysqli_fetch_array($result); 
?> 

    <?php 
     if(isset($_POST['submit'])){ 
     $SQL = "INSERT INTO cursistCode (Cursus_cursusCode, Cursist_id) VALUES ($cursusCode, $Cursist)"; 
      $result = mysql_query($SQL); 
     }?> 
<header> 
</header> 

<?php require_once('./navigation.php'); ?> 
<!-- Post Content --> 
<article> 
    <div class="container"> 
    <div class="row"> 
     <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 
     <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 
      <div class="post-preview"> 
       <?php echo $cursus['description'] . "<br />";?> 
      </div> 
     </div> 
     </div> 
       <a href="logout.php">Logout</a> 
     <form method="post" name="myform"> 
     <input type="submit" value="Schrijf je in" name="submit"> 
     </form> 
     Cursussoort: 
     <?php echo $cursus['type'] . "<br />";?> 
    </div> 
    </div> 
</article> 
<?php } ?> 
<hr> 
<?php require_once('./footer.php'); ?> 

Что я делаю неправильно, поскольку, насколько я могу судить, это должно быть хорошо. Моя структура базы данных, как это:

Cursist ID (рк) ссылки на Cursist_id в таблице cursistCode (один ко многим)

  • имя
  • пароль
  • не используется информация в этом запросе

cursistCode

  • Cursus_cursusCode
  • cursist_id

Cursus

  • ID (рк) ссылки на Cursus_cursusCode
  • не используется информация в этом запросе

мой гость будет я сделал что-то неправильно здесь:

if(isset($_POST['submit'])){ 
    $SQL = "INSERT INTO cursistCode (Cursus_cursusCode, Cursist_id) VALUES ($cursusCode, $Cursist)"; 
     $result = mysql_query($SQL); 
    }?> 

Надеюсь, этого будет достаточно информации, чтобы помочь мне, если я пропустил какую-то кривую информацию.

+0

Прежде всего, переместите логику 'INSERT' сверху, у вас нет причин делать это посередине отображения страницы. Затем я вижу '' в середине вашей формы, у которой нет причин быть там, он закрывает ваш цикл 'for' не там, где должен. –

+0

@ThomasG Сделал некоторые изменения, как вы сказали мне, если я понял это правильно – marijn

+0

Это лучше, теперь вы можете добавить отпечаток своего оператора SQL непосредственно перед '$ result = mysql_query ($ SQL);' чтобы увидеть, входит ли он условие и если SQL правильный –

ответ

1

Есть действительно много проблем с вашим кодом ...

начать с наиболее опасным:

$cursusCode = $_GET['cursusCode']; 
$query = "SELECT * FROM cursus WHERE cursusCode = $cursusCode"; 

Это SQL инъекции приглашение. Вы должны в лучшем случае использовать параметризованный запрос, по крайней мере, mysql_real_escape_string($_GET['cursusCode'])

Затем вы берете cursusCode вара из GET, и извлечь из вашей БД всего Курсуса, имеющий этот Cursus код.

Похоже на то, что вы делаете дальше, так что у вас может быть несколько cursus с тем же cursuscode в вашей БД. Мне кажется странным, как вы сказали, что cursusCode - это ПК в вашей таблице cursus. После того, как вы получили количество полученных курсоров, вы начинаете цикл для каждого cursus.

for ($i = 0; $i < $amount; $i++) { 
    $cursus = mysqli_fetch_array($result); 

2 возможности:

  • Если у вас есть только один Курсус, вы не должны делать петлю.
  • Если вы можете иметь несколько Курсус, у нас есть много ошибок:

    1. Ваша инструкция INSERT не имеет ничего общего в этом цикле, с тем, как вы делаете, если у вас есть несколько Курсуса, вы сделает INSERT для каждого из них, в то время как ваша цель, похоже, только зарегистрировать подписку одного пользователя на один cursus. Переместите эту логику до цикла, даже если у вас есть только один cursus.

    2. добавить свой navigation.php и <header> в петле, которая приведет к нескольким панелям навигации

    3. , если у вас есть несколько Курсуса, вы должны добавить пост переменным, чтобы знать, на котором Cursus представить кнопку пользователя, как щелкнуло

Тогда ваша форма, как не action=""

Без действия форма должна быть представлена ​​самому себе. Это может быть хорошо, но это также может быть потенциальной проблемой.

Я бы посоветовал вам исправить все это, и после этого, если он все еще не работает, вы должны просто добавлять echo заявления везде, чтобы понять, что происходит.

+0

Спасибо, не пробуйте сделать все это в вечером, так как я не могу это сделать сейчас. – marijn

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