2015-04-01 2 views
0

У меня есть два php-файла. Один из них состоит в том, чтобы хранить данные формы/таблицы и запрашивать данные для ввода данных, а другой php-файл - обрабатывать данные формы и вставлять информацию, которая вводится на главной странице в базу данных. У меня есть право на информацию о подключении, поэтому я оставил его по соображениям конфиденциальности. Мой вопрос в том, как мне или я должен отправить информацию из формы и сделать массив в строку перед отправкой в ​​целевую таблицу? Когда я пытаюсь вставить как есть, он возвращает сообщение об ошибке, говорящее, что мой синтаксис неверен, но все переменные сеанса читаются, потому что он возвращает значения полей ввода. Ниже приведена копия того, что я пробовал до сих пор. У меня будет 10 начальных полей с возможностью добавления нескольких строк, но, ради длины, я сократил таблицу до двух начальных строк.Как вставить поля формы формы ввода в таблицу базы данных, используя PHP

Вот моя главная страница формы: SANTable.php

<?php 
session_start(); 
// If this is the initial trip, set up the $_SESSION. 
if (!isset($_SESSION['initial_pass'])){ 
    $_SESSION['initial_pass']=true; 
} 
?> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>SAN Fiber Request</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
<div id="wrapper"> 
<div id="maincontent"> 

<hr class="GreyHorizon"> 
<form id="sanFiber" action="insert.php" method="post"> 
<table class="frame" id="sanRequest" style="display: block;"> 
    <tr> 
     <th style="border:none">&nbsp;</th> 
     <th><b class="RedAsterik">*</b>Host Name</th> 
     <th><b class="RedAsterik">*</b>Network Type</th> 
     <th><b class="RedAsterik">*</b>Description</th> 
     <th><b class="RedAsterik">*</b>Server Port Used</th> 
     <th><b class="RedAsterik">*</b>Speed</th> 
     <th><b class="RedAsterik">*</b>Mgmt Arms/Swings RT or LT</th> 
     <th><b class="RedAsterik">*</b>Primary Function</th> 
     <th><b class="RedAsterik">*</b>Comments</th> 
    </tr> 
    <tr> 
     <td style="border:none"><img src="images/plus2.png" name="myImage" id="swap1" class="toggler" /></td> 
     <!--25--> 
     <td><input name="host[]" class="field" type="text" size="15" /></td> 
     <!--25--> 
     <td><select name="NETTYPEdropdown[]" id="NETTYPEdropdown"> 
      <option selected="selected" value=""></option> 
      <option value="FiberChannel">Fiber Channel</option> 
     </select></td> 
     <!--50--> 
     <td><select name="Descriptiondropdown[]" id="Descriptiondropdown" class="Description_dropdown"> 
      <option selected="selected" value=""></option> 
      <option value="PriA">Primary Fabric A</option> 
      <option value="PriB">Primary Fabric B</option> 
      <option value="SecA">Secondary Fabric A</option> 
      <option value="SecB">Secondary Fabric B</option> 
      <option value="BackA">Backup Fabric A</option> 
      <option value="BackB">Backup Fabric B</option> 
      <option value="ilo-Manage">ilo-Management</option> 
      <option value="UTCS265">UTCS Private 265</option> 
      <option value="addOther">Other...</option> 
     </select></td> 
     <!--30--> 
     <td><input name="PortUsed[]" class="field" type="text" id="PortUsed" size="15" /></td> 
     <!--15--> 
     <td><select name="Speeddropdown[]" id="Speeddropdown"> 
      <option selected="selected" value=""></option> 
      <option value="1GB">1GB</option> 
      <option value="4GB">4GB</option> 
      <option value="8GB">8GB</option> 
      <option value="10GB">10GB</option> 
      <option value="16GB">16GB</option> 
     </select></td> 
     <!--15--> 
     <td><select name="MGMTdropdown[]" id="MGMTdropdown"> 
      <option selected="selected" value=""></option> 
      <option value="YesR">Yes - Right</option> 
      <option value="YesL">Yes - Left</option> 
      <option value="No">No</option> 
     </select></td> 
     <!--50--> 
     <td><input name="primary[]" class="field" type="text" id="primary" size="25" /></td> 
     <!--250--> 
     <td><textarea name="comments[]" class="field" type="text" id="comments" size="20"></textarea></td> 
    </tr> 
</table> 
<br> 
<fieldset id="buttons"> 
    <input class="fsSubmitButton" type="submit" value="Review" /> 
    <input class="fsSaveButton" id="save" type="submit" value="Save" /> 
    <a href="#bottom" name="bottom"><input class="fsAddButton" type="button" value="Add New Row" /></a> 
    <input class="fsNewHostButton" type="submit" value="Add New Host" /> 
</fieldset> 
</form> 
    </div> 
</div> 
<script type="text/javascript"> 
$(document).ready(function(){ 
$("#save").click(function(){ 
// AJAX Code To Submit Form. 
$.ajax({ 
type: "POST", 
url: "insert.php", 
data: datastring, 
cache: false, 
success: function(){ 
    alert('success'); 
}, 
error: function(e){ 
    alert('nope.'); 
} 
}); 
return false; 
}); 
}); 
</script> 

