2011-01-14 2 views
1

Я работаю над своим веб-сайтом, и я пытаюсь реализовать функцию, которая работает следующим образом:Получить данные для записей mysql через массив?

Admin проверяет флажок в записи, чтобы показать, что платеж получен. Значения хранятся в массиве с именем $paymentr, который встраивается и обновляет базу данных MySQL.

Теперь вот где хитрая часть (для меня, во всяком случае) приходит в:

После того, как это делает, код проверяет, сколько строк были затронуты, а затем посылает ОДНОГО письмо другому человеку, который должен перечислить все информацию для записей на основе идентификаторов, хранящихся в массиве.

По какой-то причине у меня был медведь времени, пытаясь понять, как это сделать. У меня был foreach цикл работает прямо перед кодом электронной почты, который бежал что-то вроде этого (я упростил запрос, как это намного больше и сложный, но я испытал его в PHPMyAdmin) -

foreach ($paymentr as $v) { 

$query = "SELECT transactions.id, transactions.refid, transactions.affid FROM transactions WHERE transactions.id = '$v'"; 

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); 
$trans = mysql_fetch_array($result, MYSQL_ASSOC); 

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].''; 

} 

Тогда что $ переменная транзакций будет отправлена ​​в коде электронной почты.

Но это не сработало, к сожалению. У кого-нибудь есть идеи? Я чувствую, что мне просто не хватает одного важного куска или идеи ... все было бы полезно. Может быть, array_map? Я никогда не использовал это. Спасибо очень много :)

+0

Вы уже проверить, что 'var_dump ($ транс)' печатает? – middus

+0

Привет, спасибо за ваши продуманные ответы и комментарии! Я попробовал print_r ($ paymentr); и он выводит правильные переменные. Я также пробовал var_dump ($ trans); а также print_r на этом ... ничего нет! :/Я попробовал mysql-запрос в phpmyadmin, и он сработал, потянув правильную запись. – Sara

+0

Я также получаю «Недопустимый аргумент, предоставленный foreach() в .... в строке 50« проблемы в моем файле ошибки ... может быть, это связано с тем, что я взорвал $ paymentr, это уже не массив? – Sara

ответ

1

Я пробовал ваш код и ничего не заметил. Чтобы помочь отлаживать, вы можете попробовать добавить некоторые «print_r» и «echo» код для лучшего понимания того, что происходит.

Также вы упомянули, что ваш массив взорван, и я понимаю, что он возвращает строку со значениями массив в форме [значение] [разделитель] [значение] ..., это все еще массив, когда начинается «foreach»? Вы находите, что транзакции $ пустые?

print_r ($paymentr); // <----- ADDED FOR DEBUG 

foreach ($paymentr as $v) { 

$query = "SELECT id, refid, affid FROM transactions WHERE id = '$v'"; 

echo $query . "<br/>"; // <----- ADDED FOR DEBUG, (XHTML <br/> closed tag) 

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); 
$trans = mysql_fetch_array($result, MYSQL_ASSOC); 

$transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].'';  
} 

Или вы могли бы сделать это, который попадает в дб меньше:

foreach ($paymentr as $v) { $in_clause .= "'".$v."',"; } 
$in_clause = trim($in_clause, ","); 
$query = "SELECT id, refid, affid FROM transactions WHERE id IN ($in_clause)"; 

$result = mysql_query($query) or die("Query Failed: ".mysql_errno()." - ".mysql_error()."<BR>\n$query<BR>\n"); 
while ($trans = mysql_fetch_array ($result, MYSQL_ASSOC))  
{ 
    $transactions .= '<br>User ID:'.$trans['id'].' -- '.$trans['refid'].' -- '.$trans['affid'].''; 
} 
+0

Привет, спасибо за ваши вдумчивые ответы и комментарии! Я попробовал print_r ($ paymentr); и он выводит правильные переменные. Я также пробовал var_dump ($ trans); а также print_r на этом ... ничего нет! :/Я попробовал mysql-запрос в phpmyadmin, и он сработал, потянув правильную запись ... – Sara

+0

OH - У меня просто было откровение. Я переписываю имя переменной с помощью implode. Хм. Позвольте мне дать этот шанс, переименовав implode в что-то еще. – Sara

+1

Да, это был трюк. Implode писал над моим массивом и давал foreach() проблему. Спасибо, что привлек это к моему вниманию! – Sara

1

Я не имею PHP-MySQL руководство передо мной, однако, не должны ли вы использовать вызов как mysql_fetch_assoc, а не mysql_fetch_array.

Когда вы используете mysql_fetch_array, вы указываете поля как $ trans [0], $ trans ['1], а не как строки, например. $ trans ['id']

- извините, что вы правы, я всегда использую вызов mysql_fetch_assoc, а не флаг. Как вы поступили с добавлением операторов отладки, если вы печатаете копию инструкции sql и вставляете ее в окно запроса - чтобы проверить, работает ли она правильно. Другие вызовы БД работают должным образом, возможно, вы не получите никаких результатов.

+0

Привет, Джон, из того, что я понимаю, вы можете использовать mysql_fetch_array так же, как mysql_fetch_assoc, указав «MYSQL_ASSOC» после переменной $ result ... если вы написали MYSQL_NUM, тогда он будет массивом численно. исправьте меня, если я ошибаюсь? :) – Sara

+0

'mysql_fetch_array ($ con)' по умолчанию использует 'MYSQL_BOTH', если тип не указан, поэтому массив будет содержать как обычные числовые индексы 0,1,2,3, так и ... записи * AND * ассоциативная «id», «name» и т. д. версия. –

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