webForumDet fria alternativet

Enkel funktion?

5 svar · 477 visningar · startad av slow

slowMedlem sedan apr. 2004148 inlägg
#1

Hej!

Har denna lilla rad för att se om en viss kategori är vald. Isåfall ska den bocka i en checkbox. Men nu har jag gjort så att man kan välja flera val i checkboxarna. Och sparat resultatet i en array....

if (!(strcmp("".$letters."","".$kategorier['id_kat'].""))) {echo "checked=\"checked\"";}

$letters innehåller ett innehåll på tex: 2,5,6,8

Så då skulle jag vilja höra om ni vet någon funktion som kollar om $letters innehåller idnr i $kategorier['id_kat']?

strcmp kollar om den är lika med...men finns det för innehåller?

Har försökt med strpos men inte lyckats ;(

itpastornMedlem sedan feb. 2007278 inlägg
#2

Låt mig se om jag fattat detta rätt. $letters är en sträng med kommaseparerade siffror? $kategorier['id_kat'] är rätt och slätt en siffra?

I så fall skulle jag köra:

if ( in_array( $kategorier['id_kat'], explode(',',$letters) ) ) {
     // matchat!
}
slowMedlem sedan apr. 2004148 inlägg
#3

Korrekt tänkt!

$letters kanske ser ut så här: 3, 5, 2,
Och $kategorier['id_kat'] så här: 5

Den markerar dock enbart en checkbox...så i detta fall skulle den markera kategorin med id 2...

Någon aning varför?

itpastornMedlem sedan feb. 2007278 inlägg
#4

Om du visar mer kod så kanske det kan förklaras?

Har du testat att köra var_dump() på dina variabler efter varje operation?

slowMedlem sedan apr. 2004148 inlägg
#5

Självklart bjuder jag på mer kod :)

Här kommer hela sidan...

<?php 
/* Hämta mail */
$db = new DB(); 
$db->query("SELECT * FROM ".DB_PREFIX."_newsletter WHERE id = ".$_GET['id']."");
$email = $db->next_record();

/* Kategorier */
$db1 = new DB(); 
$db1->query("SELECT * FROM ".DB_PREFIX."_newsletter_kategorier ORDER BY namnet ASC");

/* Formulär */
if ($_POST['save'])  {
$db3 = new DB();
$user = $_POST['user'];
$bockade = serialize($_POST['check']); //takes the data from a post operation...
$db3->query("UPDATE ".DB_PREFIX."_newsletter SET brev='$bockade' WHERE id = ".$_GET['id']."");
header("Location: ?load=newsletter&p=edit&id=".$_GET['id']."&s=j");
}
//$db3->close();
if ($_GET['s'] == 'j'){
$message = "Inställningarna är sparade"; } else {
$message = ""; }
?><form action="" method="post">
<table width="100%" border="0">
  <tr>
    <td width="50%" valign="top"><h3>E-post</h3>
    <?php echo $email['email'];?><br><?php 
	$brev=unserialize($email['brev']);
	
  foreach($brev as $letters)
   {
	  print $letters.', ';
   }	
	?></td>
    <td width="50%" valign="top"><h3>Nyhetsbrev</h3>
	<?php if ($message != NULL) { ?><div id="done"><?php echo $message ?></div><?php } ?>
    <?php while ($kategorier = $db1->next_record()) { ?>
    <p><input name="check[]" type="checkbox" id="check[]" value="<?php echo $kategorier['id_kat'];?>" <?php 
if ( in_array( $kategorier['id_kat'], explode(',',$letters) ) ) {
echo "checked=\"checked\"";
} 
?>> 
    <?php echo $kategorier['namnet'];?></p><?php } ?>
    <input type="hidden" name="user" id="user" value="<?php echo $email['id'];?>"/>
    <input type="submit" name="save" id="save" value="Spara" />
   <?php echo $bockade;?></label></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</form>

Tar jag var_dump på $letters så får jag detta:
string(1) "2"

Vilket inte känns rätt....

Kör jag på $brev får jag detta:
array(3) { [0]=> string(1) "3" [1]=> string(1) "5" [2]=> string(1) "2" }
Vilket känns mer rätt... :)

Sen gäller det bara att kunna jämföra denna array med kategorierna?

Tack för all hjälp föresten! Väldigt uppskattat...!

itpastornMedlem sedan feb. 2007278 inlägg
#6
foreach($brev as $letters)
   {
      print $letters.', ';
   }

$letters sätts till det sista array-värdet.

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)