Avatar billede ratatosk Nybegynder
15. juli 2003 - 13:20 Der er 12 kommentarer og
1 løsning

Formular og mysql

Hej,

Jeg har lavet et script  med et formularfelt hvor brugeren skal indtaste navn, email og nogen tekst, nederst er der muligt at vælge "send" eller "om igen". De indtastede data gemmes så i en mysql database.

Hvis brugeren har indtastet navn og valgt send, vises på skærmen "Hey $navn din tekst fil er nu registreret"

Ovenstående fungerer fint, men nu vil jeg gerne modefisere scriptet med følgende

1. Der skal checkes om brugeren har indtastet "navn" og "email" om ikke og brugeren vælger send, skal der vises på skærmen f.eks. "du har ikke indtastet navn eller du har ikke indtastet email"

2. Når man står i navn eller email feltet og brugeren trykker på enter i stedet for tab sendes dataerne til databasen, kan man gøre det således at brugeren skal med musepilen over send feltet således at dataerne ikke bliver send kun fordi brugeren kommer til at trykke på enter før han er færdig med at indtaste data

3. Nu er det således at når brugeren vælger send, vises på samme skærmbillede "Hey $navn din tekst fil er nu registreret" ($navn er så det navn brugeren har indtastet), er det muligt at der i stedet kommer et popup vindue hvori det bl.a. kunnu stå "Hey $navn din tekst fil er nu registreret".

Felterne i databasen er følgende
id int(11)
navn tinytext
email tinytext
tekst text

php koden er følgende (i koden er database, brugernavn og psw udskiftet med xxxx)

