Привет друзья Я создаю страницу php для импорта данных из файла csv в базу данных sql.
здесь таблица базы данных и количество полей указаны самим пользователем.
если пользователь задает 4 поля, то он создается с использованием цикла for следующим образом.
<?php include('connect.php'); $name = $_POST['table_name']; //echo $name; $create_tab = "CREATE TABLE $name(id varchar(15) PRIMARY KEY)"; if(mysql_query($create_tab,$con)) { echo "Table <b><i>$name</i></b> created successfully... <br/> <br/>Add columns..."; } else { die('Error1'.mysql_error()); } $field = $_POST['number_of_fields']; //echo $name.$field; echo '<form id="form1" name="form1" method="post" action="update-table.php">'; echo "<p> <label for='tablename'></label> <input type='hidden' name='tablename' id='tablename' value='$name' size='5'/> </p>"; echo "<p> <label for='fields'></label> <input type='hidden' name='fields' id='fields' value='$field' size='5'/> </p>"; echo '<table border="1" cellpadding="5" cellspacing="5">'; for ( $i = 1; $i <= $field; $i ++) { echo '<tr>'; echo '<td>'; echo "<p> $i </p>"; echo'</td>'; echo '<td>'; echo "<p> <label for='textfield$i'></label> <input type='text' name='field$i' id='textfield$i' /> </p>"; echo'</td>'; echo '<td>'; echo " <select name='select$i' id='select$i'> <option value='varchar(200)'>varchar</option> <option value='int'>int</option> <option value='float'>float</option> <option value='date'>date</option> </select>"; echo '</td>'; echo '</tr>'; } echo '</table>'; ?> <p>File Location : <input type="text" name="fileField" id="fileField" /> </p> <br/> <INPUT type="image" name="search" src="images/alter.gif" border="0" height="75" width=120"> </form>
затем создайте таблицу и измените ее следующим образом.
<?php include('connect.php'); $field = $_POST[fields]; $name = $_POST[tablename]; for ( $i = 1; $i <= $field; $i++) { //getting field names $varname = ($txtfield . $i); $$varname = $_POST[field.$i]; // echo $$varname; $fi = $$varname; //getting field types $selname = ($selfield . $i); $$selname = $_POST[select.$i]; $dt = $$varname; $sql = "ALTER TABLE $name ADD $fi $dt"; if(mysql_query($sql,$con)) { echo "Field <b><i>$fi</i></b> added successfully...<br/>"; } else { die('Error1'.mysql_error()); } } ?>
в<?php include('connect.php'); $field = $_POST[fields]; $name = $_POST[tablename]; for ( $i = 1; $i <= $field; $i++) { //getting field names $varname = ($txtfield . $i); $$varname = $_POST[field.$i]; // echo $$varname; $fi = $$varname; //getting field types $selname = ($selfield . $i); $$selname = $_POST[select.$i]; $dt = $$varname; $sql = "ALTER TABLE $name ADD $fi $dt"; if(mysql_query($sql,$con)) { echo "Field <b><i>$fi</i></b> added successfully...<br/>"; } else { die('Error1'.mysql_error()); } } ?>
как указано выше таблица базы данных и поля …
Я получил концепцию вставки данных с использованием статических переменных следующим образом.
<?php // data import include('connect.php'); $field = $_POST['fileField']; //file directory echo "<br/><br/>Import file path: "; echo $field; $file = $field; $lines = file($file); $firstLine = $lines[0]; foreach ($lines as $line_num => $line) { if($line_num==0) { continue; } //escape the header column $arr = explode(",",$line); $column1= $arr[0]; $column2= $arr[1]; // ' escape character if (strpos($column2, "'") == FALSE) { $column21 = $column2; } else{ $column21 = str_replace ("'", "\'", $column2); } $column3= $arr[2]; $column4= $arr[3]; //print data from csv echo "<table border='1' width='800' cellpadding='5' cellspacing='2'>"; echo "<tr>"; echo "<td width='8'>"; echo $column1; echo "</td>"; echo "<td width='100'>"; echo $column21; echo "</td>"; echo "<td width='5'>"; echo $column3; echo "</td>"; echo "<td width='5'>"; echo $column4; echo "</td>"; echo "</tr>"; echo "</table>"; $import="INSERT into $name (id,name,year1,year2) values( '$column1','$column21','$column3','$column4')"; mysql_query($import) or die(mysql_error()); } ?>
в<?php // data import include('connect.php'); $field = $_POST['fileField']; //file directory echo "<br/><br/>Import file path: "; echo $field; $file = $field; $lines = file($file); $firstLine = $lines[0]; foreach ($lines as $line_num => $line) { if($line_num==0) { continue; } //escape the header column $arr = explode(",",$line); $column1= $arr[0]; $column2= $arr[1]; // ' escape character if (strpos($column2, "'") == FALSE) { $column21 = $column2; } else{ $column21 = str_replace ("'", "\'", $column2); } $column3= $arr[2]; $column4= $arr[3]; //print data from csv echo "<table border='1' width='800' cellpadding='5' cellspacing='2'>"; echo "<tr>"; echo "<td width='8'>"; echo $column1; echo "</td>"; echo "<td width='100'>"; echo $column21; echo "</td>"; echo "<td width='5'>"; echo $column3; echo "</td>"; echo "<td width='5'>"; echo $column4; echo "</td>"; echo "</tr>"; echo "</table>"; $import="INSERT into $name (id,name,year1,year2) values( '$column1','$column21','$column3','$column4')"; mysql_query($import) or die(mysql_error()); } ?>
теперь, мой вопрос заключается в том, как я могу сделать эту инструкцию insert динамической как таковой, она создает имена полей и значения динамически внутри запроса на вставку из данных, полученных из цикла for в таблице create and alter query ???
Если я правильно понял ваш вопрос, похоже, вы хотите объединить свои вставки в один запрос (что очень разумно. SQL позволяет вставлять сразу несколько строк так:
INSERT INTO table (id, first, last) VALUES(NULL, 'Ryan', 'Silvers'),(NULL, 'Oscar', 'Smith'),(NULL, 'Jessica', 'Owens')
Поэтому, создав массив VALUES и используя implode для их объединения, вы можете сделать один запрос:
//Create rows foreach($rows as $row) { $queryRows[] = "(NULL, '".$row['first']."', '".$row['last']."')"; } //Create query $query = 'INSERT INTO table (id, first, last) VALUES'.implode(',', $queryRows);
Теперь, когда я понимаю ваш реальный вопрос, я могу дать вам общий обзор того, что вам нужно сделать для достижения этого. Вам необходимо создать форму, которая позволяет пользователю вводить данные, которые будут вставлены в таблицу.
<form method="post" action="process.php"> <input name="field1" /> <!-- and more --> </form>
Затем вам нужно написать скрипт PHP для обработки представления формы и вставить данные в MySQL:
<?php //Check form submission and validate entries, then... $stmt = $pdo->prepare('INSERT INTO table (field1) VALUES(:field1)'); $stmt->execute(array(':field1', $_POST['field1'])); ?>
Затем вам нужно написать скрипт PHP для обработки представления формы и вставить данные в MySQL:
вставка функции ($ tablet, $ datad) {
if(empty($tablet)) { return false; } if(empty($this->CONN)){ return false; } $conn = $this->CONN; $query1 = "select * from user"; $result1 = mysql_query($query1); $numcolumn = mysql_num_fields($result1); $addd = ""; $count = 0; for ( $i = 1; $i < $numcolumn; $i++ ) { $columnnames = mysql_field_name($result1, $i); if(($numcolumn-1) == $i) { $addd .= $columnnames; $data .= "'".$datad[$count]."'"; } else { $addd .= $columnnames.","; $data .= "'".$datad[$count]."',"; } $count++; } $ins = "INSERT INTO ".$tablet."(".$addd.")"."VALUES(".$data.")"; mysql_query($ins); header('Location: index.php'); exit; }