Avatar billede d.kryger Praktikant
08. januar 2003 - 11:51 Der er 15 kommentarer og
1 løsning

Oprette checkbox i databse

Hej...

Kan nogen hjælpe mig med følgende:
Jeg er ved at lave en side hvor folk kan tilmelde til forskellige grupper (formand, kasserer osv.). På siden skal de så kunne klikke af hvis de er formand, kasserer osv. (man kan godt krydse to ting af!!!)

Hvis man f.eks. krydser af i Formand, så skal man blive oprettet i databasen med et 1-tal i afdeling, Kasserer nr. 2 osv.

Hvad er det der går galt i denne kode?:
<?php

    if (isset($_POST["telefon"]))
    {
        $fejl = false;

        if (trim($_POST["telefon"])=="")
        {    print "<font face='Verdana' color='red' size='1'>Der skal indtastes et telefonnummer...<br></font>";
            $fejl = true;
        }

        if ($fejl==false)
        {
            $connection = mysql_connect("--**--","--**--","--**--");
            $db = "--**--";
            mysql_select_db($db);

            mysql_query("INSERT INTO --**-- (telefon, afdeling) VALUES ('".$_POST["telefon"]."', '".$_POST["afdeling"]."')");

            print "Oprettet";
            exit;
        }

    }

?>

<form action='--**--' method='post'>
<div align="center">
  <center>
  <table border="0" width="400" cellspacing="0">
    <tr>
      <td width="110" valign="middle"><font size="1" face="Verdana">Mobilnr.:</font></td>
      <td width="390" valign="middle"><font size="1" face="Verdana"><input type="text" name="telefon" size="9" maxlength='8' class='input' value='<?php if (isset($_POST["telefon"])) print $_POST["telefon"]; ?>'></font></td>
    </tr>
    <tr>
      <td width="500" valign="middle" colspan="2"><font face="Verdana" size="1">&nbsp;</font></td>
    </tr>
    <tr>
      <td width="110" valign="top"><font size="1" face="Verdana">Kategorier:</font></td>
      <td width="390" valign="middle">
        <table border="0" width="300" cellspacing="0">
          <tr>
            <td width="15" bgcolor="#E7DFCE"><font face="Verdana" size="1"><input type="checkbox" name="1" value="1"></font></td>
            <td width="285" bgcolor="#E7DFCE"><font size="1" face="Verdana">Formand</font></td>
          </tr>
          <tr>
            <td width="15"><font face="Verdana" size="1"><input type="checkbox" name="2" value="2"></font></td>
            <td width="285"><font size="1" face="Verdana">Kasserer</font></td>
          </tr>
Avatar billede mjl Nybegynder
08. januar 2003 - 11:57 #1
???
Mangler du ikke en </table> til sidst...
???
Avatar billede mjl Nybegynder
08. januar 2003 - 11:58 #2
...eller måske 2 x </table>
Avatar billede d.kryger Praktikant
08. januar 2003 - 11:58 #3
Jo, jo. det ved jeg godt, men jeg klippede bare lige der...
Avatar billede jakoba Nybegynder
08. januar 2003 - 11:59 #4
din insert sætning
            mysql_query("INSERT INTO --**-- (telefon, afdeling) VALUES ('".$_POST["telefon"]."', '".$_POST["afdeling"]."')");

hvis felterne telefon og afdeling er talfelter (fx tinyint) skal der ikke anførselstegn onkring de værdier ud indsætter
            mysql_query("INSERT INTO --**-- (telefon, afdeling) VALUES (".$_POST["telefon"].", ".$_POST["afdeling"].")");

jeg har svært ved at tro at telefon og afdeling er de eneste felter i den tabel. din insert vil prøve at oprette en ny række uden navn eller dato eller medarbejdernummer aller hvad der nu er af yderligere felter. Hvis meningen er at rette i en række der allerede findes bør du bruge UPDATE sætningen.

