WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   få formresultat på samma sida (https://www.wn.se/forum/showthread.php?t=11542)

ashur 2005-12-30 22:02

Det är så att jag har nu suttit ett tag och klurat ut detta men till ingen lycka.

Jag använder mig utav en gratis webbformulär, där resultatet som du skrev in, kommer upp efter du skickat iväg filen.
Problemet som jag har är att resultatet kommer upp på en ny sida, inte på den existerande sidan.




Undrar om någon kan hjälpa mig att få den på samma sida.

tack på förhand.


Kod:

<!-- PHP easy-form -->
<?

// * Copyright (C) 2004 CentralFloridaVA.com. All rights reserved.

// *PHPeasy-form version 1.1
// * Released 2004-10-02

// * This file is part of PHPeasy-form.

// * PHPeasy-form is free software; you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation; either version 2 of the License, or
// * (at your option) any later version.

// * PHPeasy-form is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *See the
// * GNU General Public License for more details.

// * You should have received a copy of the GNU General Public License
// * along with PHPeasy-form; if not, write to the Free Software
// * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA *02111-1307 *USA
       
// *Contact CentralFloridaVA.com at:
// *http://www.CentralFloridaVA.com
       
//        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

$name = $_POST["name"];
$address = $_POST["address"];
$city = $_POST["city"];
$state = $_POST["state"];
$zip = $_POST["zip"];
$phone = $_POST["phone"];
$email = $_POST["email"];
$comments = $_POST["comments"];


$today = date("M d, Y");
$recipient = "[email protected]";
$subject = "Formulärresultat";
$forminfo =
"Name: $name\n
Address: $address\n
City: $city\n
State: $state\n
Zip: $zip\n
Phone: $phone\n
Email: $email\n
Comments: $comments\n
Form Submitted: $today\n\n";

$formsend = mail("$recipient", "$subject", "$forminfo", "From: $email\r\nReply-to:$email");
?>
<!-- end PHP easy-form -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kontakta oss</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="5">
 *<tr>
 * *<td> <p align="left">Tack så mycket. Du har skickat denna information:</p>
        <p><? echo nl2br($forminfo); ?></p>
 *</tr>
</table>
</body>
</html>


Lundmark 2005-12-30 22:24

Om man ska vara kvar på samma sida så kan du göra det med en IF sats.

Kolla då om ($comments = "") i så fall visar du formuläret och om inte så visar du tacksidan.

ViktorPersson 2005-12-30 23:52

Lägg följande kod mellan <body> och </body>.

Kod:

<?php
if ($_POST) { // Om man har skickat variabler med metoden POST
 echo '<table width="100%" border="0" cellspacing="0" cellpadding="5">
 <tr>
  <td> <p align="left">Tack så mycket. Du har skickat denna information:</p>
<p>' . nl2br($forminfo) . '</p>
 </tr>
</table>';
}
else { // Annars skriva ut formuläret
 echo <koden_för_formuläret>;
}
?>

Koden för formuläret borde vara nått liknande:

Kod:

<form method="POST" action="filnamn.php">
Name: <input type="text" name="name"><br/>
Address: <input type="text" name="address"><br/>
..
..
</form>


ashur 2005-12-31 00:20

Testade med din kod, och får på nåt sätt samma resultat.

Så här ser koden ut för formuläret (heter kontakta.php):
Kod:

<h1>Kontakta oss</h1>
 
 <p id="note">Alla uppgifter som du lämnar här &auml;r konfidentiellt och överlämnas <u>inte</u> till en tredje part.</p>
 <form action="form-send.php" method="post">

 <table width="100%" border="0" cellspacing="5" cellpadding="5">
  <tr valign="top">
  <td width="15%">Namn:</td>
  <td width="85%"> <input class="kantlinje" type="text" name="name"></td>
  </tr>
  <tr valign="top">
  <td>Telefonnummer:</td>
  <td> <input class="kantlinje" type="text" name="phone"></td>
  </tr>
  <tr valign="top">
        <td>Email address:</td>
  <td><input class="kantlinje" name="email" type="text"></td>
  </tr>
  <tr valign="top">
  <td>Kommentarer:</td>
  <td> <textarea class="kantlinje" name="comments" cols="30" rows="5" id="comments"></textarea></td>
  </tr>
  <tr>
  <td width="15%" height="39"></td><td>
    <input class="kantlinje" type="submit" name="Submit" value="Skicka">
    <input class="kantlinje" name="Reset" type="reset" id="Reset" value="Återställ">
    </td>
  </tr>
 </table>
</form>

Och här kommer ändringen av koden:

Kod:

<!-- PHP easy-form -->
.............

<body>
<?php
if ($_POST) { // Om man har skickat variabler med metoden POST
echo '<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
 <td> <p align="left">Tack så mycket. Du har skickat denna information:</p></td>
<p>' . nl2br($forminfo) . '</p>
</tr>
</table>';
}
else { // Annars skriva ut formuläret
echo kontakta.php;
}
?>
</body>
</html>


ViktorPersson 2005-12-31 00:32

ok, du ändrade inte riktigt som jag tänkt mig. Jag orkar inte fixa allt här nu (sitter på en sunkig laptop), men du kan börja med att ändra:
Kod:

<form action="form-send.php" method="post">
till
Kod:

<form action="kontakta.php" method="post">
Då hamnar man på kontakta.php när man använder formuläret. Titta igenom det jag skrev en gång till ordentligt så kanske du förstår.

om man skickat med variabler
> skriv ut info
annars
> skriv ut formuläret

ashur 2005-12-31 00:57

=), läste lite snabbt. Men efter att ha studerat så tror jag vad du menade:
Du menar att jag ska klippa ut all koder som jag har på kontakta.php och klistra in det där du skrev <koden_för_formuläret>

