Burada bu kadar oluyor, ne de emin değil benim için standart bir uygulama gibi görünmüyor. Ama temelde o oluyor bir temel veritabanı zımbırtı kullanıcı kodu parçacıkları göndermenizi sağlar var. Onlar sunulması için 5 etiketleri kadar sağlayabilir.
Şimdi hala bu açıktır eğer öyleyse beni affet öğreniyorum!
İşte (orada bazı CodeIgniter özel işlevleri olabilir unutmayın) tüm iş yapar PHP script:
function submitform()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->database();
$this->form_validation->set_error_delimiters('<p style="color:#FF0000;">', '</p>');
$this->form_validation->set_rules('title', 'Title', 'trim|required|min_length[5]|max_length[255]|xss_clean');
$this->form_validation->set_rules('summary', 'Summary', 'trim|required|min_length[5]|max_length[255]|xss_clean');
$this->form_validation->set_rules('bbcode', 'Code', 'required|min_length[5]'); // No XSS clean (or <script> tags etc. are gone)
$this->form_validation->set_rules('tags', 'Tags', 'trim|xss_clean|required|max_length[254]');
if ($this->form_validation->run() == FALSE)
{
// Do some stuff if it fails
}
else
{
// User's input values
$title = $this->db->escape(set_value('title'));
$summary = $this->db->escape(set_value('summary'));
$code = $this->db->escape(set_value('bbcode'));
$tags = $this->db->escape(set_value('tags'));
// Stop things like <script> tags working
$codesanitised = htmlspecialchars($code);
// Other values to be entered
$author = $this->tank_auth->get_user_id();
$bi1 = "";
$bi2 = "";
// This long messy bit basically sees which browsers the code is compatible with.
if (isset($_POST['IE6'])) {$bi1 .= "IE6, "; $bi2 .= "1, ";} else {$bi1 .= "IE6, "; $bi2 .= "NULL, ";}
if (isset($_POST['IE7'])) {$bi1 .= "IE7, "; $bi2 .= "1, ";} else {$bi1 .= "IE7, "; $bi2 .= "NULL, ";}
if (isset($_POST['IE8'])) {$bi1 .= "IE8, "; $bi2 .= "1, ";} else {$bi1 .= "IE8, "; $bi2 .= "NULL, ";}
if (isset($_POST['FF2'])) {$bi1 .= "FF2, "; $bi2 .= "1, ";} else {$bi1 .= "FF2, "; $bi2 .= "NULL, ";}
if (isset($_POST['FF3'])) {$bi1 .= "FF3, "; $bi2 .= "1, ";} else {$bi1 .= "FF3, "; $bi2 .= "NULL, ";}
if (isset($_POST['SA3'])) {$bi1 .= "SA3, "; $bi2 .= "1, ";} else {$bi1 .= "SA3, "; $bi2 .= "NULL, ";}
if (isset($_POST['SA4'])) {$bi1 .= "SA4, "; $bi2 .= "1, ";} else {$bi1 .= "SA4, "; $bi2 .= "NULL, ";}
if (isset($_POST['CHR'])) {$bi1 .= "CHR, "; $bi2 .= "1, ";} else {$bi1 .= "CHR, "; $bi2 .= "NULL, ";}
if (isset($_POST['OPE'])) {$bi1 .= "OPE, "; $bi2 .= "1, ";} else {$bi1 .= "OPE, "; $bi2 .= "NULL, ";}
if (isset($_POST['OTH'])) {$bi1 .= "OTH, "; $bi2 .= "1, ";} else {$bi1 .= "OTH, "; $bi2 .= "NULL, ";}
// $b1 is $bi1 without the last two characters (, ) which would cause a query error
$b1 = substr($bi1, 0, -2);
$b2 = substr($bi2, 0, -2);
// :::::::::::THIS IS WHERE THE IMPORTANT STUFF IS, STACKOVERFLOW READERS::::::::::
// Split up all the words in $tags into individual variables - each tag is seperated with a space
$pieces = explode(" ", $tags);
// Usage:
// echo $pieces[0]; // piece1 etc
$ti1 = "";
$ti2 = "";
// Now we'll do similar to what we did with the compatible browsers to generate a bit of a query string
if ($pieces[0]!=NULL) {$ti1 .= "tag1, "; $ti2 .= "$pieces[0], ";} else {$ti1 .= "tag1, "; $ti2 .= "NULL, ";}
if ($pieces[1]!=NULL) {$ti1 .= "tag2, "; $ti2 .= "$pieces[1], ";} else {$ti1 .= "tag2, "; $ti2 .= "NULL, ";}
if ($pieces[2]!=NULL) {$ti1 .= "tag3, "; $ti2 .= "$pieces[2], ";} else {$ti1 .= "tag3, "; $ti2 .= "NULL, ";}
if ($pieces[3]!=NULL) {$ti1 .= "tag4, "; $ti2 .= "$pieces[3], ";} else {$ti1 .= "tag4, "; $ti2 .= "NULL, ";}
if ($pieces[4]!=NULL) {$ti1 .= "tag5, "; $ti2 .= "$pieces[4], ";} else {$ti1 .= "tag5, "; $ti2 .= "NULL, ";}
$t1 = substr($ti1, 0, -2);
$t2 = substr($ti2, 0, -2);
$sql = "INSERT INTO code (id, title, author, summary, code, date, $t1, $b1) VALUES ('', $title, $author, $summary, $codesanitised, NOW(), $t2, $b2)";
$this->db->query($sql);
$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view('subviews/template/sidebar');
$this->load->view('thanksforsubmission');
$this->load->view('subviews/template/footerview');
}
}
Orada kodu bu sıkıcı saçmalık üzgünüm. Ben muhtemelen orada bir kaç kötü uygulamaları fark var - eğer öyleyse onları işaret edin.
Bu, (bu hatayla sonuçlanır ve hiç sorgulanmaz) gibi Çıktılanan sorgu görünüyor budur:
A Database Error Occurred
Error Number: 1136
Column count doesn't match value count at row 1
INSERT INTO code (id, title, author, summary, code, date, tag1, tag2, tag3, tag4, tag5, IE6, IE7, IE8, FF2, FF3, SA3, SA4, CHR, OPE, OTH) VALUES ('', 'test2', 1, 'test2', 'test2 ', NOW(), 'test2, test2, test2, test2, test2', NULL, NULL, 1, 1, 1, 1, 1, 1, 1, NULL)
Sen ŞİMDİ sonra biraz da görürsünüz (), 'test2, test2, test2, test2, test2' - Ben kesme tüm bu koymak için istemedim. I Did?
Ne yapabilirdim bu gibi bu hatların her biri alınır:
if ($pieces[0]!=NULL) {$ti1 .= "tag1, "; $ti2 .= "'$pieces[0]', ";} else {$ti1 .= "tag1, "; $ti2 .= "NULL, ";}
Etrafında tek tırnak $ adet [0] vs - ama sonra benim sorunum kullanıcı sadece 4 etiketleri, ya 3, ya da her neyse girdiğinde bu tür başarısız olmasıdır.
O tarihte kötü phrased soru Üzgünüm, ben denedim, ama beynim lapa döndü.
Yardımlarınız için teşekkürler!
Kriko