2013-11-16 3 views
0

У меня есть два поля ввода, в которых пользователь может ввести имя человека, а затем выбрать свою роль, faculty или instructor. Для ролей я использую tinyint, чтобы определить, истинно это или ложно (0 или 1). У меня возникают трудности с сохранением значений в mysql db. При отправке запроса ничего не сохраняется. EXAMPLEСохранение значений tinyint в mysql

<?php 

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

$con = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); 


$person1_role1 = empty($_POST['role1'][1]) ? 0 : 1; 

$person2_role2 = empty($_POST['role2'][1]) ? 0 : 1; 

$person_name1 = $_POST['person_name1']; 
$person_name2 = $_POST['person_name2']; 

$option = $_POST['role']; 

if($option == 'faculty'){ 
    mysqli_query($con,"INSERT INTO person (contact_role, person_name) VALUES ($person1_role1, $person_name1)"); 
} elseif ($option == 'instructor') { 
    mysqli_query($con,"INSERT INTO person (instructor_role, person_name) VALUES ($person2_role2, $person_name2)"); 
} 

print_r($_POST); 

} 

?> 
<form action="test2.php" method="POST"> 
<b>Select the role for the person</b> 
</br> 
</br> 
Name:<input type="text" name="person_name1"> 
    <input type="checkbox" name="role1[]" value="faculty">faculty 
    <input type="checkbox" name="role1[]" value="instructor">instructor<br><br> 
Name:<input type="text" name="person_name2"> 
    <input type="checkbox" name="role2[]" value="faculty">faculty 
    <input type="checkbox" name="role2[]" value="instructor">instructor<br><br> 

<input value="SAVE" name="submit" type="submit"> 

</form> 

Таблица

CREATE TABLE IF NOT EXISTS `person` (
    `person_id` int(11) NOT NULL auto_increment, 
    `faculty_role` tinyint(1) NOT NULL, 
    `instructor_role` tinyint(1) NOT NULL, 
    `person_name` varchar(50) NOT NULL, 
    PRIMARY KEY (`person_id`), 
); 
+0

Почему вы используете флажки, если у человека может быть только одна роль? Почему бы не ''. И вы используете '$ _POST ['role']', но, как видите в вашем 'print_r ($ _ POST), этот ключ не существует. –

+0

@Petervanderwal человек может иметь обе роли –

+0

Тогда не 0 или 1 –

ответ

2

используется $option = $_POST['role'] но 'роль' не в ваших POST-данных, обратитесь к print_r($_POST). Таким образом, $option не является ни «преподавателем», ни «инструктором», поэтому никто из ваших запросов INSERT не вызывается.

Вы говорите, что у человека могут быть две роли, но вы используете два INSERT-запроса. Странно. После имело бы больше смысла:

$person1_faculty = in_array($_POST['role1'], 'faculty') ? 1 : 0; 
$person1_instructor = in_array($_POST['role1'], 'instructor') ? 1 : 0; 
$person1_name = mysqli_real_escape_string($_POST['person_name1']); 
mysqli_query(
    $con, 
    "INSERT INTO person (faculty_role, instructor_role, person_name) VALUES " . 
    "(" . $person1_faculty . ", " . $person1_instructor . ", '" . $person1_name . "')" 
); 

Ваш $ _POST [ «Role1»] является массивом, проверьте с in_array, если преподаватели и/или инструктор в нем. И используйте mysqli_real_escape_string, чтобы предотвратить SQL-инъекцию.

+0

+1 Oh Alright Я вижу, как я могу сделать '$ option = $ _POST ['role']' часть сообщения? –

+1

Проверьте отредактированный ответ. Вы не добавляете «роль» в свои $ _POST-данные, но вы должны перестроить свою PHP-логику. Кроме того, начните с добавления одного пользователя с одной ролью (я думаю, это уже достаточно сложно для вас), если это начнет расширять ваш код. Сделайте небольшие шаги;) –

+0

. Я сделал изменения, но ничего не вставлено. Да, вы правы, как только я получу эту работу, мне нужно будет вернуться и работать над моей php-логикой. –

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