Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    checkbox dinamici inserimento database e checked

    Salve, ho un problema con checkbox dinamici inserimento database e checked.
    Mi spiego meglio:
    Sto realizzando un sito dinamico per una società di vendita case.
    Ho un tabella "TBLPROPERTIES" della proprietà con vari campi: metri quadrati, località, etc.
    In una altra tabella "CAPTIONS" composta di due colonne (id,caption) ho una lista di servizi/accessori delle case stesse: piscina, aria condizionata, giardino, etc

    Quando creo una proprietà non ho nessun problema, nel form creo le checkbox direttamente prendendo i campi dalla tabella " CAPTIONS " e inserisco i dati in una altra tabella "FEATURES" composta di tre colonne (id_feat,id_pro,id_cap) dove id_pro = id proprietá e id_cap = id caption.

    Il problema mi nasce quando voglio modificare la proprietà e necessito di ottenere i checkbox "checked" e non "checked"

    utilizzo questo codice, pero il risultato è doppioni di checkbox:

    <?php

    $fid = "proprietà id da request"

    $query = "SELECT * FROM captions order by caption";
    $result = mysql_query($query);
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

    $query2 = "SELECT * FROM features where id_pro=$fid";
    $result2 = mysql_query($query2);
    while ($row2 = mysql_fetch_array($result2, MYSQL_ASSOC)) {
    ?>


    <input type="checkbox" name="caption[]" value="<?php echo $row['id']?>" <?
    if ($row2['id_cap']==$row['id'])
    {
    echo "checked";
    }
    ?>><?php echo $row['caption']?>

    <?php }} ?>

    Praticamente il risultato è due checkbox uguali, una checked se nella tabella features ho l'id della propritá e l'id del caption, e una non checked.
    sicuro l'errore mio è nei due while, pero da ignorante in materia, non só come soluzionare il problema.
    Vi ringrazio per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di homerbit
    Registrato dal
    Dec 2005
    residenza
    Roma
    Messaggi
    1,380
    se le due select devono intersecarsi sull'id di due tabelle diverse (a me questo pare di aver capito) potresti risolvere solo con una JOIN query in questo modo avrai un solo while:

    codice:
    SELECT * FROM captions  INNER JOIN features ON captions.id = features.id_cap WHERE features.id_pro=$fid
    ..scritta al volo

  3. #3
    Ciao homerbit,
    grazie per la risposta, pero in questo modo ottengo solo i checkbox selezionati "checked", io invece necessito anche dei checkbox vuoti che creo con dalla tabella "CAPTIONS", perche se successivamente una proprietá ha, per esempio, costruito un garage, ho bisogno di poter selezionare anche quella caratteristica e aggiornare la tabella "FEATURES" con la nuova caratteristica.

  4. #4
    è sempre difficile risolvere questi casi senza conoscere come sono strutturate e che dati hanno le tabelle sul DB

    cmq...prova a modificare la seconda select così:

    Codice PHP:
    $query2 "SELECT DISTINCT id_cap FROM features where id_pro=$fid"

  5. #5
    Grazie philbert,
    Appena rientro la provo.
    Qua é mezzogiorno e sono a mangiare...(fuso orario)
    Saluti...

  6. #6
    Provato, pero sempre mi mostra y record ripetuti.

    Le due tabelle sono queste:

    prima

    CREATE TABLE IF NOT EXISTS `captions` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `caption_en` varchar(50) DEFAULT NULL,
    `caption_fr` varchar(50) NOT NULL,
    `caption_es` varchar(50) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

    --
    -- Dump dei dati per la tabella `captions`
    --

    INSERT INTO `captions` (`id`, `caption_en`, `caption_fr`, `caption_es`) VALUES
    (1, 'Pool', 'Piscine', 'Piscina'),
    (2, 'Air Conditioning', 'Climatisation', 'Aire Acondicionado'),
    (3, 'Terrace', 'Terrasse', 'Terraze');

    seconda

    CREATE TABLE IF NOT EXISTS `features` (
    `id_feat` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `id_pro` varchar(10) NOT NULL,
    `id_cap` varchar(10) NOT NULL,
    PRIMARY KEY (`id_feat`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

    --
    -- Dump dei dati per la tabella `features`
    --

    INSERT INTO `features` (`id_feat`, `id_pro`, `id_cap`) VALUES
    (1, '1', '2'),
    (2, '1', '1');


    e la query che utilizzo è questa:

    <?php

    $fid = '1';

    $query = "SELECT * FROM captions order by caption_es";
    $result = mysql_query($query);
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

    $query2 = "SELECT * FROM features where id_pro=$fid";
    $result2 = mysql_query($query2);
    while ($row2 = mysql_fetch_array($result2, MYSQL_ASSOC)) {
    ?>


    <input type="checkbox" name="caption[]" value="<?php echo $row['id']?>" <?
    if ($row2['id_cap']==$row['id'])
    {
    echo "checked";
    }
    ?>><?php echo $row['caption_es']?>

    <?php }} ?>


    Ho allegato una immagine con il risultato.
    vorrei que si vedessero i checkbox selezionati e quelli vuoti, peró non doppi..
    Causa il fatto che sono solo un mago del copia incolla..., non riesco a capire come soluzionare il problema.

    Grazie in anticipo per aiutarmi.
    Immagini allegate Immagini allegate

  7. #7
    Nessuno ha un'idea?

  8. #8
    ciao

    intanto puoi fare uan query unica

    Codice PHP:
    <?php

       
    $fid 
    '1';

    //query unica!!
    $query "SELECT c.id, c.caption_es, f.id_cap FROM features f, captions c WHERE f.id_pro =$fid AND f.id_feat = c.id";

    $result mysql_query($query);
    while (
    $row mysql_fetch_array($resultMYSQL_ASSOC)) {
    ?>
    <input type="checkbox" name="caption[]" value="<?php echo $row['id']?><?
    if ($row2['id_cap']==$row['id'])
    {
    echo 
    "checked";

    ?><?php echo $row['caption_es']?>

    <?php ?>
    così funziona....

    ...il problema però sono le tabelle che non sono costruite bene logicamente.
    Ad esempio : il campo 'id_cap' della tabella 'features' non si capisce a cosa fa riferimento...

  9. #9
    Ciao philbert,
    grazie per il tuo codice, ho provato, pero non funziona. (tutto in bianco)
    Credo che avevi omesso una "}" relativa al if.
    id_cap é l'id della tabella captions que registro nella tabella features cuando creo la proprietá e che poi mi serve per recuperare il nome (Piscina, Aria cond, etc).
    Magari per quello che voglio fare c'è una solucione differente, pero le mie conoscenze non mi danno idee differenti.

  10. #10

    Nessuno ha un'idea?
    Vi spiego meglio quale è il mio problema.
    Ho una pagina che crea una proprietà (abitazioni), in questa proprietá ci sono vari dati, (metri quadrati, locazione, etc). Questi dati li gestisco in una sola tabella, (tblproperties).
    Ho la necessitá pero di mettere anche tutta una seria di specifiche esempio piscina, giardino, garage. La idea è creare dinamicamente , nella pagina di inserimento della proprietá, i checkbox con tutte le specifiche, prendendo i dati da una tabella "captions". (id,descrizione)
    Questo non è un problema, e neanche scrivere i dati in una nuova tabella "features" dove per ogni riga ho id,id_proprietá,id_caption preso dal checkbox.
    Il problema mi viene quando voglio modificare la proprietá, esempio aggiungendo o eliminando una caratteristica, tipo il garage o la piscina.
    Come creo i checkbox nella pagina modificaproprieta.php?
    Ho bisogno di tutti i checkbox, quelli vuoti e quelli checked. Con il codice che ho allegato sopra, mi vengono doppi.
    Avete una idea di come si puo soluzionare il problema, magari anche una idea di come fare il tutto diversamente, pero che permetta inserimento checkbox per le scelte e la modifica delle proprieta.
    Un grazie a tutti per leggermi....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.