Gå til innhold

[LØST] Hente verdi til checkbox fra mySQL


Anbefalte innlegg

Har et problem som jeg har litt vansker med å finne ut av.

 

På hjemmesiden min hentes diverse artikler fra en database og vises på siden. I admin panelet kan disse artiklene redigeres.

 

Her kommer problemstillingen, jeg har en checkbox som angir om artikkelen skal vises på siden eller ikke. Dette fungerer når jeg oppretter en ny artikkel, de jeg krysser av vises på siden og de jeg ikke krysser av blir laget, men vises ikke live. Jeg har kommet så langt at jeg får en hake i de som skal vises og blankt i de som ikke skal vises. Men om jeg endrer disse verdiene, altså setter en fra blank til avhuket så blir ikke dette sendt tilbake til databasen, selv om de andre verdiene jeg endrer blir det.

 

Sitter på jobb nå så jeg har ikke koden foran meg, men er det noen forslag til hva som kan være galt? Er det en "standard" for dette, hvis ikke kommer jeg tilbake med kodeeksempel når jeg kommer hjem i ettermiddag.

Endret av WebKnight
Lenke til kommentar
Videoannonse
Annonse

Har gjort dette for at checkboxen skal vises som avhuket eller blank :

WHILE ($teller < $totale_felter){
$FN = mysql_result($result, $teller, "fornavn");
$EN = mysql_result($result, $teller, "etternavn");
$Mail = mysql_result($result, $teller, "email");
$Bilde = mysql_result($result, $teller, "bilde");
$Vis = mysql_result($result, $teller, "vis_side");

if ($Vis==1){$Vis="checked"; echo "checked";}



<FORM ACTION="lag_oppdatering.php" METHOD="post">
<INPUT TYPE="hidden" NAME="ID" VALUE="<?echo $ID;?>">
FORNAVN :  	<INPUT TYPE="text" NAME="fornavn" VALUE="<?echo $FN;?>"><BR/>
ETTERNAVN :  <INPUT TYPE="text" NAME="etternavn" VALUE="<?echo $EN;?>"><BR/>
E-MAIL :  	<INPUT TYPE="text" NAME="email" VALUE="<?echo $Mail;?>"><BR/>
BILDE :  	<INPUT TYPE="text" NAME="bilde" VALUE="<?echo $Bilde;?>"><BR/>
VISE MEDLEM :	<input type="checkbox" NAME="vis_side" VALUE=""<? echo $Vis; ?>> 
<INPUT TYPE="submit" VALUE="OPPDATER INFORMASJON">
</FORM>

 

 

Og her er php filen som skal oppdatere databasen

$ID=	$_POST["ID"];
$FN=	$_POST["fornavn"];
$EN=	$_POST["etternavn"];
$Mail=	$_POST["email"];
$Bilde=	$_POST["bilde"];
$Vis=	$_POST["vis_side"];

if ($Vis=="checked"){$Vis==1; echo "<BR/>Medlemmet er $Vis";} else {$Vis==0; echo "<BR/>Medlemmet er $Vis";}

$query="UPDATE test_table SET fornavn = '$FN', etternavn = '$EN', email = '$Mail', bilde = '$Bilde', vis_side = '$Vis' WHERE ID='$ID'";
mysql_query($query);

echo "<BR/>Medlemsnummer $ID : $FN $EN er oppdatert :)";

 

Det vises altså riktig når jeg henter dataene inn i skjemaet, men endringer i checkboxen blir ikke utført..

 

Noen kloke hoder der ute som kan hjelpe..?

Lenke til kommentar

checked setter du input tagen i html... Data som sendes når den er checked, er enten on, eller ingenting.

Derav bør dette kunne fungere tilfredsstillende i scriptet som oppdaterer databasen:

$Vis= $_POST["vis_side"];

if ($Vis){$Vis=1; echo "<BR/>Medlemmet er $Vis";} else {$Vis=0; echo "<BR/>Medlemmet er $Vis";}

Ser også en annen ting som er feil. Du bruker 2 likhetstegn for å sette $vis lik 1. Her må du bare bruke ett likhetstegn. Samme i else blokken. Rettet i koden over...

Prøv det.

/Kakkle

Lenke til kommentar

Takker for hjelpen så langt :thumbup: , har nå kommet et steg videre, men nå settes alle artiklene til 0 i databasen selv om jeg huker av i boksen eller ikke.

 

Har satt type til enum ('1','0') i mySQL databasen, er det kanskje her problemet ligger.. :hmm:

 

Nå gjenstår bare at jeg får sendt et 1 tall når jeg har huket av for vis side.

 

Koden for redigeringssiden ser nå slik ut :

$teller=0;
WHILE ($teller < $totale_felter){
$FN = mysql_result($result, $teller, "fornavn");
$EN = mysql_result($result, $teller, "etternavn");
$Mail = mysql_result($result, $teller, "email");
$Bilde = mysql_result($result, $teller, "bilde");
$Vis = mysql_result($result, $teller, "vis_side");

if ($Vis==1)
 	{$Vis="checked";}


?>

<FORM ACTION="lag_oppdatering.php" METHOD="post">
<INPUT TYPE="hidden" NAME="ID" VALUE="<?echo $ID;?>">
FORNAVN :  	<INPUT TYPE="text" NAME="fornavn" VALUE="<?echo $FN;?>"><BR/>
ETTERNAVN :  <INPUT TYPE="text" NAME="etternavn" VALUE="<?echo $EN;?>"><BR/>
E-MAIL :  	<INPUT TYPE="text" NAME="email" VALUE="<?echo $Mail;?>"><BR/>
BILDE :  	<INPUT TYPE="text" NAME="bilde" VALUE="<?echo $Bilde;?>"><BR/>
VISE MEDLEM :	<input type="checkbox" NAME="vis_side" VALUE=""<? echo $Vis; ?>> 
<INPUT TYPE="submit" VALUE="OPPDATER INFORMASJON">
</FORM>

<? 
++$teller; 
}

 

 

Og siden "lag_oppdatering.php" ser slik ut :

$ID=	$_POST["ID"];
$FN=	$_POST["fornavn"];
$EN=	$_POST["etternavn"];
$Mail=	$_POST["email"];
$Bilde=	$_POST["bilde"];
$Vis=	$_POST["vis_side"];

if ($Vis){$Vis=1; echo "<BR/>Medlemmet er $Vis";} else {$Vis=0; echo "<BR/>Medlemmet er $Vis";}

$query="UPDATE test_table SET fornavn = '$FN', etternavn = '$EN', email = '$Mail', bilde = '$Bilde', vis_side = '$Vis' WHERE ID='$ID'";
mysql_query($query);

echo "<BR/>Medlemsnummer $ID - $FN $EN er oppdatert og Vis er : $Vis :)";

Lenke til kommentar

Du kan forsåvidt bare la det feltet være en int, eller en streng i databasen.

 

Hva får du forresten opp Når den er oppdatert ? Vises id (Meldemsnummer $ID). Bare lurte, siden jeg ikke kan se at du har hentet $ID fra noen plass på registreringssiden. KAn evt ta view source på reg siden og se om id feltet får en value. For å få id fra url, kan du prøve med $ID=$_GET["id"];.

 

Du kan evt skrive ut $query før du sender den til mysql, for å debugge, og se at spørringen er riktig.

Lenke til kommentar

Har kapitulert i forhold til checkbox'en og bruker nå en varchar med Y/y eller N/n i databasen og da fungerer det. (sjekker om $Vis er Y eller y og hvis ja så vises siden og hvis n, eller noe annet for den saks skyld, så vises den ikke) Ser ikke like bra ut og er litt mere tungvint, men funker iaffall...

 

Har en Get ID over koden jeg har limt inn så den får jeg med.

 

Synes fortsatt det ville vært best, og sett bedre ut om jeg kunne brukt en checkbox, så forslag til løsning mottas med takk :)

 

