Avatar billede kikkoman Nybegynder
12. november 2003 - 17:40 Der er 13 kommentarer og
1 løsning

Hjælp til 'krølle på halen' på fungerende form til mySQL

Hejsa

Jeg kunne godt tænke mig lidt hjælp til at få en 'krølle på halen' på dette script. Jeg skal har sendt folk der submitter deres info videre til en webside tak.php
Thats all! Hvad og hvor vil I vælge at skrive i nedenstående script for at løse det problem?

Med venlig hilsen
Kikkoman

<?php
if ($_POST[skriv]) {
if ($_POST[fornavn] == '') {
$status="Skriv venligst dit fornavn";
}
elseif ($_POST[efternavn] == ''){
$status="Skriv venligst dit efternavn";
}
elseif ($_POST[email] == '') {
$status="Skriv venligst din email adresse";
}
else {
$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database");
mysql_query("insert into tabel(fornavn, efternavn, email) values
('$_POST[fornavn]','$_POST[efternavn]','$_POST[email]')");
echo"Du er blevet tilmeldt";
}
}
echo $status; ?>


<html xmlns="http://www.w3.org/1999/xhtml">

<head>
</head>

<body>

<form action="<? echo"$PHP_SELF"; ?>" method="post" name="tilmeldform" id="tilmeldform">
<p>Fornavn:<br />
<input type="text" name="fornavn" value="<? echo $fornavn; ?>"></p>
<p>Efternavn:<br />
<input type="text" name="efternavn" value="<? echo $efternavn; ?>"></p>
<p>Email:<br />
<input type="text" name="email" value="<? echo $email; ?>"></p><br />

<INPUT TYPE="SUBMIT" name="skriv" value="Tilmeld">
</form>
Avatar billede spunk13 Nybegynder
12. november 2003 - 17:42 #1
header("location: tak.php");
Avatar billede kikkoman Nybegynder
12. november 2003 - 17:52 #2
Hej Spunk
Tak for >>>>>>ekstrem hurtig behandling - men kunne du ikke lige gi' mig et clue om hvor præcist i scriptet, du har tænkt dig at sætte det ind? Jeg får en fejlmeddelse på at jeg allerede har sendt header info :
"Warning: Cannot modify header information - headers already sent by (output started at /var/www/hotels/.dk/glocalbeer/html/nyhedsbrev/index.php:2) in /var/www/hotels/.dk/glocalbeer/html/nyhedsbrev/index.php on line 21"

Tak på forhånd!
Kikkoman
Avatar billede spunk13 Nybegynder
12. november 2003 - 19:35 #3
For at optimere det lidt ville jeg nok lave koden sådan her:

<?php

if (isset($_POST['skriv'])) {


if (isset($_POST['fornavn'])) {
$fornavn = $_POST['fornavn'];
}
if (isset($_POST['efternavn'])){
$efternavn = $_POST['efternavn'];
}
if (isset($_POST['email'])) {
$email = $_POST['email'];
}

if ($fornavn == "") {
$status[] = "Skriv venligst dit fornavn";
} if ($efternavn == "") {
$status[] = "Skriv venligst dit efternavn";
} if ($email == "") {
$status[] = "Skriv venligst din email adresse";
}


if (count($status) > 0) {

for ($i = 0; count($status) >= $i; $i++) {
echo $status[$i]."<br>";
}

} elseif (count($status) == 0) {
header("location: ".$_SERVER['PHP_SELF']."?fornavn=$fornavn");
}


}

if (isset($_GET['fornavn'])) {
echo "Tak ".$_GET['fornavn'].", du er nu tilmeldt!";
}

?>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
</head>

<body>

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post" name="tilmeldform" id="tilmeldform">
<p>Fornavn:<br />
<input type="text" name="fornavn" value="<? echo $fornavn; ?>"></p>
<p>Efternavn:<br />
<input type="text" name="efternavn" value="<? echo $efternavn; ?>"></p>
<p>Email:<br />
<input type="text" name="email" value="<? echo $email; ?>"></p><br />

<INPUT TYPE="SUBMIT" name="skriv" value="Tilmeld"
<?php
if (isset($_GET['fornavn'])) {
echo "disabled";
} ?>
>
</form>
</body>
</html>
Avatar billede kikkoman Nybegynder
12. november 2003 - 19:50 #4
Smukt! Du fik lige skrevet lidt lækkert navne genkendelse i tak beskeden... nice ;) Den vil jeg da klart anvende... fedt... :)

