2013-07-25 2 views
1

У меня в этом случае 4 переключателя в форме. На предыдущем этапе пользователь получает выбор между опциями (например, A, B, C, D), которые включают в себя различные радиостанции. Например: выберите «А» и «радио 1», и так далее. Этот выбор сохраняется в MySQL, какPhp/mysql: Обработка пустой sql-результата в php-массиве

// If B: 

Customer Prod Group Chosen 
12345 1 1  0 
12345 2 1  1 
12345 3 1  0 
12345 4 1  0 

Для дальнейшего использования в какой-либо другой странно ИТ-системе, мне нужно сохранить на выбранный в качестве 0. Позже пользователь может снова посетить эту страницу. Затем я проверяю базу данных, чтобы отметить правильное радио как checked.


Проблема

Пользователь не должен сделать первоначальный выбор.

Поскольку пользователь не должен сделать выбор (A, B ...) У меня возникли проблемы с SQL-запроса, когда он возвращался пустой результат (без выбора не найден). В этом случае я сохраняю результат sql до $p, а затем проверьте, равно ли оно 1 или 0/пусто.

<input type="button" <?= empty($p[0])?'':'checked';?> /> 
<input type="button" <?= empty($p[1])?'':'checked';?> /> 
<input type="button" <?= empty($p[2])?'':'checked';?> /> 
<input type="button" <?= empty($p[3])?'':'checked';?> /> 

Это приводит к проверке первых 3 радиостанций.

Любая идея, как решить эту проблему? Мне как-то нужно проверить, является ли запись в sql 1 (выбрано), 0 (не выбрано) или вообще отсутствует.

SQL, это просто простой запрос:

$sql = " 
SELECT chosen 
FROM choices 
WHERE group = 1 
AND customer = 12345"; 

Edit:

var_dump($result) говорит BOOL (ложь). Это нормально?

+0

Опубликовать соответствующий sql –

+0

@de_nuit Добавлено это и отредактировано немного. – Xavio

+0

$ sql = "SELECT' selected' FROM 'choice' WHERE' group' = 1 AND 'customer' = 12345"; Являются ли групповые и клиентские INT-поля? –

ответ

0

На первый, простой запрос в SQL:

$group = 1; 
$customer = 12345; 

// @de_nuit we have the same idea :-D 
$sql = "SELECT `chosen` FROM `choices` WHERE `group` = '".$group."' AND `customer` = '".$customer."'"; 
$result = mysql_query($sql); 

$p = array(); 
while($row = mysqli_fetch_array($result)) 
{ 
    $p[$row['prod']] = true; 
} 

Может просто создать небольшую функцию?

function emptyCheck($p, $trick){ 
    // Your syntax to check 
    if(isset($p[$trick])){ 
     if($p[$trick] == true){ echo "checked"; } 
    } 
} 

Затем используйте:

<input type="button" <?=emptyCheck($p,0)?> /> 

Теперь, это старый метод, прочитать для получения дополнительной информации: Why shouldn't I use mysql_* functions in PHP?

+0

Если выбор не был сделан вообще (пустой sql-результат), не вызвало бы ошибку смещения? – Xavio

+0

Ах, в конце концов, этот трюк. Просто нужно было добавить true/false к переменным функции, чтобы проверить, проверена ли она 'yes' или' no'. – Xavio

0

Как насчет

<input type="button" <?=(empty($p[0]) || $empty === '0')?'':'checked';?> /> 

(проверьте, если он пустой или если это значение равно 0 - не проверяется.)

или, если это только проверяется, если это 1:

EDIT

if($p[0]) { 
?> 
    <input type="button" <?=($p[0] === '1') ? 'checked':'';?> /> 
<? 
}else { 
    <input type="button" /> 
} 
?> 

(проверьте, если это значение 1 - проверено)

+0

Я использовал второй из них раньше, но это вызвало ошибки смещения, так как иногда не было никаких $ p [x] из-за пустого результата sql. – Xavio

+0

проверьте, существует ли массив, прежде чем выводить кнопку ввода, затем см. Править – JohnnyFaldo

+0

Согласно [документации] (http://php.net/manual/en/function.empty.php) '0' считается' пустым' – harryg

0
$sql = "SELECT `chosen` FROM `choices` WHERE `group` = '1' AND `customer` = 12345"; 

Вы должны поместить строку в кавычки.

Если вы используете переменные:

$sql = "SELECT `chosen` FROM `choices` WHERE `group` = '".$group."' AND `customer` = ".$customer; 

Edit:

Вы можете иметь mysql_query(); где-то. Добавьте метод штампа. Вы можете увидеть, были ли в ваших запросах какие-либо ошибки. если так выложите их на свой ответ.

$query = mysql_query($sql) or die(mysql_error()); 
+0

Я пробовал запрос, который ничего не возвращает во внешнем db-менеджере (Sequel Pro), и это просто говорит 0 результатов, никаких ошибок. Я бы предположил, что должен очистить любой случай ошибок. – Xavio

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