Å få sett om artikkelen er huket av eller ikke når man er på redigerings siden har altså gått greit, men for å få til det måtte jeg sette $Vis lik checked (if ($Vis==1) {$Vis="checked";} Og det er her jeg tror problemet ligger.

 

Siden den da blir satt til checked så er det det som blir verdien til $Vis som sendes til databasen, og derfor tror jeg det blir krøll. Får ikke testet før i ettermiddag, men kan man bruke checkbox sammen med en varchar idatabasen?

 

Huff som jeg knoter med dette, og beklager om jeg spør dumt, men har ikke vært borti så mye av dette med checkboxer i forbindelse med DB'er før...

 

kakkle - Setter stor pris på at du kommer med forslag og har hjulpet meg så langt! :thumbup:

Lenke til kommentar

$Vis = mysql_result($result, $teller, "vis_side");

if (strtolower($Vis)=="y")
 {$Vis="checked";}


?>

<FORM ACTION="lag_oppdatering.php" METHOD="post">
<INPUT TYPE="hidden" NAME="ID" VALUE="<?echo $ID;?>">
FORNAVN :   <INPUT TYPE="text" NAME="fornavn" VALUE="<?echo $FN;?>"><BR/>
ETTERNAVN :  <INPUT TYPE="text" NAME="etternavn" VALUE="<?echo $EN;?>"><BR/>
E-MAIL :   <INPUT TYPE="text" NAME="email" VALUE="<?echo $Mail;?>"><BR/>
BILDE :   <INPUT TYPE="text" NAME="bilde" VALUE="<?echo $Bilde;?>"><BR/>
VISE MEDLEM : <input type="checkbox" NAME="vis_side" VALUE=""<? echo $Vis; ?>>
<INPUT TYPE="submit" VALUE="OPPDATER INFORMASJON">
</FORM>

Denne er grei, regner jeg med... Den setter inn strengen "checked" i input tagen, dersom $Vis er lik "y" (Eller "Y").

$Vis= $_POST["vis_side"];
echo "Vis: $Vis";
if ($Vis){$Vis="y"; echo "<BR/>Medlemmet er $Vis";} else {$Vis="n"; echo "<BR/>Medlemmet er $Vis";}

Kan ikke skjønne at ikke det skal fungere.

 

Hva med feltet ID ? Er det et tall, eller en streng i databasen ? Dersom det er et tall (int, smallint, longint elns), så må du fjerne ' rundt ID i spørringen din (i oppdateringsscriptet)

 

Kan du eventuelt skrive hva som kommer ut når du har oppdatert ? Altså hva denne linjen genererer :

echo "<BR/>Medlemsnummer $ID - $FN $EN er oppdatert og Vis er : $Vis :)";

Lenke til kommentar

Kode eks 1:

Her setter jeg altså $Vis til å være lik checked hvis den opprinnelig er y/Y. Noe som gjør at haken blir huket av, hvis ikke er boksen blank. So far so good :)

 

