2015-05-04 3 views
1

Следующий код создает нелегальное смещение ошибки каждый раз, когда while() петли:Random "Незаконное смещение" ошибка

Предупреждения: Illegal строку смещение 'имя пользователя' в/Applications/MAMP/HTDOCS/админ/скриптах/email_owners_send .php на линии 48

Я пытаюсь установить $name быть $email['username']$email['username'] если не пуст, а если является пустым, $name должен быть установлен на $email. $email устанавливается оператором while(), с mysql_fetch_assoc(). Это мой код на данный момент:

// print out all the email address recipients 
$query = mysql_query("SELECT * FROM ownersemails WHERE deleted=0 LIMIT 5"); 
$recipients = ''; 
$total = mysql_num_rows($query); 
$num = 0; 
while($email = mysql_fetch_assoc($query)) { 
    // add to count 
    $num++; 

    // set email 
    $email = $email['email']; 

    // set name as username if apparant 
    if(!empty($email['username'])) { 
     $name = $email; 
    } 
    else { 
     $name = $email['username']; 
    } 

    // add to recipients string (=. append) 
    $recipients .= '{ "email": "'.$email.'", "name": "'.$name.'" }'; 
    // only add a comma if it isn't the last one 
    if($num!=$total) { 
     $recipients .=','; 
    } 
} 
+1

Пожалуйста, [прекратить использование '' mysql_ * функции] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и подумайте об использовании [PDO] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

2

Вы перезапись переменную $ электронной почты, установленное время цикла

while($email = mysql_fetch_assoc($query)) { 

тогда вот вы перезапись:

$email = $email['email']; 

так $email станет строкой, а не массивом. Вы можете изменить это

$email_address = $email['email'] 
1

У вас есть массив с именем $email, который содержит все столбцы в строке базы данных. И вы переписываете этот объект со значением только столбца электронной почты:

while($email = mysql_fetch_assoc($query)) { 
    // add to count 
    $num++; 

    // set email 
    $email = $email['email']; 
... 

Не делайте этого. Было бы гораздо разумнее вызвать объект строки $row. Вы должны указать переменные так, чтобы они были очевидны, каковы они.

while($row = mysql_fetch_assoc($query)) { 
    // add to count 
    $num++; 

    // set email 
    $email = $row['email']; 
... 
Смежные вопросы