Avatar billede sthen Nybegynder
11. september 2002 - 13:37 Der er 18 kommentarer og
1 løsning

variabel af variabel

Jeg har et script, hvor jeg lister arrangementer op via en MySql_db. Ud for hvert arrangement sætter jeg en checkbox, som jo skal have forskellige navne, derfor sættes variablen $i fortløbende for hver checkbox.

Nu vil jeg jo BAGEFTER gerne kunne se HVILKE checkboxe der har været valgt, så jeg kan putte resultatet tilbage i en ny db.

HVORDAN !!!

Mit script ser indtil videre således ud (barberet lidt ned):

<?

if($send){

// HVORDAN "LISTER" JEG DE CHECKBOXE OP JEG HAR VALGT HER !!!
Har prøvet noget med:
echo $$i;
og andre underlige ting, men kan ikke få skidtet til at virke

}
else
{

    $db = mysql_connect("xxx", "xxx", "xxx");
    mysql_select_db("xxx", $db);


echo "<center><FORM METHOD=\"POST\" ACTION=\"min_fil.php\">";

$i = 1;

echo "<TABLE BORDER=\"1\">";

$result = mysql_query("SELECT * FROM arrangementer order by 'dato' ");

while($arrangement = mysql_fetch_array($result)) {

$tid = time();
if ($tid-(60*60*14) < $arrangement[dato]){

$ugedag = date("D j. M",$arrangement[dato]);

print "<TR><TD>".$ugedag;
print " kl. ";
print date("H.i",$arrangement[dato]);

print "<BR><i><b>".$arrangement[type]."</b></i><br>";

print "$arrangement[tekst]";

print "</TD><TD><INPUT TYPE=\"CHECKBOX\" NAME=\"$i\" VALUE=\"".$arrangement[id]."\">";

$i = $i + 1;

print "</TD></TR>";

}}


mysql_close;


?>
<TR><TD>
<INPUT TYPE="HIDDEN" NAME="send" VALUE="send">
<INPUT TYPE="SUBMIT" VALUE="Tilmeld">
<input type="RESET" Value="Ryd indtastning"></TD><TD></TD></TR>
</TABLE></center>

<?
}
?>
Avatar billede whatever Nybegynder
11. september 2002 - 13:41 #1
Hvis du gav dem samme navn, ville du kunne få lagt de valgte ned i en array på følgende måde:

<INPUT TYPE=\"CHECKBOX\" NAME=\"arrangement[]\" VALUE=\"".$arrangement[id]."\">";

Så vil php opfatte arrangement som en array, og ikke som en variablen. Array'en arrangement indeholder så id'erne på de valgte arrangementer.
Avatar billede sthen Nybegynder
11. september 2002 - 13:47 #2
Lyder spændende.

Hvis jeg nu gør som du siger, hvad skal jeg så skrive her, hvis jeg til at starte på bare ønsker et echo af de valgte checkboxe:

if($send){

echo "denne er valgt";

}
Avatar billede whatever Nybegynder
11. september 2002 - 13:50 #3
Da de valgte checkbokse ligger i en array. Kan du udskrive dem med

if ($send) {
  print_r $arrangement;
}
Avatar billede sthen Nybegynder
11. september 2002 - 13:58 #4
Holder ikke helt.

Hvis jeg skriver som du foreslår får jeg:
Parse error: parse error in /hotel/sthens/WWW/php/min_fil.php on line 44
når jeg har uploadet.

Hvis jeg kun skriver

print $arrangement;

får jeg et output der siger: Array
Avatar billede whatever Nybegynder
11. september 2002 - 14:09 #5
Det burde nu virke. Prøv dette

if ($send) {
  print_r ($arrangement);
}
Avatar billede whatever Nybegynder
11. september 2002 - 14:10 #6
Har du det liggende online?

Hvis ja, så smid lige en link så kigger jeg på det.
Avatar billede sthen Nybegynder
11. september 2002 - 14:22 #7
Nu får jeg ikke fejl, når jeg loader siden, men et lidt pudsigt output efter at have valgt noget.

Kan vi mon få et "pænere" output, hvor der bare står de valgte checkboxe.

http://www.sthens.dk/php/mailservice_tilmeld.php
Avatar billede sthen Nybegynder
11. september 2002 - 14:24 #8
Eller skal det se sådan ud ??

Hvis det skal - hvordan bruger jeg det så videre ???

