2013-07-31 2 views
2

Здравствуй

Этой часть формы показывают столбцы имена из тузда таблицы (имена приложений, установленных на компьютере) и создание формы с ДА/НЕТ опции или input type = "text" для дополнительных привилегий для приложения.

Как я могу вставить его обратно в таблицу mysql, используя POST и mysql_query INSERT INTO ?????
Количество колонок меняется, потому что есть еще одна форма для добавления приложений с/без прав ..Как построить динамический оператор MySQL INSERT с PHP

<tr bgcolor=#ddddff>'; 

//mysql_query for getting columns names 
$result = mysql_query("SHOW COLUMNS FROM employees") or die(mysql_error()); 
while ($row = mysql_fetch_array($result)) 
{ 
    //exclude these columns bcs these are in other part of form 
    if($row[0] == 'id' || $row[0] == 'nameandsurname' || $row[0] == 'department' 
      || $row[0] == 'phone' || $row[0] == 'computer' || $row[0] == 'data') 
     continue; 
    echo '<td bgcolor=#ddddff>'.$row[0].'<br />'; 

    if (stripos($row[0], "privileges") !== false) { 
     echo '<td bgcolor=#ddddff><p><a class=hint href=#> 
      <input type="text" name="'.$row[0].'"> 
      <span>Privileges like "occupation" or "like someone"</span></a></p></td></tr>'; 
    } 
    else 
    { 
     echo '<td bgcolor=#ddddff align=center><select name="'.$row[0].'"> 
      <option value = "No">No 
      <option value = "Yes">Yes 
      </td> 
      </tr>'; 
    } 
} 

trim($_POST); // ???? 

$query = "INSERT INTO 'employees' VALUES (??)"; // ???? 
+0

где вы используете тег формы html? без этой отправки сообщения формы не может быть создано, и если вы хотите использовать в событии клика, используйте AJAX – Vineet1982

ответ

4

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

Сначала создайте массив столбцов, которые вы хотите использовать. Используйте это как генерировать свою форму и получить значения

$exclude = array("id", "nameandsurname", "departument", "phone", "computer", "date"); 
$result = mysql_query("SHOW COLUMNS FROM employees") or die(mysql_error()); 
$columns = array(); 
while ($row = mysql_fetch_array($result)) { 
    if (!in_array($row[0], $exclude) { 
     $columns[] = $row[0]; 
    } 
} 

Рендера своей формы из $columns массива:

foreach ($columns as $column) { 
    echo '<tr><td bgcolor="#ddddff">'.$column.'<br />'; 
    if (stripos($column, "privileges") !== false) { 
     echo '<p><a class="hint" href="#"> 
       <input type="text" name="'.$column.'"> 
       <span>Privileges like "occupation" or "like someone"</span></a>'; 
    } else { 
     echo '<select name="'.$column.'"> 
       <option value = "No">No 
       <option value = "Yes">Yes 
       </select>'; 
    } 
    echo '</td></tr>'; 
} 

Затем, динамически строить свою строку INSERT из посланных значений для этих столбцов. Убедитесь, что для защиты от инъекции SQL:

$keys = array(); 
$values = array(); 
foreach ($columns as $column) { 
    $value = trim($_POST[$column]); 
    $value = mysql_real_escape_string($value); 
    $keys[] = "`{$column}`"; 
    $values[] = "'{$value}'"; 
} 
$query = "INSERT INTO 'employees' (" . implode(",", $keys) . ") 
      VALUES (" . implode(",", $values) . ");"; 

Примечание: это будет работать лучше, если вы выберете из INFORMATION_SCHEMA.COLUMNS, так что вы можете знать тип столбца вы вставляете в. Таким образом, вам не придется процитировать все.

+1

'mysql_real_escape_string()' существует слишком :) –

+0

@Jack - да, но для этого требуется 'mysql_connect'ion, а' Библиотека mysql' устарела в более поздних версиях PHP –

+0

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

0
<html> 
<body> 
<form action="dynamicinsert.php" method="POST" > 
user name:<br> 
<input type="text" id="username" name="username"> 
<br><br> 
first name:<br> 
<input type="text" id="firstname" name="firstname"> 
<br><br> 
password:<br> 
<input type="password" id="password" name="password"> 
<br><br> 
<input type="submit" name="submit" value="add" /> 
</form> 
</body> 
</html> 

<?php 
$servername = "localhost"; 
$username = "your_username"; 
$password = "your_password"; 
$dbname = "you_DB_name"; 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

function insertqueryfunction($dbfield,$table) { 
    $count = 0; 
    $fields = ''; 

    foreach($dbfield as $col => $val) { 
     if ($count++ != 0) $fields .= ', '; 
     $col = addslashes($col); 
     $val = addslashes($val); 
     $fields .= "`$col` = '$val'"; 
    } 
    $query = "INSERT INTO $table SET $fields;"; 
    return $query; 

} 

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

    // Report all errors 
error_reporting(E_ALL); 

    // Same as error_reporting(E_ALL); 
    ini_set("error_reporting", E_ALL); 
    $username_form = $_POST['username']; 
    $firstname_form = $_POST['firstname']; 
    $password_form = $_POST['password']; 
    $you_table_name = 'you_table_name'; 

    $dbfield = array("username"=>$username_form, "firstname"=>$firstname_form,"password"=>$password_form); 

    $querytest = insertqueryfunction($dbfield,'you_table_name'); 

    if ($conn->query($querytest) === TRUE) { 
    echo "New record created successfully"; 
    } else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

    $conn->close(); 

} 
?> 
+0

Привет, сэр, добро пожаловать в SO и благодарим вас за регистрацию, чтобы ответить на этот вопрос. Чтобы сделать ваш ответ еще лучше, было бы полезно добавить некоторые объяснения относительно того, почему ваш код решает проблему OP. – nhee

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