Den brokker sig dog stadig over følgende linier:

} elseif (count($status) == 0) {
header("location: ".$_SERVER['PHP_SELF']."?fornavn=$fornavn");
}

Er der noget med, at en header skal pakkes ind, når den ikke er aller øverst?
Eventuelt med
<? ob_start(); ?>
//KODE
<? ob_end_flush(); ?>

Kender du noget til det?
Avatar billede spunk13 Nybegynder
12. november 2003 - 20:12 #5
} elseif (count($status) == 0) {
$script = $_SERVER['PHP_SELF']."?fornavn=".$fornavn;
header("location: $script");
}
Avatar billede spunk13 Nybegynder
12. november 2003 - 20:28 #6
Hovsa, jeg fjernede forresten dit MySQL kald, du kan smække det ind her:

...
if (isset($_GET['fornavn'])) {
$conn = mysql_connect("localhost", "brugernavn", "password");
mysql_select_db("database");
mysql_query("insert into tabel(fornavn, efternavn, email) values
('$fornavn','$efternavn','$email')");

echo "Tak ".$_GET['fornavn'].", du er nu tilmeldt!";
}
...

og så ville jeg også lige anbefale at du lukker forbindelse med mysql_close($conn);

Ang. headers, så er det det første man finder i en fil, hvis man echo'er noget før headers så vil den jo ikke have en chance for at kunne forstå hvordan den tekst skal tolkes. Sådan vil jeg i hvert fald tro det er :)

Ville også lige smide lidt info om de rettelser jeg har lavet i dit originale script, f.eks. så bruger du $PHP_SELF - som kun vil virke med register_globals til on, hvilket ikke er standard mere. Sagt på en anden måde - det vil højest sandsynligt ikke virke hvis du skulle få brug for at overføre det til en anden server.
Til at starte med bruger du .. if ($_POST[skriv]) { .. Jeg skulle mene at den korrekte metode er .. if (isset($_POST[skriv])) { .. om det gør nogen forskel tør jeg ikke sige :)
En sidste ting. Sådan som du smider data i $status, vil opføre sig sådan at status bliver overskrevet, hvis brugeren ikke har udfyldt 2 af felterne. "Glemmer" han fornavn og efternavn, vil der kun stå at han skal skrive sit efternavn.

Hvis der er noget af koden du ikke forstår, så skriv endelig. Jeg hader nemlig selv at sidde med kode man ikke kan gennemskue, for så er det ikke til at rette i :)
Avatar billede kikkoman Nybegynder
12. november 2003 - 20:45 #7
Ja, det er vist mere min egen skyld at jeg glemte den med MySQL opkaldet... pinligt.
Anyway... Du skal ha' stor ros for dit arbejde. Jeg må indrømme at jeg lige skal holdt tungen lige i munden for at følge med - men jeg vil gøre et forsøg og så vil jeg eventuelt lige sende dig en mail, hvis jeg fortsat har problemer...

Jeg takker :)
Avatar billede kikkoman Nybegynder
12. november 2003 - 21:15 #8
Den driller endnu... det er stadig den med header. Den giver en fejlmedelse i linie 31, hvilket er følgende:

header("location: $script");

Du kan evt. selv tjekke på følgende link...

http://www.glocalbeer.dk/nyhedsbrev/index_test_2.php

Her følger den komplette kode med dine rettelser + mit makeup:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
if (isset($_POST[skriv])) {

if (isset($_POST['fornavn'])) {
$fornavn = $_POST['fornavn'];
}
if (isset($_POST['efternavn'])){
$efternavn = $_POST['efternavn'];
}
if (isset($_POST['email'])) {
$email = $_POST['email'];
}

if ($fornavn == "") {
$status[] = "Skriv venligst dit fornavn";
} if ($efternavn == "") {
$status[] = "Skriv venligst dit efternavn";
} if ($email == "") {
$status[] = "Skriv venligst din email adresse";
}

if (count($status) > 0) {

for ($i = 0; count($status) >= $i; $i++) {
echo $status[$i]."<br>";
}

} elseif (count($status) == 0) {
$script = $_SERVER['PHP_SELF']."?fornavn=".$fornavn;
header("location: $script");
}



}