</body> 
</html> 

А вот мой insert.php:

<?php 
if (session_id() == '') { 
session_start(); 
} 
else { 
var_dump(session_id()); 
} 

/* 
    ***Connection info*** 
*/ 


//for SAN Fiber Request 
$_SESSION['host'] = $_POST['host']; 
$_SESSION['netType'] = $_POST['NETTYPEdropdown']; 
$_SESSION['description'] = $_POST['Descriptiondropdown']; 
$_SESSION['used'] = $_POST['PortUsed']; 
$_SESSION['speed'] = $_POST['Speeddropdown']; 
$_SESSION['mgmt'] = $_POST['MGMTdropdown']; 
$_SESSION['primary'] = $_POST['primary']; 
$_SESSION['comments'] = $_POST['comments']; 

    $number = count($_SESSION['host']); 
    for ($i=0; $i<$number; $i++) 
    { 
     $hostno = $_SESSION['host'][$i]; 
     $netTypeno = $_SESSION['netType'][$i]; 
     $descriptno = $_SESSION['description'][$i]; 
     $usedno = $_SESSION['used'][$i]; 
     $speedno = $_SESSION['speed'][$i]; 
     $mgmtno = $_SESSION['mgmt'][$i]; 
     $primaryno = $_SESSION['primary'][$i]; 
     $commentsno = $_SESSION['comments'][$i]; 

     if ($_SESSION['host'][$i] <> '') { 
      $sql = "INSERT INTO cable_request_san_fiber_detail (CABLE_REQUEST_SAN_FIBER_DETAIL_ID, CABLE_REQUEST_ID, NETWORK_TYPE, HARDWARE_PORT_ID, SERVER_PORT, SPEED, MANAGEMENT_ARM, PRIMARY_FUNCTION, CABLE_LABEL, SWITCH_HARDWARE_PORT_ID, DESCRIPTION, HARDWARE_ID, COMMENTS) VALUES (, 1, $netTypeno, ,$usedno, $speedno, $mgmtno, $primaryno, $hostno, ,$descriptno, , $commentsno)"; 

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

$conn->close(); 
?> 

Как следует извлечь значения извлекается из полей ввода на странице HTML на странице php обрабатывать запрос вставки?

+0

Вы установили правильный тип данных для столбцов базы данных? –

+0

также, если CABLE_REQUEST_SAN_FIBER_DETAIL_ID является автоинкрементным, попробуйте написать ** по умолчанию ** (без знака цитаты) или 0 вместо того, чтобы оставить его пустым. –

+0

@AliSheikhpour Да, типы данных правильно установлены на int и varchar. Я попытаюсь использовать значение по умолчанию для значения auto-increment. Полагаю, это то, что можно отбросить. Я не был уверен, как ссылаться на автоматически увеличивающееся значение, поэтому я сначала оставил его пустым. –

ответ

0

Im не старший парень, но я вижу две основные не ясно ситуации, чтобы начать в вашем коде:

1) Я не вижу, как вы можете отправить на insert.php более одной формы в то время, или как вы хотите установить несколько сеансов одновременно ... Так что строка

$ number = count ($ _ SESSION ['host']);

... с петлей for не требуется. Если вам не нужны эти сеансы, я бы поставил почтовые данные прямо в переменные, чтобы начать тестирование ...

2) Это, по-видимому, не способ отправки данных через Jquery.ajax. Вы должны .serialize формы, и когда вы получите ее в insert.php, вы конвертируете в то, что вы можете использовать. Попробуйте эту документацию, чтобы увидеть его лучше:

https://api.jquery.com/serialize/ http://api.jquery.com/jquery.ajax/

надежда, что работает :)

+0

Я понял, как использовать serialize(), но я не слишком уверен в том, как вызывать переменные после того, как я сериализую всю форму. Я буду проверять, работает ли вставка по почте или сеансу и что происходит. –

0

После небольшого количества проб и ошибок, и, глядя на мой код внимательно, я сделал его работу путем изменения записи по моему запросу. После того, как я добавил значение по умолчанию для поля автоинкремента и правильно организовал свои кавычки для ссылки на строковые переменные, все работало нормально. Использование одиночной и двойной кавычек может быть довольно сложным. Вот мое решение:

$sql = "INSERT INTO cable_request_san_fiber_detail(CABLE_REQUEST_SAN_FIBER_DETAIL_ID, 
CABLE_REQUEST_ID, NETWORK_TYPE, HARDWARE_PORT_ID, SERVER_PORT, SPEED, MANAGEMENT_ARM, 
PRIMARY_FUNCTION, CABLE_LABEL, SWITCH_HARDWARE_PORT_ID, DESCRIPTION, HARDWARE_ID, 
COMMENTS) VALUES (default, 1, '".$netTypeno."','','".$usedno."','".$speedno."', 
'".$mgmtno."', '".$primaryno."', '".$hostno."','', 
'".$descriptno."','','".$commentsno."')"; 
Смежные вопросы