проблемы с массивами с php и SQL-запросами - PullRequest
0 голосов
/ 09 апреля 2011

Привет, ребята, я использую smarty и php. Я пытаюсь заставить эту функцию работать

                {foreach $rows as $row}
            <input type="checkbox" name="likes[]" value="{$row.ID}">{$row.Interests}<br>
            {/foreach}

То, что есть html / template для флажков, он берет данные из таблицы в моей базе данных

Теперь я пытаюсь сохранить данные в моей базе данных

     // $likes = mysql_escape_string($likes);

      $connection = mysql_open();
      $insert = "insert into Users " . 
          "values (null, '$firstName', '$lastName', '$UserName', '$email', from_unixtime('$DOB'), '$join', '$gender')";


      $result = @ mysql_query ($insert, $connection)
            or showerror();
        $id = mysql_insert_id();
        //echo $id; testing what it gets.
          mysql_close($connection);

      $connection = mysql_open();
      foreach($likes as $like)
      {

      $insert3 = "insert into ProfileInterests " .
        "values ('$id', '$like', null)";
      $result3 = @ mysql_query ($insert3, $connection)
        or showerror();

      }
      mysql_close($connection)
        or showerror();
    }

То, что есть сценарий, который я использую для ввода данных в мою базу данных ... есть еще кое-что, что действительно очищает ввод пользователя. mysql_open () - моя собственная функция, так что не беспокойтесь об этом.

    $likes = @$_POST['likes'];

это то, что я использую, чтобы получить лайки .... Я чувствую, что это неправильно. Я не уверен, что делать ....

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

1 Ответ

1 голос
/ 09 апреля 2011

Следующая строка:

$likes = join(",",$likes);

преобразует ваш $likes массив в $likes строку , содержащую значения и разделяющую их запятыми.

Итак, позже, когда вы попытаетесь перебрать $likes, он больше не будет массивом: это строка - которая объясняет неверный аргумент, предоставленный для foreach () .


Изменить после комментария: при вызове следующей строки:

$likes = mysql_escape_string($likes);

Если ваш $likes является массивом, у вас возникнут некоторые проблемы, так как mysql_escape_string работаетстрока.

Вместо того, чтобы пытаться экранировать весь массив сразу, вы должны использовать mysql_escape_string для каждого элемента при циклическом перемещении по массиву - примерно так:

foreach($likes as $like)
{
    // escape the current item :
    $escaped_like = mysql_real_escape_string($like);

    $insert3 = "insert into ProfileInterests values ('$id', '$escaped_like', null)";
    $result3 = @ mysql_query ($insert3, $connection) or showerror();
}


Как примечание: вы должны использовать var_dump() во время разработки, чтобы увидеть, что они содержат ;-) Это поможет вам понять, что ваш кодделает.

...