[PHP/MySql] (on)zichtbaar maken van document in doc..system

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor een documentatie systeempje wil ik de daarin opgeslagen documenten
zichbaar of onzichtbaar kunnen maken.

Eerst laat ik alle documenten zien d.m.v. volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query=mysql_query("SELECT * FROM documents WHERE Document_Type_Id='".$_POST['select_document_type']."'");

    function visible($v){
        if ($v=='Y'){ $checked="CHECKED"; 
        }else{
         $checked="UNCHECKED";
        };
        return($checked);
    }
while ($obj = mysql_fetch_object($query)) { 
    print "<input type=\"checkbox\" value=\"Y\" name=\"Visible[]\" class=\"checkbox\" ".visible($obj->Visible).">"; 
    print $obj->Document_Name."&nbsp;".$obj->Id."<br>";
    print "<input type=\"hidden\" name=\"Id[]\" value=\"".$obj->Id."\">";
} 
mysql_free_result($query);


Dan wil ik de hierbovenstaande wijzigingen doorvoeren in mijn database:
PHP:
1
2
3
4
5
6
7
    foreach($_POST['Id'] as $id){   
        if (empty($_POST['Visible'])){ $visible="N";
        }else{$visible="Y";}
        $query = "UPDATE documents SET Visible='".$visible."' WHERE Id='".$id."' "; 
        
        mysql_query($query) or die (mysql_error()); 
        }



Helaas werkt de code zoals ik die gemaakt hebt niet. ze zijn of allemaal zichtbaar of allemaal onzichtbaar

Wie weet er een oplossing?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Even op de cryptische toer:

HTML:
1
2
3
4
5
6
<input type="checkbox" name="setVisible[1]" value="true" checked="checked" />
<input type="hidden" name="ids[]" value="1" />
<input type="checkbox" name="setVisible[2]" value="true" checked="checked" />
<input type="hidden" name="ids[]" value="2" />
<input type="checkbox" name="setVisible[3]" value="true" checked="checked" />
<input type="hidden" name="ids[]" value="3" />


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$setVisible = array ();
$setInvisible = array ();
foreach ( $_POST ['ids'] as $id ) {
   if ( isset ( $_POST [ 'setVisible' ][$id] ) && $_POST [ 'setVisible' ][$id] == 'true' ) {
      $setVisible[]= (int) $id;
   } else { 
      $setInvisible[]= (int) $id;
   }
} 
$query = "UPDATE documents SET Visible='Y' WHERE Id IN(" .implode ( ',', $setVisible ) . ")";
$query = "UPDATE documents SET Visible='N' WHERE Id IN(" .implode ( ',', $setInvisible ) . ")";
?>
Dat lijkt me een beetje eenvoudiger en efficienter :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou de input-name onderscheidend maken: Er is nu maar 1 variabele POST[" visible"] bekend voor al je docuementen:


while ($obj = mysql_fetch_object($query)) {
print "<input type=\"checkbox\" value=\"Y\" name=\"Visible".$obj->Id."\" class=\"checkbox\" ".visible($obj->Visible).">";
print $obj->Document_Name." ".$obj->Id."<br>";
print "<input type=\"hidden\" name=\"Id[]\" value=\"".$obj->Id."\">";
}

Dan krijg je een lijstje met Visibles aan variabelen binnen... zoals je kunt zien mbv print_r($_POST);

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Als je weet dat $_POST['id'] een array is, dan zou ook moeten weten dat $_POST['visible'] binnenkomt als een array.
PHP:
1
2
3
foreach($_POST['Id'] as $key => $id){     
        $visible = (empty($_POST['Visible'][$key])) ? "N" : "Y";
}

Regeren is vooruitschuiven