if (isset($_GET['fornavn'])) {
$conn = mysql_connect("XXXXX", "XXXX", "XXXX");
mysql_select_db("XXXXX");
mysql_query("insert into XXXXX(fornavn, efternavn, email) values
('$fornavn','$efternavn','$email')");

echo "Tak ".$_GET['fornavn'].", du er nu tilmeldt!";
}


?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>GlocalBeer - Tilmeld dig vores nyhedsbrev</title>
<style type="text/css" media="screen">
</style>
<link href="../glocalbeer.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="header">
<div id="logo"><a href="../index.htm"><img src="../images/pic_logo_148_148.jpg" width="148" height="148" border="0" /></a></div>

<div id="title"><img src="../images/pic_nyhedsbrev_400_149.jpg" width="400" height="149" /></div>
<div id="topcorner"><img src="../images/pic_topcorner_149_149.jpg" width="149" height="149" /></div>
</div>

<div id="menubar">
    <div class="menubutton" id="artikler"><a href="../artikler/index.php">ARTIKLER</a></div>
    <div class="menubutton" id="encyclopaedi"><a href="../encyklopaedi/index.htm">ENCYKLOPÆDI</a></div>
    <div class="menubutton" id="oelogmad"><a href="../oelogmad/index.htm">ØL & MAD</a></div>
    <div class="menubutton" id="oelkatalog"><a href="../oelkatalog/index.htm">ØLKATALOG</a></div>
    <div class="menubutton" id="nyhedsbrev"><a href="index.htm">NYHEDSBREV</a></div>
    <div class="menubutton" id="omglocalbeer"><a href="../glocalbeer/index.htm">OM GLOCALBEER</a></div>
</div>

<div id="container">
<div class="artikelcontent">
  <h2 class="article">Nyhedsbrev</h2>
  <form method="post" action="<? echo"$PHP_SELF"; ?>">
Fornavn:<br>
<input type="text" name="fornavn" value="<? echo $fornavn; ?>"><br>
Efternavn:<br>
<input type="text" name="efternavn" value="<? echo $efternavn; ?>"><br>
Email:<br>
<input type="text" name="email" value="<? echo $email; ?>"><br>
<INPUT TYPE="SUBMIT" name="skriv" value="Tilmeld">
</form>
</div>

<div id="rightbar">
<h2 class="sectionright">GlocalBeer</h2>
<p>GlocalBeer udgiver et lille  nyhedsbrev der indeholder referencer til nye artikler, tips og faktuelle oplysninger p&aring; vores website. </p>
<p>Det er reklamefrit og vi lover  ikke at videregive vores oplysninger om dig til anden part.</p>
<p>Skulle du - af uforst&aring;elige &aring;rsager - ikke l&aelig;ngere &oslash;nske at modtage vores nyhedsbrev, skal du v&aelig;re velkommen til at sende en framelding per <a href="mailto:frameld@glocalbeer.dk">mail</a></p>
</div>
</div>
<div id="footer">
<div id="credits">
<p>Webmaster<br><a href="mailto:bjarke@glocalbeer.dk">Bjarke Bundgaard</a><br />
Valideret <a href="http://validator.w3.org/check/referer">XHTML</a> og <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a></p>
</div>
<div id="space"> </div>
<div id="bottomcorner">GlocalBeer Copyright 2003</div>
</div>
</body>
</html>
Avatar billede spunk13 Nybegynder
12. november 2003 - 21:36 #9
Flyt

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

ned efter scriptet, dvs. her -
if (isset($_GET['fornavn'])) {
echo "Tak ".$_GET['fornavn'].", du er nu tilmeldt!";
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
</head>

:)

Som du kan se, virker det fint for mig:
http://80.197.68.192/test2.php
Avatar billede kikkoman Nybegynder
12. november 2003 - 22:15 #10
Cool - Ja, det kan jeg se og efter at jeg har rettet min kode efter dine anbefalinger, så virker det også hos mig!

Men... for der er et men. Barnet er røget ud med badevandet. Tilsyneladende har der gemt sig en anden lille bug. Dataen bliver ikke overført til MySQL. Det virker stadig hos mit gamle simple script, men ikke med dit nye toptunede ;)
Hvor kan den møgbille ha' gemt sig?