Jeg skylle jo gerne have smidt ned i en db hvilke checkboxe der er valgt
Avatar billede sthen Nybegynder
11. september 2002 - 14:28 #9
skylle == skulle
Avatar billede sthen Nybegynder
11. september 2002 - 14:29 #10
Du skal nok få flere points, hvis du er ved at føle dig "snydt"
Avatar billede whatever Nybegynder
11. september 2002 - 14:47 #11
Du kan prøve dette:

<?php

$arr_count = count($arrangementer);
sort($arrangementer,SORT_NUMERIC);
$print .= "<b>Følgende arrangementer er valgt:</b><br />";
for ($i=0; $i < $arr_count; $i++) {
    if ($i+1 != $arr_count) {
        $print .= $arrangementer[$i] . ", ";
    } else {
        $print .= $arrangementer[$i];
    }
}

echo $print;

?>

De udskriver array'en på følgende måde, og sorterer indholdet i array'en:

<b>Følgende arrangementer er valgt:</b>
1, 2, 13, 17, 19, 20
Avatar billede sthen Nybegynder
11. september 2002 - 14:53 #12
Warning: Wrong datatype in sort() call in /hotel/sthens/WWW/php/mailservice_tilmeld.php on line 45
Følgende arrangementer er valgt:
Avatar billede sthen Nybegynder
11. september 2002 - 15:15 #13
Men jeg føler også, at vi er ved at komme ud på et vildspor.

Det jeg gerne vil have er noget i denne stil:

mysql_query("Insert into arrangementer (nummer) values ('$arrangement')") || die(mysql_error());
Avatar billede whatever Nybegynder
11. september 2002 - 15:18 #14
Den skal vist se sådan ud:

<?php

$arr_count = count($arrangement);
sort($arrangement,SORT_NUMERIC);
$print .= "<b>Følgende arrangementer er valgt:</b><br />";
for ($i=0; $i < $arr_count; $i++) {
    if ($i+1 != $arr_count) {
        $print .= $arrangement[$i] . ", ";
    } else {
        $print .= $arrangement[$i];
    }
}
echo $print;

?>

Hvorfor vil du indsætte det i databasen?
Avatar billede sthen Nybegynder
11. september 2002 - 15:33 #15
Så virker det vist.

Hvorfor ned i databasen ??

Fordi jeg skal køre et cronjob, for at kunne sende en mail til brugerne ca. én uge før de(t) valgte arrangement(er).
Bare som en service.

Så hvis du kan fortælle mig hvordan min INSERT skal se ud, så er du en helt, og får 30 points ekstra.

Det er selvfølgelig bare et forløbigt script, da jeg mangler navn og mailadresse på brugeren, men det er jo slavearbejde.
Avatar billede sthen Nybegynder
11. september 2002 - 15:37 #16
INSERTEN må ikke være kommasepereret, da jeg skal bruge et felt pr arrangement pr bruger, for at kunne slette de afviklede arrangementer
Avatar billede whatever Nybegynder
11. september 2002 - 15:38 #17
Skal der oprettes en post i databasen for hvert valgt arrangement? Eller skal alle id'erne ligges i samme felt?
Avatar billede whatever Nybegynder
11. september 2002 - 15:41 #18
Ok. Så er du nød til at loope igennem array'en.

Jeg har her sat sql-sætningen ind i samme array, som udskriver de valgte arrangementer:

<?php

$arr_count = count($arrangement);
sort($arrangement,SORT_NUMERIC);
$print .= "<b>Følgende arrangementer er valgt:</b><br />";
for ($i=0; $i < $arr_count; $i++) {
    if ($i+1 != $arr_count) {
        $print .= $arrangement[$i] . ", ";
    } else {
        $print .= $arrangement[$i];
    }
    mysql_query("Insert into arrangementer (nummer) values (" . $arrangement[$i] . ")") or die(mysql_error());
}
echo $print;

?>


Og hvis du ikke ønsker det, kan du bruge:

$arr_count = count($arrangement);
for ($i=0; $i < $arr_count; $i++) {
    mysql_query("Insert into arrangementer (nummer) values (" . $arrangement[$i] . ")") or die(mysql_error());
}
Avatar billede sthen Nybegynder
11. september 2002 - 15:56 #19
Du er en HELT.

Tak for din ihærdighed - det lykkedes.
Du har f.... fortjent dine points.

Jeg er ikke så sej til detder array-fis, men det kommer vel med alderen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester