2015-02-04 8 views
1

Hella ребят, я немного задачи примерно наполовину сделано ... это касается CheckBox массивов в PHP коде ...предотвращения массив галочки флажков из переиздаются в качестве флажков флажков

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

Я попытался использовать метод array_diff, но вместо этого я предупреждаю, что аргумент Argument является строкой, а не массивом ... так что я действительно смущен ... Я загрузил скриншоты флажков объяснить это лучше -

[IMG] http://i61.tinypic.com/eqtmix.png[/IMG] - флажок, что я галочкой

[IMG] http://i62.tinypic.com/e5o16p.png[/IMG] - после того, как я галочкой флажок, как вы можете видеть, мои выборы будут напечатаны снова - «Motor Binding И Connection "и" Repair Sensors ", но на этот раз они не установлены.

, когда я использую array_diff я получаю следующее сообщение об ошибке:

Предупреждение: array_diff(): Аргумент # 1 не является массивом в C: \ xampp1 \ HTDOCS \ rajib1 \ Rajib \ php_checkbox1.php на линии 50

вот мой код без метода array_diff используется:

<?php 
include('dbcategory.php'); 
error_reporting(0); 
error_reporting(E_ERROR | E_PARSE); 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 
?> 

<!DOCTYPE html> 
<html> 
<head> 
<title>PHP: Get Values of Multiple Checked Checkboxes</title> 
<link rel="stylesheet" href="css/php_checkbox.css" /> 
</head> 
<body> 
<td valign="top"> 
<?php 

$list = "SELECT * FROM skillsset WHERE category='Engineering' ORDER BY skills ASC"; 
$listAHI = $dbs ->prepare($list); 
$listAHI -> execute(); 
if(!isset($_POST['submit'])){ 
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC)) 
{ 
$skills = $row["skills"]; 
echo " 
<form action='' method='post'> 
    <input type='checkbox' name='skills[]' value='$skills'> $skills<br> 

"; 

    } 
    echo"<input type='submit' name='submit' Value='Submit'/></form>"; 
} 

else { 
if(isset($_POST['submit'])){ 
if(!empty($_POST['skills'])) { 
foreach($_POST['skills'] as $skills1) { 
echo "<p><form action='' method='post'><input type='checkbox' name='skills[]' value='$skills1' checked>".$skills1 ."</p>"; 
} 

while($row = $listAHI ->fetch(PDO::FETCH_ASSOC)){ 
$skills = $row["skills"]; 
//$result=array_diff($skills,$skills1); 
//print_r($result); 
echo " 
<form action='' method='post'> 
    <input type='checkbox' name='skills[]' value='$skills'> $skills<br> 

"; 
} 
} 
} 

else{ 
echo "<b>Please Select At least One Option.</b><input type='submit' name='submit' Value='Submit'/>"; 
} 
} 


?> 
</td> 
</form> 
</div> 
</div> 
</body> 
</html> 

Если добавить следующие строки кода - // $ Result = array_diff ($ навыки, $ skills1); // print_r ($ result); которые комментируются, то я получаю следующее сообщение об ошибке:

Предупреждение: array_diff(): Аргумент # 1 не является массивом в C: \ xampp1 \ HTDOCS \ rajib1 \ Rajib \ php_checkbox1.php на линии 50

вот код таблицы, из которого я повторил данные, чтобы распечатать списки с помощью флажков - пожалуйста, назовите файл skillsset.sql, если вы решите скопировать и вставить код ниже и ввести его в mysql/apache (или любой другой) сервер - Thnx

-- phpMyAdmin SQL Dump 
-- version 4.1.6 
-- http://www.phpmyadmin.net 
-- 
-- Host: 127.0.0.1 
-- Generation Time: Feb 04, 2015 at 04:01 AM 
-- Server version: 5.6.16 
-- PHP Version: 5.5.9 

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 

-- 
-- Database: `quietservices` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `skillsset` 
-- 

CREATE TABLE IF NOT EXISTS `skillsset` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `category` varchar(250) NOT NULL, 
    `skills` varchar(250) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=40 ; 

-- 
-- Dumping data for table `skillsset` 
-- 

INSERT INTO `skillsset` (`id`, `category`, `skills`) VALUES 
(11, 'Information', 'PHP'), 
(13, 'Information', 'C++'), 
(14, 'Information', 'C#'), 
(15, 'Information', 'Javascript'), 
(17, 'Information', 'AJAX'), 
(18, 'Information', 'Java'), 
(19, 'Information', 'Adobe Photoshop'), 
(21, 'Information', 'Adobe Premiere Pro'), 
(22, 'Information', 'Final Cut'), 
(28, 'Engineering', 'Power Factor Improvement (PFI)'), 
(29, 'Engineering', 'Motor Binding & Connection'), 
(31, 'Engineering', 'Transformer'), 
(34, 'Engineering', 'AutoCAD'), 
(35, 'Information', 'AutoCAD'), 
(36, 'Engineering', 'Switchgear Panels'), 
(37, 'Engineering', 'General Wiring'), 
(38, 'Engineering', 'Repair Sensors'), 
(39, 'Engineering', 'Install & Maintain Substation'); 

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 

пожалуйста, дайте мне знать, как я могу получить проверенные/тикали коробки с печатью Агаев n в виде отмеченных/отмеченных коробок, когда полный список извлекается и печатается ... thnx mill!

+0

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

ответ

0

На основании вашего заявления:

Я не хочу, чтобы флажки, которые я галочкой будет отображаться снова

Вы массив из выбранных навыков, что вы не 't хочу показать снова, и другой массив со всем списком навыков из базы данных.

Итак, когда вы снова печатаете список навыков, прежде чем показывать каждый элемент, спросите, нет ли этого элемента в массиве POSTed. Для этого я бы использовал in_array().

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

if(isset($_POST['submit'])){ 
if(!empty($_POST['skills'])) { 
foreach($_POST['skills'] as $skills1) { 
echo "<p><form action='' method='post'><input type='checkbox' name='skills[]' value='$skills1' checked>".$skills1 ."</p>"; 
} 

Затем замените непосредственно рядом в то время как (...) с это:

echo "<form action='' method='post'>"; // You can use a single <form> item for all checkboxes 
while($row = $listAHI ->fetch(PDO::FETCH_ASSOC)){ 
    // Traverse your entire list of skills. 
    $skill = $row["skills"]; // I renamed your var to singular because this is a single skill item. 
    if(isset($_POST['skills']) and !in_array($skill, $_POST['skills'])){ 
     // Skill not found on POSTed array; then show it. 
     echo "<input type='checkbox' name='skills[]' value='$skill'>$skill<br>"; 
    } 
} 
echo "</form>"; // close your form at end of checkboxes 

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

Надеюсь, что эта проблема решена.

+0

спасибо, ребята! я получил это 4 sho 'теперь !!! –

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