PS. Du fortjener sgu' nogle point for al det her ekstrasnak. Er der en måde jeg kan give dig det...?
Avatar billede spunk13 Nybegynder
12. november 2003 - 23:11 #11
Du smækker bare noget or die på, sådan her:

$conn = mysql_connect("XXXXX", "XXXX", "XXXX") or die(mysql_error());
mysql_select_db("XXXXX") or die(mysql_error());
mysql_query("insert into XXXXX(fornavn, efternavn, email) values
('$fornavn','$efternavn','$email')") or die(mysql_error());
mysql_close($conn) or die(mysql_error());

^ den sidste linje burde også have været med i mine andre forslag :)

Det vil så resultere i at den kommer med en fejlmeddelelse.

Ang. point, så behøver jeg ikke ekstra, jeg er bare glad for at kunne hjælpe :)
Avatar billede kikkoman Nybegynder
13. november 2003 - 02:39 #12
Det er gjort. Tilsyneladende er det ikke connect der er problemet. Tjek selv hvad der sker på følgende:
http://www.glocalbeer.dk/nyhedsbrev/index_test_2.php
Den fejlmeddelse kender jeg ikke.... Er det et prob i MySQL'en?
Avatar billede spunk13 Nybegynder
13. november 2003 - 14:51 #13
Undskyld, min fejl, det er kun POST variablen 'fornavn' det bliver overført via GET, resten skal også med :)

Dette skulle virke:

<?php

if (isset($_POST['skriv'])) {

if (isset($_POST['fornavn'])) {
$fornavn = $_POST['fornavn'];
}
if (isset($_POST['efternavn'])){
$efternavn = $_POST['efternavn'];
}
if (isset($_POST['email'])) {
$email = $_POST['email'];
}

if (isset($_GET['fornavn'])) {
$fornavn = $_GET['fornavn'];
}
if (isset($_GET['efternavn'])){
$efternavn = $_GET['efternavn'];
}
if (isset($_GET['email'])) {
$email = $_GET['email'];
}

if ($fornavn == "") {
$status[] = "Skriv venligst dit fornavn";
} if ($efternavn == "") {
$status[] = "Skriv venligst dit efternavn";
} if ($email == "") {
$status[] = "Skriv venligst din email adresse";
}

if (count($status) > 0) {

for ($i = 0; count($status) >= $i; $i++) {
echo $status[$i]."<br>";
}

} elseif (count($status) == 0) {
$script = $_SERVER['PHP_SELF']."?fornavn=$fornavn&efternavn=$efternavn&email=$email";
header("location: $script");
}



}

