1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Warning: Invalid Argument Supplied For Foreach()

Тема в разделе "Web - программирование", создана пользователем Kauperwood, 27 май 2011.

  1. Kauperwood

    Kauperwood Гость

    Репутация:
    0
    переписываю 'бывшие' скрипты в функции и вот словил то с чем не могу разобраться
    Warning: Invalid argument supplied for foreach() in /var/www/Alex/functions.php on line 262 {"hasError":false,"message":"ok"}
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">function</div></div><div class="sp-body"><div class="sp-content">
    PHP:
    function form_obr_svazi () {
    $html="";
    $_POST['form']="";
    $name="";
    $from="";
    $texts="";
    $captha1="";
    $errors="";
    if(isset(
    $_POST['do_submit'])) {
    $captha1 $_POST['captcha'];
    $to 'web@okrasim.net'
    $subject "обратная связь";     
    $name $_POST['username'];
    $from $_POST['email'];
    $texts $_POST['message'];
    $message "От:$name\r\nCообщение:\r\n$texts"
    $headers 'From:'.$from."\r\n" .
    'Reply-To:'.$to "\r\n" .
    'X-Mailer: PHP/' phpversion();
    $err=''
    if (!
    $name$err.="забыли имя<br>";
    if (!
    $from$err.="забыли мыло<br>"
    if (!
    $texts$err.="забыли сам отзыв<br>"
    if (
    strlen($name) > 30$err.="Длина имени не может превышать 30 символов<br>"
    if (
    strlen($texts) > 1000$err.="Длина отзыва не может превышать 1000 символов<br>"
    if (
    strlen($from) > 50$err.="емейл длинноват...<br>"
    $email_ok=preg_match("^([_\.0-9a-z-]+@)([0-9a-z][0-9a-z-]+\.)+([a-z]{2,4})$^"$from); 
    if (!
    $email_ok && $from$err.="не корректный email!<br>"
    if (!
    $captha1$err.="не введен защитный код!<br>"
    if (
    $captha1 != $_SESSION['cap_code']) $err.="не корректный защитный код!<br>";  
    if (!
    $err) {    //если ошибок нет, то 
    mail($to$subject$message"Content-Type: text/plain; charset=utf-8\r\n\r\n".$headers);
    header('Refresh: 3; URL=index.php');
    echo 
    'Сообщение отправлено. через 3 секунды вы будете перенаправлены на главную страницу.'
    exit; 

    else {
    echo 
    "<b style='color:red;'>".$err."</b><br>";
    }
    }
    else {  
    $fields $_POST['form'];

    foreach(
    $fields as $field) {                             //---------------------------------------------------------------------------------------------------------------262 линия
    if($field['name']=='captcha') {
    if (
    $fields['captcha']['value'] != $_SESSION['cap_code']) {
    $errors[] = 'не верный код.';
    }
    break;
    }
    if(
    $field['name']=='password2'){ // Special case for passwords
    if($fields['password2']['value'] != $fields['password']['value']) {
    $errors[] = 'Пароли не совпадают.';
    }
    break;
    }
    // Normal validation routine
    $validators explode(' '$field['attr']); 
    foreach(
    $validators as $validator){
    switch(
    $validator){
    case 
    'nonEmpty':
    if(
    trim($field['value'])=='') {
    $errors[] = 'Введите имя.';
    }
    break;
    case 
    'email':
    if(
    filter_var($field['value'], FILTER_VALIDATE_EMAIL) === false) {
    $errors[] = 'email не корректный.';
    }
    break;
    case 
    'int':
    if(
    filter_var($field['value'], FILTER_VALIDATE_INT) === false){
    $errors[] =    ucfirst($field['name']).' should be an integer.';
    }
    break;
    }
    }
    }

    if(!empty(
    $errors)){
    echo 
    json_encode(array(
    'hasError'=>true,
    'message'=>implode($errors'<br />')
    ));
    }
    else {  
    echo 
    json_encode(array(
    'hasError'=>false,
    'message'=> 'ok'
    ));
    }
    }
    //else

    $tpl file_get_contents('form_obratnoy_svazi.html'); 
    $action $_SERVER['PHP_SELF'].'?action=form_obr_svazi'
    $tpl str_replace'{action}'$action$tpl); 
    $tpl str_replace'{errors}'$errors$tpl); 
    $tpl str_replace'{name}'$name$tpl); 
    $tpl str_replace'{email}'$from$tpl); 
    $tpl str_replace'{message}'$texts$tpl); 
    $tpl str_replace'{captcha}'$captha1$tpl);
    $html $html $tpl;
    return 
    $html;
    }
    по идее напротив полей должны появляться jquery.ajaxValidation картинки "дающие" знать правильно ли заполнены поля. Естественно что они не появились. В шаблоне я проставил в дивах {errors] где должны появляться картинки и передаю туда $errors. Вот... Подскажите пожалуйста что нужно добавить, или что неправильно, как устранить этот варнинг?
     
  2. vital

    vital Больной Компом Детектед

    Репутация:
    0
    Регистрация:
    29 янв 2006
    Сообщения:
    2.432
    Симпатии:
    40
    сделай
    var_dump($fields);
    и для надежности
    var_dump(is_array($fields));
    И посмотри.
    У тебя там потом приходит не массив.. или вообще ничего не приходит. И => форич не срабатывает.
     
  3. Kauperwood

    Kauperwood Гость

    Репутация:
    0
    дельный совет!

    string(0) "" bool(false)

    не могу понять почему пустой, в старом "виде" работает
    может нужно в функцию передать как то?
     
  4. Kauperwood

    Kauperwood Гость

    Репутация:
    0
    если например этот же кода убрать из функций оставивв только шаблон
    и записать как <form action="validator.php"> - ,будет работать
    вопрос что можно сделать такого на пхп в функции что бы роботало?
    или это js код править нужн?
     
  5. AlexanderC

    AlexanderC Гость

    Репутация:
    0
    Ну так правельно, в начале функции есть такое $_POST['form']="";, оно отчищает ваш элемент массива (которым является по сути $_POST).
    Так что в foreach не приходит массив... нужно проверять до итерации является ли элемент массивом чтобы исключить такие ошибки, ведь данные приходят извне. Советую if ( !is_array($_POST['form']) ) return false;
     
Загрузка...
Похожие Темы - Warning Invalid Argument
  1. anna
    Ответов:
    1
    Просмотров:
    243
  2. Shandrik
    Ответов:
    2
    Просмотров:
    121
  3. Shandrik
    Ответов:
    0
    Просмотров:
    258
  4. k85
    Ответов:
    5
    Просмотров:
    269
  5. anna
    Ответов:
    2
    Просмотров:
    367

Поделиться этой страницей