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)

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 16:02.

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