Hallo,
ich habe ein eigenes Template geschrieben, auf der ein Formular ist, das die POST-Parameter anschließend an die gleiche Seite schickt (action="").
Wenn falsche Daten eingegeben werden, funktioniert meine Plausibilitätsprüfung und es erscheint eine gewollte Fehlermeldung auf der Seite. Wenn jedoch die Daten korrekt eingegeben werden, dann wird der Datensatz nicht in die Datenbank geschrieben. Stattdessen kommt eine leere Seite mit dem Text: "Es gibt leider keine Beiträge, die deinen Kriterien entsprechen." Dieser Fehlermeldungstext befindet sich in meiner single.php-Datei. Die wird ofenbar aufgerufen, weil er nicht damit klar kommt, dass die gleiche Seite noch mal mit Parametern aufgerufen wird. header(Location: meineseite) bringt leider auch nichts.
Dieses Verhalten ist in meinen Augen höchst erkwürdig und total unverständlich. Ich weiss nicht mehr weiter und möchte die Seite so schnell wie möglich online bringen. Ich wäre daher dankbar, wenn jemand von euch sich das mal anschauen könnte.
Die Seite lautet: censr » Petition und der Quelltext sieht so aus:
<?php
/*
Template Name: Petition
*/
?>
<?php get_header(); ?>
<div id="content" class="narrowcolumn">
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
<div class="entry">
<?php the_content('Read the rest of this entry »'); ?>
</div>
<?PHP
$host='localhost';
$benutzer='xxx';
$pw='xxx';
$db='xxx';
$link = mysql_connect($host,$benutzer,$pw);
if (!$link)
die('Keine Verbindung zur Datenbank!<br>');
mysql_select_db($db,$link)
or die ('Konnte Datenbank nicht öffnen:'.mysql_error().'<br />');
function printerror($err){
echo '<strong>Fehler:</strong> '.$err.' <br />';
return true;
}
if(isset($_POST['submit']))
{
$waserror = false;
if(strlen($_POST['vorname'])<2)
$waserror = printerror('Du hast keinen Vornamen angegeben!');
if(strlen($_POST['vorname'])>20)
$waserror = printerror('Dein Vorname ist unmenschlich lang. :-)');
if(strlen($_POST['nachname'])<2)
$waserror = printerror('Du hast keinen Nachnamen angegeben!');
if(strlen($_POST['nachname'])>20)
$waserror = printerror('Dein Nachname ist unmenschlich lang. :-)');
if(strlen($_POST['nachname'])>20)
$waserror = printerror('Dein Nachname ist unmenschlich lang. :-)');
$regexe = "#(https?://)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?#";
if(strlen($_POST['url']>0) && !preg_match($regexe,$_POST['url']))
$waserror = printerror('Die angegebene URL ist ungültig');
if(strlen($_POST['mitteilung'])>50)
$waserror = printerror('Deine Mitteilung darf nicht länger als 50 Zeichen sein');
$query=mysql_query("SELECT * FROM ce_petition WHERE ip = '".$_SERVER['REMOTE_ADDR']."'");
if(mysql_num_rows($query) > 0)
$waserror = printerror('Du hast bereits deine Stimme abgegeben');
if(!$waserror)
{
$vorname = mysql_real_escape_string($_POST['vorname']);
$nachname = mysql_real_escape_string($_POST['nachname']);
$url = mysql_real_escape_string($_POST['url']);
$nachricht = mysql_real_escape_string($_POST['nachricht']);
mysql_query("INSERT INTO ce_petition VALUES ('$vorname', '$nachname', '$url', '$nachname', '".$_SERVER['REMOTE_ADDR']. "')");
}
}
$query=mysql_query("SELECT datum,vorname,nachname,url,nachricht FROM ce_petition ORDER BY datum DESC");
$anzahl=mysql_num_rows($query);
print ("<br />Es sind bereits <strong>$anzahl</strong> virtuelle Unterschirften eingegangen.");
echo '<br /> <br />';
print("<table><tr><th>Nr.</th><th>Datum</th><th>Name</th><th>Homepage</th><th>Nachricht</th>");
$nr=0;
while ($row=mysql_fetch_array($query))
{
$nr++;
$schnitt=number_format($row['schnitt'],0,'.','.');
$gesamt=number_format($row['gesamt'],0,'.','.');
print("<tr><td>$nr</td>\n");
print("<td>".$row['datum']."</td>\n");
print("<td>".$row['vorname']."</td>\n"); // todo nachname
print("<td>".$row['url']."</td>\n");
print("<td>".$row['nachricht']."</td>\n");
}
print("</tr>\n");
print("</table>");
mysql_close($link);
?>
<br /><br />
<br /><br />
<br /><br />
<p>
<h2>Eintragen</h2>
<br />
<br />
<form action="<?php $_SERVER['self']?>" method="post">
<label for='vorname' style='float:left;width:100px;'>Vorname: </label>
<input type='text' id='vorname' name='vorname' size='15'/><br />
<label for='name' style='float:left;width:100px;'>Nachname: </label>
<input type='text' id='name' name='name' size='15'/><br />
<label for='homepage' style='float:left;width:100px;'>Homepage: </label>
<input type='text' id='homepage' name='homepage'/><br/>
<label for='mitteilung' style='float:left;width:100px;'>Mitteilung: </label>
<textarea cols='23' rows='3' name='mitteilung' id='mitteilung'></textarea><br />
<br />
<br />
<input type='submit' name='submit' value='abschicken'/>
<input type='reset' value='zurücksetzen'/>
</p>
</form>
<p class="postmetadata"></p>
</div>
<?php endwhile; ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link('« Previous Entries') ?></div>
<div class="alignright"><?php previous_posts_link('Next Entries »') ?></div>
</div>
<?php else : ?>
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>
<?php include (TEMPLATEPATH . "/searchform.php"); ?>
<?php endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Alles anzeigen
Ich benutze das Default Theme (DE).