Typ så här:

Kod:


 <h1>Kontakta oss</h1>
 
 <p id="note">Alla uppgifter som du lämnar här &auml;r konfidentiellt och överlämnas <u>inte</u> till en tredje part.</p>
 <form action="sida/kontakta.php" method="post">

<!-- PHP easy-form -->
<?
$today = date("M d, Y");
$recipient = "[email protected]";
$subject = "Web Form Results";
$forminfo =
"Name: $name\n
Address: $address\n
City: $city\n
State: $state\n
Zip: $zip\n
Phone: $phone\n
Email: $email\n
Comments: $comments\n
Form Submitted: $today\n\n";

$formsend = mail("$recipient", "$subject", "$forminfo", "From: $email\r\nReply-to:$email");
?>
<!-- end PHP easy-form -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kontakta oss</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
if ($_POST) { // Om man har skickat variabler med metoden POST
echo '<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
 <td> <p align="left">Tack så mycket. Du har skickat denna information:</p>
<p>' . nl2br($forminfo) . '</p>
</tr>
</table>';
}
else { // Annars skriva ut formuläret
echo

 <form action="kontakta.php" method="post">

 <table width="100%" border="0" cellspacing="5" cellpadding="5">
  <tr valign="top">
  <td width="15%">Namn:</td>
  <td width="85%"> <input class="kantlinje" type="text" name="name"></td>
  </tr>
  <tr valign="top">
  <td>Telefonnummer:</td>
  <td> <input class="kantlinje" type="text" name="phone"></td>
  </tr>
  <tr valign="top">
        <td>Email address:</td>
  <td><input class="kantlinje" name="email" type="text"></td>
  </tr>
  <tr valign="top">
  <td>Kommentarer:</td>
  <td> <textarea class="kantlinje" name="comments" cols="30" rows="5" id="comments"></textarea></td>
  </tr>
  <tr>
  <td width="15%" height="39"></td><td>
    <input class="kantlinje" type="submit" name="Submit" value="Skicka">
    <input class="kantlinje" name="Reset" type="reset" id="Reset" value="Återställ">
    </td>
  </tr>
 </table>
</form>
 ;
}
?>
</body>
</html>

Men då får jag en "error" ruta: Parse error: parse error, unexpected '<', expecting ',' or ';' in on line 83[Ii]

zilda 2005-12-31 10:10

Nåt sånt här borde bli bra om du döper skriptet till kontakta.php