<?php
if($navn){
echo "<B><h2>Hej $navn din tekst fil er nu registreret!</H2></B>";


$conn = mysql_connect("xxxx", "xxxx", "xxxx") or die("Can't connect to server.");

mysql_select_db("xxxx", $conn);


mysql_query("INSERT INTO xxxx (navn, email, tekst) VALUES
('$navn', '$email', '$tekst')");


} else {
?>

<form method=post action="<?=$PHP_SELF;?>">
<table width=580 style=" BORDER-TOP: black 1px solid; BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-RIGHT: black 1px solid;>

  <tr>
      <td width=" height="10" bgcolor="#C0C0C0">
  <td width="10">&nbsp;
      <td width="180" height="10" bgcolor="#C0C0C0" valign="top">&nbsp;</td>
      <td width="390" height="10" bgcolor="#C0C0C0">&nbsp;</td>
  <tr>
      <td width="10" bgcolor="#C0C0C0">&nbsp;</td>
      <td width="180" bgcolor="#C0C0C0" valign="top">Navn</td>
      <td width="390" bgcolor="#C0C0C0"><INPUT TYPE=TEXT NAME=navn size="38"></td>
  </tr>
  <tr>
      <td width="10" bgcolor="#C0C0C0">&nbsp;</td>
      <td width="180" bgcolor="#C0C0C0" valign="top">email</td>
      <td width="390" bgcolor="#C0C0C0"><INPUT TYPE=TEXT NAME=email size="38"></td>
  </tr>
  <tr>
      <td width="10" bgcolor="#C0C0C0">&nbsp;</td>
      <td width="180" bgcolor="#C0C0C0" valign="top">&nbsp;</td>
      <td width="390" bgcolor="#C0C0C0">&nbsp;</td>
  </tr>
  <tr>
      <td width="10" bgcolor="#C0C0C0">&nbsp;</td>
      <td width="180" bgcolor="#C0C0C0" valign="top">Tekst</td>
      <td width="390" bgcolor="#C0C0C0"><TEXTAREA NAME=tekst rows="5" cols="30"></TEXTAREA></td>
  </tr>
  <tr>
      <td width="10" bgcolor="#C0C0C0">&nbsp;</td>
      <td width="180" bgcolor="#C0C0C0" valign="top">&nbsp;</td>
      <td width="390" bgcolor="#C0C0C0">&nbsp;</td>
  </tr>
    <tr>
      <td width="10">&nbsp;</td>
   

      <td width="180" valign="top">&nbsp; &nbsp;&nbsp;&nbsp;
      </td>
      <td width="390"><input type="submit" name="s1" value="Send">&nbsp;&nbsp; <input type="reset" value="Om igen" name "s2>
      </td>
    </tr>
    <tr>
      <td width="10" height="10">&nbsp;</td>
      <td width="180" height="10" valign="top">&nbsp;</td>
      <td width="390" height="10">&nbsp;</td>
    </tr>
  </table>
</form>
<P></P>
<?

}

?>


Håber ovenstående forklarer problemet, da jeg ikke er spesielt god til hverken php eller mysql så vil uddybende spørgsmål nok ikki kunne besvares godt
Avatar billede bearhugx Nybegynder
15. juli 2003 - 13:26 #1
de to første punkter ville du få mere hjælp med over i f.eks. JavaScript / DHTML kategorien
Avatar billede sukos Juniormester
15. juli 2003 - 13:28 #2
Det med enter, skal laves i javascript, hvis muligt.

Jeg ville putte checket for om formen er submittet i toppen, og derefter lave en header, så en refresh af siden ikke smider det ind igen.
Og så ville jeg bruge en session til at lave en alert om at data er blevet behandlet.

Prøver lige at bakse lidt sammen...
Avatar billede zkn Nybegynder
15. juli 2003 - 13:37 #3
lav noget i retingen af dette for alle felterne
<SCRIPT>
function valider() {
tjek=minform.Name.value;
if (tjek=='') {
alert('Navn mangler.');
event.returnValue=false;
}
}
</SCRIPT>

og i din form
<form name="minform" onsubmit="valider();">
Avatar billede ratatosk Nybegynder
15. juli 2003 - 13:48 #4
Takker, men det må jeg tygge lidt på før jeg kan sige om det virker
Avatar billede sukos Juniormester
15. juli 2003 - 14:06 #5
Nå, det tog lidt tid, der var lige noget som skulle laves, men ellers, kan det her bruges?

<?php
session_start();

if(isset($_POST["input"])){
    if(trim($_POST["navn"]) == "") {
$_SESSION["navnfejl"] = "Du har ikke indtastet noget navn!<br>\n";
$error = 1;
}

$valid_mail="^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@([0-9a-z](-?[0-9a-z])*\\.)+[a-z]{2,4}$";

    if(!eregi($valid_mail, $_POST["email"])) {
    $_SESSION["emailfejl"] = "Valgte email-adresse duer ikke<br>\n";
$error = 1;
}

    if(trim($_POST["tekst"]) == "") {
$_SESSION["tekstfejl"] = "Du har ikke indtastet noget tekst!<br>\n";
$error = 1;
}

    if(!isset($error)) {
/*
$conn = mysql_connect("xxxx", "xxxx", "xxxx") or die("Can't connect to server.");

mysql_select_db("xxxx", $conn);


mysql_query("INSERT INTO xxxx (`navn`, `email`, `tekst`) VALUES
('". $_POST["navn"] ."', '". $_POST["email"] ."', '". $_POST["tekst"] ."')");
*/
$_SESSION["ok"] = "Hej ". $_POST["navn"] .". Din tekstfil er nu registreret.";

}

header("Location:". $_SERVER["PHP_SELF"] ."");
exit;
}
?>
<html><head><title>Forminput</title></head>
<body<?php
if(isset($_SESSION["ok"])) {
echo" onLoad=\"alert('". $_SESSION["ok"] ."');\"";
unset($_SESSION["ok"]);
}
?>>

<form method=post action="<?php echo $_SERVER["PHP_SELF"]; ?>">

<input type="hidden" name="input" value="input">

<table width=580 style=" BORDER-TOP: black 1px solid; BORDER-BOTTOM: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-RIGHT: black 1px solid;>

<tr>
<td width=" height="10" bgcolor="#C0C0C0">
<td width="10">&nbsp;
<td width="180" height="10" bgcolor="#C0C0C0" valign="top">&nbsp;</td>
<td width="390" height="10" bgcolor="#C0C0C0">&nbsp;</td>
<tr>
<td width="10" bgcolor="#C0C0C0">&nbsp;</td>
<td width="180" bgcolor="#C0C0C0" valign="top">Navn</td>
<td width="390" bgcolor="#C0C0C0"><INPUT TYPE=TEXT NAME=navn size="38"></td>
</tr>
<tr>
<td width="10" bgcolor="#C0C0C0">&nbsp;</td>
<td width="180" bgcolor="#C0C0C0" valign="top">email</td>
<td width="390" bgcolor="#C0C0C0"><INPUT TYPE=TEXT NAME=email size="38"></td>
</tr>
<tr>
<td width="10" bgcolor="#C0C0C0">&nbsp;</td>
<td width="180" bgcolor="#C0C0C0" valign="top">&nbsp;</td>
<td width="390" bgcolor="#C0C0C0">&nbsp;</td>
</tr>
<tr>
<td width="10" bgcolor="#C0C0C0">&nbsp;</td>
<td width="180" bgcolor="#C0C0C0" valign="top">Tekst</td>
<td width="390" bgcolor="#C0C0C0"><TEXTAREA NAME=tekst rows="5" cols="30"></TEXTAREA></td>
</tr>
<tr>
<td width="10" bgcolor="#C0C0C0">&nbsp;</td>
<td width="180" bgcolor="#C0C0C0" valign="top">&nbsp;</td>
<td width="390" bgcolor="#C0C0C0">&nbsp;</td>
</tr>
<tr>
<td width="10">&nbsp;</td>


<td width="180" valign="top">&nbsp; &nbsp;&nbsp;&nbsp;
</td>
<td width="390"><input type="submit" name="s1" value="Send">&nbsp;&nbsp; <input type="reset" value="Om igen" name "s2>
</td>
</tr>
<tr>
<td width="10" height="10">&nbsp;</td>
<td width="180" height="10" valign="top">&nbsp;</td>
<td width="390" height="10">&nbsp;</td>
</tr>
</table>
</form>

<?php
if(isset($_SESSION["navnfejl"])) {
echo $_SESSION["navnfejl"];
unset($_SESSION["navnfejl"]);
}
if(isset($_SESSION["emailfejl"])) {
echo $_SESSION["emailfejl"];
unset($_SESSION["emailfejl"]);
}
if(isset($_SESSION["tekstfejl"])) {
echo $_SESSION["tekstfejl"];
unset($_SESSION["tekstfejl"]);
}
?>

</body></html>

Bruger du formen som en include?
Eller er det selve filen derloades?
Avatar billede sukos Juniormester
15. juli 2003 - 14:07 #6
hehe :O)
Avatar billede sukos Juniormester
15. juli 2003 - 14:07 #7
Ville nu aldrig selv bruge javascript til validering :O)
Avatar billede sukos Juniormester
15. juli 2003 - 14:08 #8
Og det med DB er udkommenteret i ovenstående, for testens skyld
Avatar billede ratatosk Nybegynder
15. juli 2003 - 14:14 #9
Hey Sukos jeg tester lige, tager et nogle minutter, der er selve filen der loades, i filen bruger jeg så include i toppen og bunden :-)
Avatar billede ratatosk Nybegynder
15. juli 2003 - 14:43 #10
Hey Sukos, når jeg bruger din kode alene får jeg får ingen medelelse når jeg ikke indtaster navn, email eller tekst om at jeg ikke har indtastet noget, om jeg udfylder felterne og vælger send, så kommer der ingen meddelelse om at "din tekstfil er nu registreret" dataerne kommer heller ikke i databasen. Jeg har selvfølgeligt rettet databasenavnet, tabelnavn, user og psw til.
Hvis jeg incl. til min top fil så får jeg nedenstående fejlmeldingen over formularen
Warning: Cannot send session cache limiter - headers already sent (output started at /Local/Library/WebServer/WebSites/www.xxxx.xx/include/head_inn.php:11)

Nogen ide om hvad der er galt, da jeg selv har svært ved at overskue koden :-)
Avatar billede sukos Juniormester
16. juli 2003 - 05:08 #11
Tror du har en ældre version af PHP på serveren, så derfor skal f.eks. if(isset($_POST["input"])){ være if(isset($_HTTP_POST_VARS["input"])){
ligesom måden at sætte sessions på skal gøres på en anden måde.
Versionen af PHP kan du se med en
<?php phpinfo(); ?>

Scriptet ligger osse her:
http://new.sukos.dk/spm376362.php
Avatar billede ratatosk Nybegynder
16. juli 2003 - 11:25 #12
PHP Version 4.0.4pl1
Avatar billede sukos Juniormester
16. juli 2003 - 17:26 #13
Så skal du bruge $HTTP_POST_VARS eller opgradere versionen af PHP :O)

$_POST virker fra ver. 4.1.0

M.h.t. sessions, så kik lidt her:

http://dk.php.net/manual/en/ref.session.php
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