Avatar billede creldemaster Nybegynder
05. marts 2011 - 01:57 Der er 14 kommentarer og
1 løsning

PHP problem med at sende til database?

Jeg kan ikke lige se hvorfor jeg ikke kan få det til at fungere, dog siger den i en fejlmeddelse af variablerne gront, brod, etc etc. ikke er defineret..?
Her er koden:

START

<?php
echo"
<center> <h2> Her kan du udfylde din helt egen indkøbsliste </h2> </center>
";
// her kommer jeg i kontakt med databasen
$connect = mysql_connect ("localhost", "root", "") or die("Error connecting to db");
// her vælger jeg vores database
mysql_select_db("indkob") or die ("Error selecting db");
// her vælger jeg hvilke værdier jeg vil sætte ind i tabellen                                   
$sql = "INSERT INTO liste (gront, brod, fryseren, koledisken, hus, andet)
VALUES
('$_POST[gront]','$_POST[brod]','$_POST[fryseren]','$_POST[koledisken]','$_POST[hus]','$_POST[andet]')";
// Her laver jeg min form til at sende data til databasen
echo "
<form action='indkoebsliste.php' method='POST'>
<center> <table>
<tr>
    <td>
    <center><p> Frugt og Grønt: </p></center>
            <TEXTAREA NAME='gront' COLS=20 ROWS=14></textarea>
    </td>

    <td>
    <center><p> Brød og boller: </p></center>
            <TEXTAREA NAME='brod' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p>    Fra fryseren: </p></center>
            <TEXTAREA NAME='fryseren' COLS=20 ROWS=14></textarea>
       
    </td>

</tr>
<tr>
    <td>
    <center><p> Fra køledisken: </p></center>
            <TEXTAREA NAME='koledisken' COLS=20 ROWS=14></textarea>
    </td>   

    <td>
    <center><p> Husholdningsmidler: </p></center>
        <TEXTAREA NAME='hus' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p> Andet: </p></center>
        <TEXTAREA NAME='andet' COLS=20 ROWS=14></textarea>
       
    </td>
</tr>
       
</table>
</form> </center>

<center> <input type='submit' name='submit' value='Klik her for at se din færdige indkøbsliste' onClick='window.open('print.php','popup','width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false' > </center>

";
// lukker forbindelsen
mysql_close($connect);
?>

SLUT

På forhånd tak :)
Avatar billede arne_v Ekspert
05. marts 2011 - 02:03 #1
Prøv med:

$sql = "INSERT INTO liste (gront, brod, fryseren, koledisken, hus, andet)
VALUES
('" . $_POST['gront'] . "','" . $_POST['brod'] . "','" . $_POST['fryseren'] . "','" . $_POST['koledisken'] . "','" . $_POST['hus'] . "','" . $_POST['andet'] . "')";
Avatar billede arne_v Ekspert
05. marts 2011 - 02:03 #2
Og ved lejlighed: kig lidt på SQL injection prevention
Avatar billede michael_stim Ekspert
05. marts 2011 - 08:47 #3
Du skal lave en:
if(isset($_POST['submit'])){//Er knappen 'submit' aktiveret
//Her lægger du koden der har med insert osv at gøre
}

Så er det en god idé at sætte ' om dine post variabler:

VALUES('". $_POST['gront'] ."','". $_POST['brod'] ."'...osv
Avatar billede michael_stim Ekspert
05. marts 2011 - 08:51 #4
Ups, nu er det gamle "cacheproblem" vist tilbage. Så ikke Arne's svar, før jeg havde klikket på 'opret' :(
Igår kunne jeg ikke komme videre før jeg havde oprettet christian_belgiens svar, som var under min preview??? Må være noget session id kaos.
Avatar billede creldemaster Nybegynder
05. marts 2011 - 11:31 #5
Tak for nogle af svarene jeg har ændret lidt omkring, og kommer stadig ind i problemer, det her har jeg ændret:

Således ser koden ud nu:

<?php
echo"
<center> <h2> Her kan du udfylde din helt egen indkøbsliste </h2> </center>
";
// her kommer jeg i kontakt med databasen
$connect = mysql_connect ("localhost", "root", "") or die("Error connecting to db");
// her vælger jeg vores database
mysql_select_db("indkob") or die ("Error selecting db");
if (isset($_POST['submit']))
{
$gront = $_POST ['gront'];
$brod = $_POST['brod'];
$fryseren = $_POST ['fryseren'];
$koledisken = $_POST ['koledisken'];
$hus = $_POST ['hus'];
$andet = $_POST ['andet'];
}
if($gront||$brod||$fryseren||$koledisken||$hus||$andet)
{
$sql = "INSERT INTO liste (gront, brod, fryseren, koledisken, hus, andet)
VALUES
('" . $_POST['gront'] . "','" . $_POST['brod'] . "','" . $_POST['fryseren'] . "','" . $_POST['koledisken'] . "','" . $_POST['hus'] . "','" . $_POST['andet'] . "')";

    echo "Please wait... <meta http-equiv='refresh' content='2'>    ";
    }
    else
    echo " Fyld venligst mindst et felt ud" ;
echo "
<form action='indkoebsliste.php' method='POST'>
<center> <table>
<tr>
    <td>
    <center><p> Frugt og Grønt: </p></center>
            <TEXTAREA NAME='gront' COLS=20 ROWS=14></textarea>
    </td>

    <td>
    <center><p> Brød og boller: </p></center>
            <TEXTAREA NAME='brod' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p>    Fra fryseren: </p></center>
            <TEXTAREA NAME='fryseren' COLS=20 ROWS=14></textarea>
       
    </td>

</tr>
<tr>
    <td>
    <center><p> Fra køledisken: </p></center>
            <TEXTAREA NAME='koledisken' COLS=20 ROWS=14></textarea>
    </td>   

    <td>
    <center><p> Husholdningsmidler: </p></center>
        <TEXTAREA NAME='hus' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p> Andet: </p></center>
        <TEXTAREA NAME='andet' COLS=20 ROWS=14></textarea>
       
    </td>
</tr>
       
</table>
</form> </center>

<center> <input type='submit' name='submit' value='Klik her for at se din færdige indkøbsliste' onClick='window.open('print.php','popup','width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false' > </center>

";
// lukker forbindelsen
mysql_close($connect);
?>


Her får jeg fejlmeddelsen, når jeg prøver at indsætte værdier i min form:
Undefined variable $gront, og det siger den til alle de andre variabler, at de ikke er defineret. Nogle ideer?
05. marts 2011 - 12:27 #6
creldemaster:  Det jeg noterer mig er at submit knappen "name='submit'" sidder udenfor formular med de tekstfelter brugerne udfylder.  Derfor vil POST['groent'] o.s.v. ikke indeholde vaerdier hvilket sandsynligvis er grunden til at $groent er undefined.

Jeg kan ikke umiddelbart gennemskue din onclick event, saa jeg lader den ligge og koncentrerer mig om hoved-problemet, at faa brugernes input sendt til databasen.  Proev at aendre formularen saaledes hvilket flytter submitknappen indenfor formularen:

echo "
<form action='indkoebsliste.php' method='POST'>
[de naeste 30 linier kode med tabel og textarea'erne uforandret]
<input type='submit' name='submit' value='submit indkoebsliste'>
</form></center>
";

..og michael_stim, et indlaeg jeg forsoegte at lave i gaar forsvandt paa mystisk vis.  Det maa vaere det som dukkede op hos dig.  (Da jeg ville lave det igen var der en anden der allerede havde lavet lignende kommentarer, saa jeg undlod.)
Avatar billede creldemaster Nybegynder
05. marts 2011 - 12:51 #7
Hej tak for svaret.. men det havde desværre ingen indvirkning.. Jeg satte din submit knap ind i stedet for,
men det onclick event, åbner et popopvindue med en browser med uden værktøjslinjer, scroll bar etc. det er der jeg smider dataen fra databasen ind til display. men det er ikke vigtigt i forhold til mit problem lige nu :)

Som sagt, satte jeg din submit ind, og jeg får samme fejlmeddelse på:

<?php
echo"
<center> <h2> Her kan du udfylde din helt egen indkøbsliste </h2> </center>
";
// her kommer jeg i kontakt med databasen
$connect = mysql_connect ("localhost", "root", "") or die("Error connecting to db");
// her vælger jeg vores database
mysql_select_db("indkob") or die ("Error selecting db");
if (isset($_POST['submit']))
{
$gront = $_POST ['gront'];
$brod = $_POST['brod'];
$fryseren = $_POST ['fryseren'];
$koledisken = $_POST ['koledisken'];
$hus = $_POST ['hus'];
$andet = $_POST ['andet'];
}
if($gront||$brod||$fryseren||$koledisken||$hus||$andet)
{
$sql = "INSERT INTO liste (gront, brod, fryseren, koledisken, hus, andet)
VALUES
('" . $_POST['gront'] . "','" . $_POST['brod'] . "','" . $_POST['fryseren'] . "','" . $_POST['koledisken'] . "','" . $_POST['hus'] . "','" . $_POST['andet'] . "')";

    echo "Please wait... <meta http-equiv='refresh' content='2'>    ";
    }
    else
    echo " Fyld venligst mindst et felt ud" ;
echo "
<form action='indkoebsliste.php' method='POST'>
<center> <table>
<tr>
    <td>
    <center><p> Frugt og Grønt: </p></center>
            <TEXTAREA NAME='gront' COLS=20 ROWS=14></textarea>
    </td>

    <td>
    <center><p> Brød og boller: </p></center>
            <TEXTAREA NAME='brod' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p>    Fra fryseren: </p></center>
            <TEXTAREA NAME='fryseren' COLS=20 ROWS=14></textarea>
       
    </td>

</tr>
<tr>
    <td>
    <center><p> Fra køledisken: </p></center>
            <TEXTAREA NAME='koledisken' COLS=20 ROWS=14></textarea>
    </td>   

    <td>
    <center><p> Husholdningsmidler: </p></center>
        <TEXTAREA NAME='hus' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p> Andet: </p></center>
        <TEXTAREA NAME='andet' COLS=20 ROWS=14></textarea>
       
    </td>
</tr>

</table>
<input type='submit' name='submit' value='submit indkoebsliste'>
</form> </center>


";
//disabled:
//<center> <input type='submit' name='submit' value='Klik her for at se din færdige indkøbsliste' onClick='window.open('print.php','popup','width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false' > </center>

// lukker forbindelsen
mysql_close($connect);
?>
05. marts 2011 - 13:18 #8
Jamen saa foreslaar jeg at du forenkler videre og midlertidigt skipper valideringen.  Nu er det vel saaledes at filen hedder indkoebsliste.php saa action i formularen kalder den rigtige side?  Du kunne ogsaa forenkle til sige:  <form action='' method='POST'>.  Og naar du udskriver $_POST[] vaerdierne til simple variable kan du bruge disse variable i mysql forespoergslen.  Det goer det lettere at overse.  Og udskrive vaerdier for test.  For eksempel noget i denne henretning:

if($_POST['submit'])
{
$gront = $_POST ['gront'];
$brod = $_POST['brod'];
$fryseren = $_POST ['fryseren'];
$koledisken = $_POST ['koledisken'];
$hus = $_POST ['hus'];
$andet = $_POST ['andet'];

echo "GRONT = $gront BROD = $brod FRYSEREN = $fryseren KOLEDISKEN = $koledisken HUS = $hus ANDET = $andet <br>";

mysql_query("INSERT INTO liste(gront, brod, fryseren, dkoeldisken, hus, andet) VALUES('$gront', '$brod', '$fryseren', '$koledisken', '$hus', '$andet')")or die(mysql_error());

og proev foerst at fylde noget i alle tekstfelterne i formularen.  Hvis nogle vaerdier saa stadig er ukendte saa skulle det blive klart precis hvor det gaar galt hvilket vil hjaelpe til at debugge.  Naar du saa kan poste til databasen kan du gaa tilbage og indsaette validering og onclick event o.s.v.

Fortael hvordan det gaar.
05. marts 2011 - 13:19 #9
Jeg glemte at afslutte den kroellede parantes - der skal naturligvis } efter mysql forespoergslen.
Avatar billede creldemaster Nybegynder
05. marts 2011 - 14:47 #10
Så har jeg prøvet, den printer svarene fint, men sender ikke til databasen, den siger dog at 'submit' ikke er defineret.. Det kan jeg ikke lige se meningen med.

Her er ændringen:

<?php
echo"
<center> <h2> Her kan du udfylde din helt egen indkøbsliste </h2> </center>
";
// her kommer jeg i kontakt med databasen
$connect = mysql_connect ("localhost", "root", "") or die("Error connecting to db");
// her vælger jeg vores database
mysql_select_db("indkob") or die ("Error selecting db");
//if (isset($_POST['submit']))
//{
//$gront = $_POST ['gront'];
//$brod = $_POST['brod'];
//$fryseren = $_POST ['fryseren'];
//$koledisken = $_POST ['koledisken'];
//$hus = $_POST ['hus'];
//$andet = $_POST ['andet'];
//}
//if($gront||$brod||$fryseren||$koledisken||$hus||$andet)
//{
//$sql = "INSERT INTO liste (gront, brod, fryseren, koledisken, hus, andet)
//VALUES
//('" . $_POST['gront'] . "','" . $_POST['brod'] . "','" . $_POST['fryseren'] . "','" . $_POST['koledisken'] . "','" . $_POST['hus'] . "','" . $_POST['andet'] . "')";
//
    //echo "Please wait... <meta http-equiv='refresh' content='2'>    ";
    //}
    //else
    //echo " Fyld venligst mindst et felt ud" ;
    if($_POST['submit'])
{
$gront = $_POST ['gront'];
$brod = $_POST['brod'];
$fryseren = $_POST ['fryseren'];
$koledisken = $_POST ['koledisken'];
$hus = $_POST ['hus'];
$andet = $_POST ['andet'];

echo "gront = $gront brod = $brod fryseren = $fryseren koledisken = $koledisken hus = $hus andet = $andet <br>";

mysql_query("INSERT INTO liste(gront, brod, fryseren, koledisken, hus, andet) VALUES('$gront', '$brod', '$fryseren', '$koledisken', '$hus', '$andet')")or die(mysql_error());
   
}   
    echo "
<form action='indkoebsliste.php' method='POST'>
<center> <table>
<tr>
    <td>
    <center><p> Frugt og Grønt: </p></center>
            <TEXTAREA NAME='gront' COLS=20 ROWS=14></textarea>
    </td>

    <td>
    <center><p> Brød og boller: </p></center>
            <TEXTAREA NAME='brod' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p>    Fra fryseren: </p></center>
            <TEXTAREA NAME='fryseren' COLS=20 ROWS=14></textarea>
       
    </td>

</tr>
<tr>
    <td>
    <center><p> Fra køledisken: </p></center>
            <TEXTAREA NAME='koledisken' COLS=20 ROWS=14></textarea>
    </td>   

    <td>
    <center><p> Husholdningsmidler: </p></center>
        <TEXTAREA NAME='hus' COLS=20 ROWS=14></textarea>

    </td>
    <td>
    <center><p> Andet: </p></center>
        <TEXTAREA NAME='andet' COLS=20 ROWS=14></textarea>
       
    </td>
</tr>

</table>
<input type='submit' name='submit' value='submit indkoebsliste'>
</form> </center>


";
   
   

   
//disabled:
//<center> <input type='submit' name='submit' value='Klik her for at se din færdige indkøbsliste' onClick='window.open('print.php','popup','width=500,height=500,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false' > </center>

// lukker forbindelsen
mysql_close($connect);
?>


alt det i // (commentary) er bare ting jeg disabled, til hvis jeg får brug for det senere. og ja formaction kalder den rigtige side.
Avatar billede creldemaster Nybegynder
05. marts 2011 - 14:59 #11
hej igen, jeg fik det til at virke ved at sætte if løkken til en if isset.
Mange tak for hjælpen, det virker endelig :D
Post et svar så jeg kan afgive point :)
05. marts 2011 - 15:03 #12
Nu kommer jeg i tvivl - du siger "den printer svarene fint" - mener du at den printer
gront=blomkaal brod=rugbrod o.s.v. (hvis $gront er 'blomkaal' og $brod er 'rugbord').  Jamen det sidder i if($_POST['submit']{} og skulle kun printe hvis der modtages en $_POST vaerdi 'submit'.  Hvornaar faar du beskedden at 'submit' ikke er defineret og hvordan lyder beskedden?  Kunne du proeve at koere koden igen og saa vise det noejagtige output her?
Avatar billede creldemaster Nybegynder
06. marts 2011 - 22:56 #13
Er ikke ligefrem en haj, i dette fag :) Men det jeg kan sige er at den virker med en if Isset og ikke med en if, det var det eneste jge skulle ændre i koden :)
07. marts 2011 - 06:12 #14
Jeg saa ikke dit indlaeg #11 foer jeg fik sendt mit indlaeg #12.  Svar fra mig.
09. marts 2011 - 07:02 #15
creldemaster,  forventer du flere indlaeg paa dette spoergsmaal?  Ellers afslut det venligst, enten ved at acceptere mit svar (som du bad om) eller, hvis du har aendret mening, ved selv at oprette et svar og acceptere det.  Men under alle omstaendigheder faa det afsluttet.  Lad mig (og andre) ikke blive haengende i et aabent spoergsmaal.  Please.
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
Kurser inden for grundlæggende programmering

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