Kod:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kontakta oss</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
if ($_POST) { // Om man har skickat variabler med metoden POST
$today = date("M d, Y");
$recipient = "[email protected]";
$subject = "Web Form Results";
$forminfo =
"Name: $name\n
Address: $address\n
City: $city\n
State: $state\n
Zip: $zip\n
Phone: $phone\n
Email: $email\n
Comments: $comments\n
Form Submitted: $today\n\n";

$formsend = mail("$recipient", "$subject", "$forminfo", "From: $email\r\nReply-to:$email");

echo '<table width="100%" border="0" cellspacing="0" cellpadding="5">
<tr>
 <td> <p align="left">Tack så mycket. Du har skickat denna information:</p>
<p>' . nl2br($forminfo) . '</p>
</tr>
</table>';
}
else { // Annars skriva ut formuläret
?>
 <h1>Kontakta oss</h1>
 
 <p id="note">Alla uppgifter som du lämnar här &auml;r konfidentiellt och överlämnas <u>inte</u> till en tredje part.</p>

 <form action="kontakta.php" method="post">

 <table width="100%" border="0" cellspacing="5" cellpadding="5">
  <tr valign="top">
  <td width="15%">Namn:</td>
  <td width="85%"> <input class="kantlinje" type="text" name="name"></td>
  </tr>
  <tr valign="top">
  <td>Telefonnummer:</td>
  <td> <input class="kantlinje" type="text" name="phone"></td>
  </tr>
  <tr valign="top">
<td>Email address:</td>
  <td><input class="kantlinje" name="email" type="text"></td>
  </tr>
  <tr valign="top">
  <td>Kommentarer:</td>
  <td> <textarea class="kantlinje" name="comments" cols="30" rows="5" id="comments"></textarea></td>
  </tr>
  <tr>
  <td width="15%" height="39"></td><td>
    <input class="kantlinje" type="submit" name="Submit" value="Skicka">
    <input class="kantlinje" name="Reset" type="reset" id="Reset" value="Återställ">
    </td>
  </tr>
 </table>
</form>
<?php
}
?>
</body>
</html>


ashur 2005-12-31 13:53

Tack så mycket för hjälpen. Nu fungerar den. ;)

En snabb sak till då jag testade scriptet, jag märkte att en person kan skicka "tomma fält" genom mailet. Nu undrar jag vilket som är bäst, använda javascript till att validera eller lägga till något färdig php-kod?

Netikett 2005-12-31 14:03

Kombinera det. Först en kontroll med javascript och sen en kontroll på servern.

ashur 2006-01-01 14:24

Nu har jag lekt lite med olika scripts, och varje gång jag testar de för sig själv så fungerar dessa. Men när jag ska infoga det i koden som jag har så fungerar det inte. :( Nånting gör jag fel, men jag har läst vad man ska göra men fortfarande blir det fel.
Jag skickas vidare till resultatsidan på vad jag skrivit.

Kod:

<?
  $message  = "";
  $emailclass = "basictext";
  $username  = "";

  if ($_POST['process'] == 1) {

    $pattern = '/.*@.*\..*/';
    $email  = $_POST['email'];
    $urlname = urlencode($$_POST['username']);

    if (preg_match($pattern, $_POST['email']) > 0) {
      // Here's where you would store
      // the data in a database...
      header(
      "location: thankyou.php?&username=$urlname");
    }
    $message  = "Please enter a valid email address.";
    $username  = $_POST['name'];
    $emailclass = "errortext";
  }
?>

<html><title></title><head></head>
<style>
  .basictext {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px; color:#000066;
  }
  .errortext {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px; color:#C00000; font-weight: bold;
        }
        .errortext.input {background-color:#009933}
</style>
<body>
<form action="email.php" method="post">
  <? if ($message != "") {
    print '<span class="errortext">'.
      $message."<span><br>\n";
  }
  ?>
  <span class="<?print $emailclass; ?>">
    Email address:</span>
  <span class="<?print $emailclass; ?>"> <input name="email" type="text"
    class="<? print $emailclass; ?>"></span><br>
 
       
       
  <? if ($message != "") {
    print '<span class="errortext">'.
      $message."<span><br>\n";
  }
  ?>
  <span class="<?print $username; ?>">
    Namn:</span>
  <span class="<?print $username; ?>"> <input name="name" type="text"
    class="<? print $username; ?>"></span><br>
    <input type="hidden" name="process" value="1">
  <input type="submit" name="Button1" value="Sign up!">
</form>
</body></html>


anders.n 2006-01-02 15:37

Den koden verkar fungera.. med lite snabb modifikation..

Dock, jag skulle byta ut

Kod:

if ($_POST['process'] == 1) {
mot
Kod:

if (isset($_POST['process'])) {
och

Kod:

$urlname = urlencode($$_POST['username']);
mot
Kod:

$urlname = urlencode($_POST['username']);
;)

AHA!

Kom på vad som kan strula...

I början av din kod har du ett mellanslag innan <? .. har du det i filen också?

Om följande villkor är uppfyllda, så kan det kanske se ut som att sidan bara visas igen:

1. Du skickar någon text innan PHP-koden (ett mellanslag/en radmatning i början av filen t.ex.)
2. Du har inte PHP inställt på att "buffra" det den skickar
3. PHP är inställt på att inte visa några felmeddelanden

Du använder header-location för att byta sida.. den gör då det genom att skicka en header till webbläsaren som säger att den skall hämta en annan fil (thankyou)... om sidan redan skickat någon text (mellanslag) så kan inte headers ändras (om inte PHP buffrar innan den skickar), så.. då visas ett felmeddelande.. ("Warning: Cannot modify header information - headers already sent").

Sedan fortsätter koden, så den skickar den vanliga resultatsidan också..

Om din PHP inte visar felmeddelanden kan det alltså se ut som att den bara visar sidan igen..

Testa ändra till detta:

Kod:

      header(
      "location: thankyou.php?&username=$urlname");
    exit;

Får du då en "tom" sida istället? Isåfall är det förmodligen problem med headers/redan skickad data..

Testa att lägga till följande kommando i början av koden:
Kod:

error_reporting(E_ALL);
Trött nu, så.. inlägget blev rätt rörigt.. oh well. :)

ashur 2006-01-04 18:27

först vill jag säga: stort tack till hjälpen och bra förklarat. ;)
Men jag undrar om du kunde sammanfoga koderna, med dina ändringar, så kan jag se bättre på vad som jag gör fel i.

tack på förhand. :)

