2015-06-09 2 views
1

Я новичок в javascript, и я немного потерял во всем этом.Данные для Handsontable для базы данных sql

Я хочу, чтобы все данные из моего мобильного телефона были помещены в мою базу данных sql. Я следую примерам, которые даются с помощью handsontable, но это не работает.

Вот код, где я создаю мой handsontable:

`

$(document).ready(function() { 

var container = document.getElementById('Grille_competences'); 

var headerRenderer = function (instance, td, row, col, prop, value, 
cellProperties) { 
Handsontable.renderers.TextRenderer.apply(this, arguments); 
td.style.fontWeight = 'bold'; 
td.style.textAlign = 'center'; 
td.style.backgroundColor = '#B0C4DE'; 
}; 

//Initialisation des données de la grille. 
var data = [["Compétences","Description","Code",""], 
     ["", "", "",""], 
     ["","", "",""], 
     ["","", "",""], 
     ["","", "",""], 
     ["","", "",""]]; 

//Création de la grille 
hot = new Handsontable(container, { 
data: data, 
height: 800, 
width: 1183, 
colWidths: [35,200,25,80], 
manualRowResize: true, 
colHeaders: true, 
rowHeaders: true, 
mergeCells: true, 
stretchH: 'all', 
columnSorting: true, 
contextMenu: true,  
contextMenuCopyPaste: { 
    swfPath: './zeroclipboard/dist/ZeroClipboard.swf' 
}, 


//Fonctionnalités lors d'un clic droit dans la grille. 

contextMenu: {  

    items: { 
    "row_above": { 
     name: 'Insérer ligne au dessus', 
     disabled: function() {    
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "row_below": { 
     name: 'Insérer ligne en dessous', 
     disabled: function() {    
     return hot.getSelected()[0] === 0; 
    } 
    }, 
    "hsep1": "---------", 
    "col_left": { 
     name: 'Insérer colonne à gauche', 
     disabled: function() { 
      return hot.getSelected()[0] === 0; 
     } 
    }, 
    "col_right": { 
     name: 'Insérer colonne à droite', 
     disabled: function() { 
      return hot.getSelected()[0] === 0; 
     } 
    }, 
    "hsep2": "---------", 
    "remove_row": { 
     name: 'Supprimer la ligne', 
     disabled: function() { 
     return hot.getSelected()[0] === 0; 
     } 
    }, 

    "remove_col": { 
     name: 'Supprimer la colonne', 
     disabled: function() { 
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "hsep3": "---------", 
    "copy": { 
     name:'Copier', 
     disabled: function() { 
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "paste": { 
     name: 'Coller', 
     disabled: function(){ 
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "hsep4": "---------", 
    "undo": { 
     name:'Précédent', 
     disabled: function(){ 
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "redo": { 
     name: 'Suivant', 
     disabled: function(){ 
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "hsep5": "---------", 
    "make_read_only": { 
     name: 'Lecture seule', 
     disabled: function() { 
     return hot.getSelected()[0] === 0; 
     } 
    }, 
    "alignment": { 
     name: 'Alignement du texte', 
     disabled: function() { 
     return hot.getSelected()[0] === 0;   
     }   
    }, 
    "mergeCells": { 
     name: 'Fusionner les cellules', 
     disabled: function() { 
     return hot.getSelected()[0] === 0; 
     } 
    }, 


    }, 
}, 


//Entetes de la grille en lecture seule. 
cells: function(row, col, prop) { 
var cellProperties = {}; 
if(row===0){ 
cellProperties.renderer = headerRenderer; 
} 
if(row === 0 && col <3){ 
     cellProperties.readOnly = true; 
     } 
return cellProperties; 
} 
}); 

//Lors d'un clic sur le bouton valider, transmission des données de la grille. 


}); 

$('#save').click(function(){ 
    $.ajax({ 
    url: "testGetData.php", 
    dataType: 'json', 
    data: {data: hot.getData() }, 
    type: 'GET', 
    success: function() { 
    $console.text('Saved !'); 
    } 
    }); 
}); 

`

А вот код testGetData.php файл:

<?php

session_start(); 
require_once('./lib/demo/php/functions.php'); 


$db = getConnection(); 
createBDD($db); 

if($db) 
{ 

$db = new PDO('mysql:host=localhost; dbname=bdd'.$_SESSION['login'],'root', 'passwd'); 


    createTableBDD($db); 


    foreach ($_GET['data'] as $value){ 
     $query = $db->prepare('INSERT INTO Competences(libelle) VALUES('.$value[0].')'); 
     $query->execute(); 

    } 

} 

?> 

Если я понимаю, handsontable послать $ _REQUEST в testGetData.php. Итак, я могу получить доступ к суперглобальному $ _GET. Учитывая, что эта переменная представляет собой массив из множества массивов, значение $ в foreach совпадает с одним из массивов. Но я не понимаю, почему ничего не толкнул. Я изменяю функцию getConnection() для моей базы данных sql.

ответ

0

Я не знаю, что вы пытаетесь сделать с помощью createTableBDD($db);. Вы пытаетесь создать новую таблицу при каждом вызове этой страницы? Вы должны создать таблицу только один раз (может быть, в PHPMyAdmin) как

CREATE TABLE cm (id int auto_increment primary key, a int NULL, b int NULL, c int NULL) 

, а затем в .php файле выполните следующие действия:

// connect to the database: 
$p=new PDO("mysql:host=localhost; dbname=$dbname",$uname,$DBpassword); 

// in order to demonstrate the back-end without the handson front-end 
// I just generate some sample data (6 rows, 3 columns) into array $data: 
for ($i=100;$i<700;$data[]=$b,$i+=100) for ($b=array(),$j=1;$j<4;$j++) $b[]=$i+$j; 
// this would otherwise come from: $data=$_GET['data']; 

// prepare the INSERT statement ONLY ONCE: 
$ins=$p->prepare("INSERT INTO cm(a,b,c) VALUES(?,?,?)"); 

// and run it for each line of the $data array: 
foreach ($data as $a) $ins->execute($a); 

Вы могли бы найти этот учебник полезным начать работу с PDO: http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Running_Simple_INSERT.2C_UPDATE.2C_or_DELETE_statements

Пожалуйста, обратите внимание, что это решение будет работать только для $data массивов с точно 3 столбцов. Ваша таблица handson в интерфейсе может содержать любое количество столбцов. Поэтому вам необходимо убедиться, что количество столбцов правильное, прежде чем вы получите INSERT данных.

+0

Функция 'createTableBDD()' требуется в текущих обстоятельствах. Пользователь может создать более одной персонализированной сетки и с одной базой данных для одной сетки, теперь это проще. У меня нет выбора, это неотъемлемая часть проекта. Каждый из столбцов соответствует таблице в базе данных, и пользователь должен иметь возможность объединять ячейки (большая проблема для базы данных). Поэтому я не думаю, что этого будет достаточно. – arkodath

+0

Я вижу, откуда вы родом, но я настоятельно рекомендую не создавать новые таблицы с каждым вызовом ajax. Кто когда-нибудь «сбросит» их снова, если они больше не нужны? – cars10m

+0

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

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