2012-02-04 152 views
0

everyone。使用PHP將複選框值插入MySQL數據庫

我知道這是一個治療得很好的科目,但我到處尋找,無法解決。

我在我的網頁中有一系列複選框,需要將值插入到數據庫中。

對於我讀過,它應該做這樣:

<tr> 
     <td class="titulofila">Sal&oacute;n Completo con: </td> 
     <td> 
     <table width="100%"><tr><td> 
      <label> 
      <input name="equipSalon[]" type="checkbox" id="equipSalon[]" value="mesa" /> 
      mesas </label> 
     </td><td> 
      <label> 
      <input name="equipSalon[]" type="checkbox" id="equipSalon[]" value="sillas" /> 
      sillas </label> 
     </td><td> 
      <label> 
      <input name="equipSalon[]" type="checkbox" id="equipSalon[]" value="sofa" /> 
      sof&aacute;</label> 
     </td></tr></table> 
     </td> 
    </tr> 

,然後在PHP腳本,提交按鈕花費:

$equipSalonF=mysql_real_escape_string(implode(',', $_POST['equipSalon'])); 
mysql_query("INSERT INTO markers (ciudad, 
          zona,address,name, 
          telefono,email,piso, 
          tipo,erasmus,nhabitaciones, 
          plazas,equipHabita,nbanos, 
          salon,cocina,electrodomesticos, 
          garaje,internet,calefaccion, 
          sexo,precio,superficie,otros, 
          fecha,lat,lng) 
     VALUES ('{$_POST['ciudad']}','{$_POST['zona']}', 
       '{$_POST['address']}','{$_POST['name']}','{$_POST['telefono']}', 
       '{$_POST['email']}','{$_POST['piso']}','{$_POST['tipo']}', 
       '{$_POST['erasmus']}','{$_POST['nhabitaciones']}', 
       '{$_POST['plazas']}','{$equipHabitaF}', 
       '{$_POST['nbanos']}','{$equipSalonF}', 
       '{$equipCocinaF}','{$equipElectroF}','{$_POST['garaje']}', 
       '{$_POST['internet']}','{$_POST['calefaccion']}', 
       '{$_POST['sexo']}','{$_POST['precio']}', 
       '{$_POST['superficie']}','{$_POST['otrosF']}', 
       '{$_POST['fecha']}','{$_POST['lat']}', 
       '{$_POST['lng']}'",$link); 

我有更多的比這複選框,這不工作,只是說:「你的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第21行使用正確的語法」

如果有人想看看完整的index.html和php文件,你可以在這裏找到它們:http://paste.ideaslabs.com/show/8qEHDnsZdr表格從147行開始。而PHP文件在這裏:http://paste.ideaslabs.com/show/IJFLSHM7Ka

在此先感謝。

+0

除了你應該刪除ID屬性。您只需要爲name屬性執行此操作。 – animuson 2012-02-04 17:36:21

+0

如果你真的想看看底下發生了什麼,轉儲POST變量:<?php echo「<! - POST:」;的print_r($ _ POST);回聲「 - > \ n」; ?> ...然後使用視圖源來查看註釋中的調試 – dar7yl 2012-02-04 23:04:38

回答

1

複選框只有在打勾時纔會發佈。所以如果複選框沒有打勾,將不會出現在$_POST。另外你通常不應該給複選框賦予任何值。而是使用名稱來區分它們。

在數據庫中,我通常用tinyints表示複選框,存儲1表示選中,0表示未選中。

// If your checkbox name is foo, this will convert it 
// into a value that can be stored in the database 
$foo = isset($_POST['foo']) ? 1 : 0; 

還要注意,html要求id是唯一的。所以你不能有多個具有相同ID的元素。你應該清理你的輸入以防止sql注入。對數據庫中的用戶輸入使用mysql_real_escape_string()

更新

的主要問題是,查詢在最後一行缺少一個「)」。 查詢應該像

$query = "INSERT INTO markers (ciudad, 
         zona,address,name, 
         telefono,email,piso, 
         tipo,erasmus,nhabitaciones, 
         plazas,equipHabita,nbanos, 
         salon,cocina,electrodomesticos, 
         garaje,internet,calefaccion, 
         sexo,precio,superficie,otros, 
         fecha,lat,lng) 
    VALUES ('{$_POST['ciudad']}','{$_POST['zona']}', 
      '{$_POST['address']}','{$_POST['name']}','{$_POST['telefono']}', 
      '{$_POST['email']}','{$_POST['piso']}','{$_POST['tipo']}', 
      '{$_POST['erasmus']}','{$_POST['nhabitaciones']}', 
      '{$_POST['plazas']}','{$equipHabitaF}', 
      '{$_POST['nbanos']}','{$equipSalonF}', 
      '{$equipCocinaF}','{$equipElectroF}','{$_POST['garaje']}', 
      '{$_POST['internet']}','{$_POST['calefaccion']}', 
      '{$_POST['sexo']}','{$_POST['precio']}', 
      '{$_POST['superficie']}','{$_POST['otrosF']}', 
      '{$_POST['fecha']}','{$_POST['lat']}', 
      '{$_POST['lng']}')"; 
mysql_query($query, $link); 

注意在查詢的最後一行結束的「)」。還要注意,在變量中創建像這樣的查詢,可以輸出創建的查詢,以便您可以查看究竟發送給MySQL,還可以在不同的環境中測試您的查詢(即在phpmyadmin或任何其他數據庫管理中工具)。

+0

感謝您的答案,但我試圖存儲複選框的值,而不是如果他們被選中或不。 我想用複選框的值做一個字符串並將它們存儲到de MySQL DB中。這可能嗎? – danielrozo 2012-02-04 19:47:15

+2

您可能可以在您的'$ _POST'中爲選中的複選框獲取適當的值,但如果複選框未被選中,則永遠不會發布。所以你必須實現邏輯來查看哪些值已經發布並用它來確定哪些值沒有被髮布。 – Arjan 2012-02-04 19:54:59

+0

你應該仔細看看他發佈的代碼。他引用$ _POST值,所以不應該有任何問題,不管複選框是否被選中。 – periklis 2012-02-05 14:54:53