Det er herfra ting ikke funker som jeg ønsker.

Nå er altså verdien av $Vis checked (hvis y/Y). Hvis ikke så blir verdien blank.

 

Kode eks 2:

Her hentes verdien checked til $Vis $Vis= $_POST["vis_side"];

 

Når jeg da bruker if ($Vis) så blir det vel krøll siden det her egentlig skulle vært et 1 tall (TRUE). Pga. dette settes alle artikler lik 0 når man sender oppdateringen av $Vis.

 

Hvordan løses dette?

 

ID'en er en int, men den er vel grei siden alle de andre feltene som skal endres blir det.

Lenke til kommentar

Dersom du vil at value på checkboxen skal bli 1 dersom den er satt, kan du bare sette value="1" i input tagen.

VISE MEDLEM : <input type="checkbox" NAME="vis_side" VALUE="1" <? echo $Vis; ?>>

Ta og prøv med if($Vis==1), da... Dersom ikke checkboxen er satt, vil ikke $Vis innholde noenting.

 

Men dersom alle poster i databasen blir satt til det som $Vis er, så tyder det på feil i WHERE clausen.

 

OG en ting til.. Legg på en or die etter query:

mysql_query($query) or die("Feil i spørring: $query<br>".mysql_Error());

Hva får du av denne linjen:

echo "<BR/>Medlemsnummer $ID - $FN $EN er oppdatert og Vis er : $Vis :)";

Endret av kakkle
Lenke til kommentar
*mumle noe om at man kan trykke av caps-lock før man koder*

 

:p

*mumle noe om at det vel ikke var kodingen min jeg var ute etter å få kommentarer til* :roll:

 

Har nå kommet et steg lenger - MAKAN hvor dette skulle være vanskelig da. Nå har jeg gjort en test og som kun skriver ut alt jeg sender fra update siden og ifølge den stemmer det - sender 1 når huket av og 0 når ikke (når jeg manuelt har satt 0 som verdi i databasen).

 

Koden er som følger nå :

<?
include ("../meny.inc");
include ("../config/test_db_kobling.php");

$ID=$_GET['ID'];

echo "<BR/><BR/>";
echo "Medlemsnummeret er <B>$ID</B> <BR/>";

$query = "SELECT * FROM test_table WHERE ID='$ID'";
$result=mysql_query($query) or die(mysql_error());
$totale_felter=mysql_numrows($result);
mysql_close();
$teller=0;