mvh JakobA
Avatar billede d.kryger Praktikant
08. januar 2003 - 12:09 #5
Først: Der er kun felter i tabelen: telefon og afdeling. Og jeg prøver ikke at rette i eksisterende data.

Feltet telefon skal indeholde et telefonnummer og er et 'bigint'.
Feltet afdeling skal blot indeholde et nummer afhænig hvilken afdeling man har krydset af. Feltet er et 'int'.

Jeg kan ikke helt forstå hvad du mener med anførselstegn, hvilke skal væk og hvilke skal ikke?

Men hvad med denne linie, skal der ikke laves noget om der?:
<input type="checkbox" name="1" value="1">
Avatar billede jakoba Nybegynder
08. januar 2003 - 12:22 #6
det er de anførselstegn der er skrevet i mysql kommandoen der skal væk.
hvis du kikker på de to sterer ovenfor jeg har skrevet in mysql_query linie kan du se jeg har fjernet de uønskede anførseltegn i nummer 2

dine anførselstegn i html-koden er fine.
men atributten  name="1"  skal rettes. værdien til name skal starte med et alfabetisk bogstav, fx:  name="a"  det må ikke starte med et ciffer
Avatar billede d.kryger Praktikant
08. januar 2003 - 13:01 #7
Jeg er ikke helt skarp i php, så jeg håber du vil bære over med mig :-)

Når jeg prøver at oprette så kommer der ikke noget "over" i databasen, hvorfor ikke?

Hele koden:
<html>

<head>

</head>

<body leftmargin="0" rigthmargin="0" topmargin="0" marginwidth="0" marginheight="0" bgcolor="#E7DFCE">

<?php

if (isset($_POST["telefon"]))
{
$fejl = false;

if ( strlen( trim($_POST["telefon"]) )!=8 )
{    print "<font face='Verdana' color='red' size='1'>Der skal indtastes et telefonnummer uden mellemrum...<br></font>";
$fejl = true;
}

if ($fejl==false)
{
$connection = mysql_connect("**--**","**--**","**--**");
$db = "**--**";
mysql_select_db($db);

mysql_query("INSERT INTO **--** (telefon, afdeling) VALUES (".$_POST["telefon"].", ".$_POST["afdeling"].")");

print "Oprettet";
exit;
}

}

?>

<form action='**--**' method='post'>
<div align="center">
<center>
<table border="0" width="400" cellspacing="0">
<tr>
<td width="110" valign="middle"><font size="1" face="Verdana">Mobilnr.:</font></td>
<td width="390" valign="middle"><font size="1" face="Verdana"><input type="text" name="telefon" size="9" maxlength='8' class='input' value='<?php if (isset($_POST["telefon"])) print $_POST["telefon"]; ?>'></font></td>
</tr>
<tr>
<td width="500" valign="middle" colspan="2"><font face="Verdana" size="1">&nbsp;</font></td>
</tr>
<tr>
<td width="110" valign="top"><font size="1" face="Verdana">Kategorier:</font></td>
<td width="390" valign="middle">
<table border="0" width="300" cellspacing="0">
<tr>
<td width="15" bgcolor="#E7DFCE"><font face="Verdana" size="1"><input type="checkbox" name="formand" value="1"></font></td>
<td width="285" bgcolor="#E7DFCE"><font size="1" face="Verdana">Formand</font></td>
</tr>
<tr>
<td width="15"><font face="Verdana" size="1"><input type="checkbox" name="kasserer" value="2"></font></td>
<td width="285"><font size="1" face="Verdana">Kasserer</font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="600" valign="middle" colspan="2"><font size="1" face="Verdana">&nbsp;</font></td>
</tr>
<tr>
<td width="600" valign="middle" colspan="2">
<p align="center"><font face="Verdana" size="1"><input type="submit" value="Opret modtager" name="opret" class='input_knap'></font></td>
</tr>
</table>
</center>
</div>
</form>

</body>

