Извините, мой код слишком длинный, пожалуйста, потерпите меня. Я пытаюсь загрузить ссылку, хранящуюся внутри ячейки, из моей таблицы sql через php. Пользователь может установить флажок и выбрать ссылку для загрузки. однако то, что у меня есть, немного не так. он загружает все ссылки, присутствующие в таблице sql, вместо той, которую выбирает пользователь. что я сделал не так? пожалуйста, руководство. Спасибо!

$sql = "SELECT * FROM previousbroadcast ORDER BY id DESC";
$result=mysql_query($sql);
$count = mysql_num_rows($result);
while ($row = mysql_fetch_assoc($result)) {
      if (isset($_POST['re_b'])){
      $xml = simplexml_load_file($row['bclink']);   
   }
}

А HTML похож на

<input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $row['id']; ?>">
1
questiongirl 25 Авг 2011 в 22:48

3 ответа

Лучший ответ

Хорошо, новая попытка с дополнительной информацией, которую вы дали:

Это решение основано на следующих предположениях:

  1. Значение флажков, которые вы получаете, каким-то образом связано с полем в базе данных.
  2. Для простоты я назвал это поле id - в базе данных оно может называться по-другому, но только вы знаете, что ...

Что, как говорится:

$sql = "SELECT * FROM previousbroadcast ORDER BY id DESC";
$result=mysql_query($sql);
$count = mysql_num_rows($result);

// in this array, we now have all the values of the checkboxes the user selected
$checkboxvalues = $_REQUEST['checkbox'];

while ($row = mysql_fetch_assoc($result)) {
   if (isset($_POST['re_b'])){

      // if the ID of this row is mentioned in the checkboxes the user clicked
      // then - and only then - load the file
      if (in_array($row[id], $checkboxvalues)) {

          $xml = simplexml_load_file($row['bclink']);   
      }
   }
}
1
ty812 25 Авг 2011 в 19:52

Я бы попросил SQL выполнить всю фильтрацию за вас:

if (isset($_POST['re_b'])) {

  $checkboxvalues = isset($_REQUEST['checkbox']) ? $_REQUEST['checkbox'] : array();

  $myCheckboxes = array();
  foreach ($checkboxvalues as $cbv) {
    $myCheckboxes[] = mysql_real_escape_string($cbv);
  }

  $sql = "SELECT * FROM previousbroadcast WHERE id IN ('" . implode(",", $myCheckboxes) . "') ORDER BY id DESC";
  $result=mysql_query($sql);
  while ($row = mysql_fetch_assoc($result)) {
    $xml = simplexml_load_file($row['bclink']);
    // do something here with $xml or it will get overwritten
  }
}
1
James 25 Авг 2011 в 20:17

Хорошо, ваш код получился не совсем удачным, он неполный. но я вижу, что значение $ del_record - это массив флажков с ключом $ i. Проблема в том, что вы каждый раз вызываете базу данных, поэтому легко заблудиться.

Вы должны хранить полученные массивы в другом массиве, а затем выполнять итерацию там, вместо того, чтобы делать множество запросов к базе данных, что заставит ваш код работать быстрее, и у вас будет больше контроля над ним.

1
SparK 25 Авг 2011 в 18:59