WHILE ($teller < $totale_felter){
$FN =  	mysql_result($result, $teller, "fornavn");
$EN =  	mysql_result($result, $teller, "etternavn");
$Mail =  mysql_result($result, $teller, "email");
$Bilde =  mysql_result($result, $teller, "bilde");
$Vis =  	mysql_result($result, $teller, "vis_side");
?>
<FORM ACTION="lag_oppdatering.php" METHOD="post">
     <INPUT TYPE="hidden"  NAME="ID"    VALUE="<?echo $ID;?>">
 FORNAVN :  	<INPUT TYPE="text"  	NAME="fornavn"  	VALUE="<?echo $FN;?>"><BR/>
 ETTERNAVN :  <INPUT TYPE="text"  	NAME="etternavn"	VALUE="<?echo $EN;?>"><BR/>
 E-MAIL :  	<INPUT TYPE="text"  	NAME="email"  	VALUE="<?echo $Mail;?>"><BR/>
 BILDE :  	<INPUT TYPE="text"  	NAME="bilde"  	VALUE="<?echo $Bilde;?>"><BR/>
 VISE MEDLEM :	<INPUT TYPE="checkbox"  NAME="vis_side"  VALUE="<?echo $Vis;?>"<?echo $Vis;?> <?if ($Vis==1) {echo "checked";} else {$Vis="0";}?> ><BR/>
 
 <? echo "\$Vis har verdi : $Vis";?>
 <BR/><BR/>  
     <INPUT TYPE="submit"      	VALUE="OPPDATER INFORMASJON">
</FORM>
 
<? 
++$teller; 
}// End while.
include ("../config/lukk_db_kobling.php");
include ("footer.inc");	
?>

 

Nå er det slik at hvis jeg skal redigere en post som er huket av, lar denne fortasatt være huket av så går det bra. Tar jeg bort avhukingen går det også bra, men i det sendes ingenting til DB'en, feltet blir blankt.

 

En post som ikke er huket av forblir slik uansett om jeg lar det stå eller huker av for vis.

 

I mysql har jeg valgt datatype enum ('1','0')

 

Koden for siden som skal utføre endringene ser slik ut nå:

<?
include("../meny.inc");
include ("../config/test_db_kobling.php");

$ID=	$_POST["ID"];
$FN=	$_POST["fornavn"];
$EN=	$_POST["etternavn"];
$Mail=	$_POST["email"];
$Bilde=	$_POST["bilde"];
$Vis=	$_POST["vis_side"];

$query="UPDATE test_table SET fornavn = '$FN', etternavn = '$EN', email = '$Mail', bilde = '$Bilde', vis_side = '$Vis' WHERE ID='$ID'";
mysql_query($query) or die(mysql_error());

echo "<BR/>Medlemsnummer $ID - $FN $EN er oppdatert :)<BR/><BR/>";
echo "Vis verdi etter endring er : $Vis";

include ("../config/lukk_db_kobling.php");
include ("../footer.inc");
?>

 

 

Noen forslag?

Endret av WebKnight
Lenke til kommentar

Prøv å sette inn dette etter $vis = $_POST["vis_side"]:

$vis = isset($vis) ? 1:0;

Nå blir $vis 1 dersom den er satt, og 0 dersom den ikke er satt. Dette blir så satt inn i databasen... (Pass på at dette blir gjort når du oppretter posten også )

 

Når dette så skal hentes ut og legges inn i felt, så setter du $vis = "checked" dersom den fra databsen er 1, og $vis ="" dersom verdi fra db er 0. Value på checkbox feltet, kan du forsåvidt sette til å være 1 hele tiden. $_POST["vis_side"] vil bare bli 1 dersom denne er satt, eller for å si det enklere (?), $_POST["vis_side"] blir det som du har satt som value, dersom den er satt, så hvis du setter value lik det som er i databasen, så vil value være lik 0 dersom den ikke er satt.. Dersom du da setter denne, vil $_POST["vis_side"] bli null. Hvis du skjønner...

 

Dette ble mye svada, men håper du skjønner prinsippet.

Litt kode:

Her er litt:

$vis = $row["vis_side"]==1 ? "checked":"";
echo "<input type = 'checkbox' name='vis_side' value='1' $vis>";

 

EDIT : Litt forklaring til koden: Her blir $vis satt til "checked" dersom verdien fra databasen er 1. Blir satt til "" (ingenting) dersom verdien fra databasen ikke er 1. Altså en enkel if.. else.. ting.

 

Håper dette ikke ble for vanskelig forklart

Endret av kakkle
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...