</html>
Avatar billede jakoba Nybegynder
08. januar 2003 - 13:23 #8
en god regel er altid at sætte en 'or die' på kald til mysql_query. på den måde kan man få den fejlmeddelelse sql leverer når den ikke kan hitte ud af det.

mysql_query("
    INSERT
    INTO **--** (telefon, afdeling)
    VALUES (".$_POST["telefon"].", ".$_POST["afdeling"].")
") or die( mysql_error() );

die bliver kun udført hvis mysql_query går galt, så det skader ikke spor at beholde den selv efter du har debugget.
Avatar billede d.kryger Praktikant
08. januar 2003 - 13:26 #9
Så kommer følgende fejl: You have an error in your SQL syntax near ')' at line 1
Avatar billede jakoba Nybegynder
08. januar 2003 - 13:32 #10
så lad os debigge lidt mere så vi får at se præcis hvordan den kommando sql får egentlig ser ud:

$sql_kommando = "
    INSERT
    INTO **--** (telefon, afdeling)
    VALUES (".$_POST["telefon"].", ".$_POST["afdeling"].")
";
mysql_query( $sql_kommando ) or die( $sql_kommando ."<br>" .mysql_error() );
Avatar billede d.kryger Praktikant
08. januar 2003 - 13:37 #11
Så skirver den:
INSERT INTO **--** (telefon, afdeling) VALUES (12345678, )
You have an error in your SQL syntax near ') ' at line 4
Avatar billede jakoba Nybegynder
08. januar 2003 - 13:44 #12
og det har du jo også. der står slet ikke nogen værdi i $_POST["afdeling"]

og nu jeg kikker efter er der da heller ikke noget felt i din formular der har
  name="afdeling"
Avatar billede d.kryger Praktikant
08. januar 2003 - 13:46 #13
Nej, det skal jo komme alt efter hvad man krydes af...
Hvordan gør jeg det?
Avatar billede jakoba Nybegynder
08. januar 2003 - 13:47 #14
prøv evt:

if ( !isset($_POST["afdeling"]) ) { $_POST["afdeling"] = 2 }; // indsæt default værdi
$sql_kommando = "
    INSERT
    INTO **--** (telefon, afdeling)
    VALUES (".$_POST["telefon"].", ".$_POST["afdeling"].")
";
mysql_query( $sql_kommando ) or die( $sql_kommando ."<br>" .mysql_error() );
Avatar billede jakoba Nybegynder
08. januar 2003 - 13:56 #15
Nåe nej, i betragtning af dit oprindelige spørgsmål bliver det:

$afdeling = 0;  // default
if ( isset( $_POST["formand"] ) ) { $afdeling = 1; }
if ( isset( $_POST["kasserer"] ) ) { $afdeling = 2; }
// fortsæt evt for flere afdelinger

$sql_kommando = "
    INSERT
    INTO **--** (telefon, afdeling)
    VALUES (".$_POST["telefon"].", ".$_POST["afdeling"].")
";
mysql_query( $sql_kommando ) or die( $sql_kommando ."<br>" .mysql_error() );

men det er lidt ukorrekt at bruge checkbokse til det. i hver submit af formularen må der jo kun være EEN af dem der er valgt. det er et job for radioknapper.

formand <input type="radio" name="afdeling" value="1">
kasserer <input type="radio" name="afdeling" value="2">
hul i jorden <input type="radio" name="afdeling" value="10" selected>

og ny har du en radioknap-gruppe der hedder afdeling så du kan bruge $_POST["afdeling"]  for at få value-nummeret sat ind i databasen med koden i 08/01-2003 13:32:37

mvh JakobA
Avatar billede jakoba Nybegynder
08. januar 2003 - 14:00 #16
Ups. det hedder vist checked istedet for selected

hul i jorden <input type="radio" name="afdeling" value="10" checked>

når du starter med en af dem checked slipper du for at skulle teste om brugeren har huske at klikke.
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