if (isset($_GET['fornavn'])) {
$conn = mysql_connect("XXXXX", "XXXX", "XXXX");
mysql_select_db("XXXXX");
mysql_query("insert into XXXXX(fornavn, efternavn, email) values
('$fornavn','$efternavn','$email')");

echo "Tak ".$_GET['fornavn'].", du er nu tilmeldt!";
}


?>
Avatar billede kikkoman Nybegynder
15. november 2003 - 13:30 #14
Æv æv... Jeg undskyld jeg ikke har svaret før. Men tiden er en flygtig størrelse. Anyway.. jeg har stadig problemer med scriptet. Samme fejlmeddelse.
Her er hele koden ink. markup og tekst. Kan dit falkeblik se problemet?

<?php

if (isset($_POST['skriv'])) {

if (isset($_POST['fornavn'])) {
$fornavn = $_POST['fornavn'];
}
if (isset($_POST['efternavn'])){
$efternavn = $_POST['efternavn'];
}
if (isset($_POST['email'])) {
$email = $_POST['email'];
}

if (isset($_GET['fornavn'])) {
$fornavn = $_GET['fornavn'];
}
if (isset($_GET['efternavn'])){
$efternavn = $_GET['efternavn'];
}
if (isset($_GET['email'])) {
$email = $_GET['email'];
}

if ($fornavn == "") {
$status[] = "Skriv venligst dit fornavn";
} if ($efternavn == "") {
$status[] = "Skriv venligst dit efternavn";
} if ($email == "") {
$status[] = "Skriv venligst din email adresse";
}

if (count($status) > 0) {

for ($i = 0; count($status) >= $i; $i++) {
echo $status[$i]."<br>";
}

} elseif (count($status) == 0) {
$script = $_SERVER['PHP_SELF']."?fornavn=$fornavn&efternavn=$efternavn&email=$email";
header("location: $script");
}



}

if (isset($_GET['fornavn'])) {
$conn = mysql_connect("xxxxxx", "xxxxxxx", "xxxxxxx") or die(mysql_error());
mysql_select_db("xxxxxxx") or die(mysql_error());
mysql_query("insert into tilmeldte(fornavn, efternavn, email) values
('$fornavn','$efternavn','$email')") or die(mysql_error());
mysql_close($conn) or die(mysql_error());

echo "Tak ".$_GET['fornavn'].", du er nu tilmeldt!";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>GlocalBeer - Tilmeld dig vores nyhedsbrev</title>
<style type="text/css" media="screen">
</style>
<link href="../glocalbeer.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="header">
<div id="logo"><a href="../index.htm"><img src="../images/pic_logo_148_148.jpg" width="148" height="148" border="0" /></a></div>

<div id="title"><img src="../images/pic_nyhedsbrev_400_149.jpg" width="400" height="149" /></div>
<div id="topcorner"><img src="../images/pic_topcorner_149_149.jpg" width="149" height="149" /></div>
</div>
<div id="menubar">
    <div class="menubutton" id="artikler"><a href="../artikler/index.php">ARTIKLER</a></div>
    <div class="menubutton" id="encyclopaedi"><a href="../encyklopaedi/index.htm">ENCYKLOPÆDI</a></div>
    <div class="menubutton" id="oelogmad"><a href="../oelogmad/index.htm">ØL & MAD</a></div>
    <div class="menubutton" id="oelkatalog"><a href="../oelkatalog/index.htm">ØLKATALOG</a></div>
    <div class="menubutton" id="nyhedsbrev"><a href="index.php">NYHEDSBREV</a></div>
    <div class="menubutton" id="omglocalbeer"><a href="../glocalbeer/index.htm">OM GLOCALBEER</a></div>
</div>
<div id="container">
<div class="artikelcontent">
  <h2 class="article">Nyhedsbrev</h2>
  <form method="post" action="<? echo"$PHP_SELF"; ?>">
Fornavn:<br>
<input type="text" name="fornavn" value="<? echo $fornavn; ?>"><br>
Efternavn:<br>
<input type="text" name="efternavn" value="<? echo $efternavn; ?>"><br>
Email:<br>
<input type="text" name="email" value="<? echo $email; ?>"><br>
<INPUT TYPE="SUBMIT" name="skriv" value="Tilmeld">
</form>
</div>
<div id="rightbar">
<h2 class="sectionright">GlocalBeer</h2>
<p>GlocalBeer udgiver et lille  nyhedsbrev der indeholder referencer til nye artikler, tips og faktuelle oplysninger p&aring; vores website. </p>
<p>Det er reklamefrit og vi lover  ikke at videregive vores oplysninger om dig til anden part.</p>
<p>Skulle du - af uforst&aring;elige &aring;rsager - ikke l&aelig;ngere &oslash;nske at modtage vores nyhedsbrev, skal du v&aelig;re velkommen til at sende en framelding per <a href="mailto:frameld@glocalbeer.dk">mail</a></p>
</div>
</div>
<div id="footer">
<div id="credits">
<p>Webmaster<br><a href="mailto:bjarke@glocalbeer.dk">Bjarke Bundgaard</a><br />
Valideret <a href="http://validator.w3.org/check/referer">XHTML</a> og <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a></p>
</div>
<div id="space"> </div>
<div id="bottomcorner">GlocalBeer Copyright 2003</div>
</div>
</body>
</html>
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