Gå til innhold

[LØST] Check-boxer i meldings-funksjon.


Anbefalte innlegg

Hei.

 

Trenger litt hjelp, har prøvd og løse problemet ved og lage til en løsning selv, men dette fungerte ikke optimalt.

 

Jeg har skrevet ett internt meldingssystem på en side, men på denne så vil jeg gjerne ha en check-box forran hver melding som ligger i inboxen til brukeren så de kan huke av flere og trykke på "Slett Alle" "marker som lest" "markert som ulest" osv.

 

Gjerne med en checkbox i toppen som merker alle meldingene. (må vel få hjelp av en med kompetanse i JS da)

 

Noen som har noe sånt liggende, eller som har en ide om ossen det kan løses?

 

Takker for all hjelp.

Endret av Ellingsen
Lenke til kommentar
Videoannonse
Annonse

Løsning på javascriptet vertfall..

<html>
<body>
<script type="text/javascript">
function superCheck () {
 var checkCount = document.theForm.sub.length;
 for(i=0;i<checkCount;i++) {
   document.theForm.sub[i].checked = document.theForm.super.checked;
 };
};
</script>
<form name="theForm">
<input type="checkbox" name="super" onClick="superCheck();">
<input type="checkbox" name="sub">
<input type="checkbox" name="sub">
<input type="checkbox" name="sub">
</form>
</body>
</html>

 

php delen blir litt verre ettersom jeg ikke vet hva du har fra før.

Endret av grimjoey
Lenke til kommentar
  • 2 uker senere...

Se der ja, det er flott.

 

Nei, det jeg har fra før er jo greit, men når jeg kommer til funksjonen som lister opp alle meldingene i inboxen, hvordan skal jeg navngi checkboxene i HTML'n, for så og kunne hente opp igjen hvilke av dem som er merket i en slettfunksjon?

 

Mulig jeg suger på og forklare, men om det er noen som skjønner så hadde jeg vært veldig takknemelig.

Lenke til kommentar
Løsning på javascriptet vertfall..

<html>
<body>
<script type="text/javascript">
function superCheck () {
 var checkCount = document.theForm.sub.length;
 for(i=0;i<checkCount;i++) {
   document.theForm.sub[i].checked = document.theForm.super.checked;
 };
};
</script>
<form name="theForm">
<input type="checkbox" name="super" onClick="superCheck();">
<input type="checkbox" name="sub">
<input type="checkbox" name="sub">
<input type="checkbox" name="sub">
</form>
</body>
</html>

 

php delen blir litt verre ettersom jeg ikke vet hva du har fra før.

8501730[/snapback]

 

burde det ikke blitt brukt id istedenfor name, siden $_POST bruker name? Hvordan skal man fa tak i verdiene i PHP-scriptet?

Lenke til kommentar

Har ikke lagd noe tilsvarende dette før, så dette blir litt synsing fra min side. Men jeg ville ha gitt hver checkbox ett unikt navn, og en egen checkbox for alle så det blir noe tilsvarende dette:

<input type="checkbox" name="sub1">
<input type="checkbox" name="sub2">
<input type="checkbox" name="sub3">
...
<input type="checkbox" name="subN">
<input type="checkbox" name="alle">

 

I PHP delen så kan man gjør en sjekk om $_POST['alle']=='on' og så utføre det man ønsker for alle forekomster. En FOREACH må vel til får å håntere resterende checkbox'er.

Dette er så langt jeg har tenkt foreløpig, håper det er til noe hjelp :)

Lenke til kommentar

hehe, takk for forslag =)

 

men det som er problemet er jo at antall poster endrer seg jo, så når man kommer til slett funksjonen så veit den jo ikke hvor mange checkboxer den skal sjekke.

 

Kunne gjort som du sier og lagt opp slik at alle heter box# med tall som stiger, men da må jo slett scriptet også sjekke alle $_POST['box1'] og opp til egentlig uendelig for og finne ut hva som skal slettes.. har ikke noe paging system.

 

Tenkte kanskje at det fantes en enklere måte, og det tror jeg fortsatt at det gjør :)

 

msg_sys.jpg

Endret av Ellingsen
Lenke til kommentar

Det som er kjekt med checkbox'er er at hvis de ikke er huket av, så blir de ikke med i $_POST, så selv om du har 1000 meldinger og du huker av kun 1, så får $_POST kun en forekomst.

Test her

PHP

<pre>

<?php

print_r($_POST);

?>

</pre>

<form action="test.php" method="post">

I have a bike:

<input type="checkbox" name="vehicle1" value="Bike" />

<br />

I have a car: 

<input type="checkbox" name="vehicle2" value="Car" />

<br />

I have an airplane: 

<input type="checkbox" name="vehicle3" value="Airplane" />

<input type="submit" value="ok" />

</form>

 

Så ved å legge id'en i value så skulle det være en grei sak og sette sammen en sql settning.

F.eks sletting

PHP
<?php

if (isset($_POST['alle']))

$sql="TRUNCATE meldinger";

else

{

$sql="DELETE FROM meldinger WHERE id=";

foreach ($_POST as $key) $sql.=mysql_real_escape_string($key)." OR id=";

$sql=substr($sql,0,length($sql)-7);

}

mysql_query($sql);

?>

 

Dette er bare hvordan jeg tenker, fult mulig det er bedre og mer effektive løsninger, men prøver bare å sparke i gang noen tanker om mulige løsninger. :thumbup:

Lenke til kommentar

Hadde samme problemstilling med checkbox'er og php for noen dager siden.

Her er forenklet versjon av hvordan jeg løste det:

 

HTML-kode med javascript.

<html>
<script language="JavaScript">
<!-- Hide JavaScript from old browsers

function checkUncheckAll() {
   var currentState = document.messagesform.checkAll.checked;
   var checkboxes = document.messagesform['checklist[]'];
   if(currentState) {
       for(i = 0; i < checkboxes.length; i++) {
            checkboxes[i].checked = true;
       }
   }
   else {
       for(i = 0; i < checkboxes.length; i++) {
            checkboxes[i].checked = false;
       }  
    }  	
}

// End hiding JavaScript -->
</script>
<body>
 <form name="messagesform" method="post">
  <input type="checkbox" name="checkAll" onClick="checkUncheckAll()">
  <input type="checkbox" name="checklist[]" value="1">
  <input type="checkbox" name="checklist[]" value="2">
  <input type="checkbox" name="checklist[]" value="3">
  <input type="submit" name="delete" value="Slett markerte">
 </form>
</body>
</html> 

 

Sett alle checkbox'ene i samme gruppe med name="checklist[]" .

[] bak gruppenavnet gjør det lettere å lage en php array av checkbox'ene i etterkant.

 

php-kode for mottaker-script:

//Sjekke POST-data
if(isset($_POST['delete']) && !empty($_POST['checklist])) {

   $checked= $_POST['checklist'];

   //Lage passende array av checkbox-verdiene
   $ids = (is_array($checked)) ? implode(',', $checked) : $checked;

   //SQL-spørring
   $q = "DELETE FROM messages WHERE id IN($ids) AND user_id='$myuserid'";
   //Kjøre spørring mot database osv....
}

 

Ved hjelp av sql-operatoren IN sendes array'et $ids med verdiene av checkboxene inn i spørringen.

Dermed slipper man å "manuelt" generere en streng med WHERE id=1, id=2, osv.

AND userid='$myuserid' kan legges til om man vil sikre at brukeren kun kan slette sine egne meldinger.

 

Dersom du lurer på noe ved løsningen så er det bare å spørre.

Endret av Zandar
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...