anders.n 2006-01-05 15:08

Otestat...

Kod:

<?

  error_reporting(E_ALL);

  $message  = "";
  $emailclass = "basictext";
  $username  = "";

 

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

    $pattern = '/.*@.*\..*/';
    $email  = $_POST['email'];
    $urlname = urlencode($_POST['username']);

    if (preg_match($pattern, $_POST['email']) > 0) {
      // Here's where you would store
      // the data in a database...
      header(
      "location: thankyou.php?&username=$urlname");
      exit;
    }
    $message  = "Please enter a valid email address.";
    $username  = $_POST['name'];
    $emailclass = "errortext";
  }
?>

<html><title></title><head></head>
<style>
  .basictext {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px; color:#000066;
  }
  .errortext {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px; color:#C00000; font-weight: bold;
}
.errortext.input {background-color:#009933}
</style>
<body>
<form action="email.php" method="post">
  <? if ($message != "") {
    print '<span class="errortext">'.
      $message."<span><br>\n";
  }
  ?>
  <span class="<?print $emailclass; ?>">
    Email address:</span>
 <span class="<?print $emailclass; ?>"> <input name="email" type="text"
    class="<? print $emailclass; ?>"></span><br>
 


 <? if ($message != "") {
    print '<span class="errortext">'.
      $message."<span><br>\n";
  }
  ?>
  <span class="<?print $username; ?>">
    Namn:</span>
 <span class="<?print $username; ?>"> <input name="name" type="text"
    class="<? print $username; ?>"></span><br>
  <input type="hidden" name="process" value="1">
  <input type="submit" name="Button1" value="Sign up!">
</form>
</body></html>


ashur 2006-01-05 22:43

tack för uppläget ;)

Jag får denna error då jag medvetat lämnat fälten tomma eller skriver något.
Notice: Undefined index: username in line 15
Line 15 är: $urlname = urlencode($_POST['username']);

anders.n 2006-01-08 11:33

Ja. Det bästa är att kolla att alla värden finns först.

Exempelvis:

Kod:

if (isset($_POST['username'])) $urlname=urlencode($_POST['username']);

Jonas 2006-01-08 12:23

Citat:

Originally posted by anders.n@Jan 8 2006, 12:33
Ja. Det bästa är att kolla att alla värden finns först.

Exempelvis:

Kod:

if (isset($_POST['username'])) $urlname=urlencode($_POST['username']);

Njae, det absolut bästa är väl att göra funktioner utav det.

Kod:

<?php
function post($value)
{
return (isset($_POST[$value])) ? $_POST[$value] : false;
}

function get($value)
{
return (isset($_GET[$value])) ? $_GET[$value] : false;
}

$urlname = urlencode(post('username'));
?>

Smidigt som f*n när man gör stora applikationer.. :)

anders.n 2006-01-08 17:08

Jojo.. :)

Jag brukar göra funktioner som "GetNumber" och "GetString" som loggar/skriker/blir fundersam om man skickar in något oväntat.. :)


Alla tider är GMT +2. Klockan är nu 05:53.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson