Zur Navigation

gbook hat einen Fehler? [2]

11 tomaschko (Gast)

oh, habe das vor überlesen, sorry.

also hier der code vor der insert:
<?php
$feld = array();

$name = $_POST["Name"];
$email = $_POST["EMail"];
$eintrag = $_POST["eintrag"];



if ($name == "") $feld[] = "Name";
if ($email == "") $feld[] = "E-Mail";




if (!count($feld) == 0) { ?>
<form name="eintrag" action="index.php?show=eintrag" method="post">
<h1>Eingabefehler</h1>
<span style="font-size:14pt">Folgende Felder wurden nicht ausgef&uuml;llt:
<ul>
<?php
foreach ($feld as $fehler) {
echo "<li>".$fehler;

}
?>
<br>
<br>
</ul>
<input type="submit" value="Zurück">
</span></form><?php
exit(); 
}
else { ?>
<span style="font-size:20pt"><p align="center">Danke <?php echo $name?> f&uuml;r deinen Eintrag.</p></span>
<br>
<br>
<form name="entraege" action="index.php?show=meinungsapparat" method="post">
<p align="center"><input type="submit" value="Weiter"></p>
</form>
<?php
} ?>


<?php $dbName = "***";
$dbHost = "localhost";
$dbUser = "***";
$dbPW = "***";

if (!(($dblink = mysql_connect($dbHost,$dbUser,$dbPW)) && (mysql_select_db($dbName,$dblink)))) die(mysql_error());

$datum = time();

mysql_query("INSERT INTO gbook (id, name, email, eintrag, datum) VALUES('','$name','$email','$eintrag','$datum');") or die(mysql_error());
?>
</body>
</html>

16.06.2005 12:09 | geändert: 16.06.2005 13:49

12 Jörg Kruse

Eine mögliche Fehlerquelle sehe ich:

Die Variable $eintrag wird für mehrere Einheiten verwendet, einmal als Formularname, dann für den Eintragstext und schließlich für den array der SELECT Abfrage - vielleicht ist da etwas durcheinander gelaufen. Ich würde das Formular mal anders benennen, dann löst sich das Problem vielleicht schon

<form name="anderername" action="index.php?show=eintrag" method="post">

Wegen dem Datum sehe ich keinen Fehler, hast du nach der letzten Korrektur noch einen Test-Eintrag gemacht, ob das Problem überhaupt noch besteht? Die älteren habe natürlich kein aktuelles Datum, aber die neueren sollten eins haben

PS: die Zugangsdaten in deinem Code habe ich sicherheitshalber editiert

16.06.2005 13:51 | geändert: 16.06.2005 13:51

13 tomaschko (Gast)

das will immer noch nicht wie ich will.

Ich verzweifel noch.

16.06.2005 14:22

14 Jörg Kruse

Hast du auch im allerersten Formular einen anderen Formular-Namen gewählt, dass die Variable $eintrag auch dort eindeutig nur dem Eingabe-Text zuzuordnen ist? Und bei neuen Einträgen wird weiterhin kein Eingabe-Text angezeigt?

Gegebenenfalls auch nochmal den Quelltext des Eingabeformulars hier reinkopieren, der Fehler kan auch schon bereits dort liegen

16.06.2005 15:17 | geändert: 16.06.2005 15:18

15 tomaschko (Gast)

Ja den habe ich auch geändert. Habe auch neue Einträge probiert.

Ok, dann mal die eintrag.php:

<script language="JavaScript">
<!--
function SmilieEinfuegen(Smilie)
{
document.Formular.Textfeld.value+=Smilie+" ";
document.Formular.Textfeld.focus();
}
//-->
</script>
</head>

<body class="main">
<form name="posten" action="index.php?show=speichern" method="post">
<p align="center"><font size="3">Neuer Eintrag im GBooK</font></p>
<p align="center">
<table>
<tr>
<td><span style="font-size:11pt">Name: </span></td>
</tr>
<tr>
<td><input type="text" name="Name" class="normal"></td>
</tr>
<tr><br>
<td><span style="font-size:11pt">E-Mail Adresse: </span></td>
</tr>
<tr>
<td><input type="text" name="EMail" class="normal"></td>
</tr>
<tr>
<td colspan="5" style="text-align:center;">

<table>
<tr>
<td><p align="center"><span style="font-size:11pt">Eintrag:</span></p></td>
</tr>
<tr>
<td><align="right"><textarea name="Textfeld" cols="25" rows="5"></textarea></p></td>
<a href="javascript:SmilieEinfuegen(':-)')"><img border="0" src="smilie1.gif"></a>
<a href="javascript:SmilieEinfuegen(';-)')"><img border="0" src="smilie2.gif"></a>
<a href="javascript:SmilieEinfuegen(' ')"><img border="0" src="smilie3.gif"></a>
<a href="javascript:SmilieEinfuegen(':-(')"><img border="0" src="smilie4.gif"></a>
</tr>
</table>
</center>
</td>

</tr>
<tr>
<td> </td>
<td> </td>
<td><p align="center"><input type="submit" value="Eintragen"></p></td>
<td><p align="center"><input type="reset" value="L&ouml;schen"></p></td>
</tr>
</table>

</form>

16.06.2005 20:40

16 Jörg Kruse

Ja, dort wird der Fehler sichtbar, die Variable für den Text erhält im Formular den Namen "Textfeld":

<td><align="right"><textarea name="Textfeld" cols="25" rows="5"></textarea></p></td>

mit genau diesem Namen muss die Variable im Script auch wieder aufgenommen werden:

$name = $_POST["Name"];
$email = $_POST["EMail"];
$eintrag = $_POST["Textfeld"];

du hattest die Variable im Script unter dem Namen "eintrag" aufgenommen - da es im Formular keine Entsprechung gab, blieb die Variable leer

16.06.2005 21:20 | geändert: 16.06.2005 21:23

17 tomaschko (Gast)

Super jetzt gehts, aber das Datum ist immer noch falsch obwohl ich das nach deinem Vorschlag korrigiert habe. Kannst du da nochmal schauen. Zurzeit steht nämlich der neuste Beitrag unten. Ich hoffe das liegt nur am Datum. Es ist immer wieder der 01.01.1970 1:00 Uhr

16.06.2005 22:02

18 Jörg Kruse

Die Einträge werden absteigend nach dem Datum sortiert (ORDER BY datum DESC). Anscheinend wurde der Timestamp bei keinem Eintrag eingetragen, so dass die Einträge automatisch nach der id sortiet werden. So wie du das Script korrigiert hast ...:

$datum = time();

mysql_query("INSERT INTO gbook (id, name, email, eintrag, datum) VALUES('','$name','$email','$eintrag','$datum');") or die(mysql_error());

sollte der aktuelle Timestamp aber wie gewünscht eingetragen werden. Tut mir leid, aber ich sehe dort keinen Fehler, auch nicht bei der Ausgabe, es sollte eigentlich so funktionieren.

Wie ist denn die Definition der Spalte datum in der MySQL Tabelle gbook - vielleicht stimmt damit ja was nicht, oder erfordert eine andere Eingabe

17.06.2005 09:19 | geändert: 17.06.2005 09:20

19 tomaschko (Gast)

Bei Feld habe ich: datum
Typ: datetime
Null: Ja
Standard: NULL

Der Rest ist leer.

17.06.2005 13:57

20 Jörg Kruse

Der MySQL-Typ datetime ist nicht kompatibel mit dem Timestamp. Da gibt es nun zwei Möglichkeiten:

1. Die Spalteneigenschaft von gbook.datum ändern in:

Field: datum
Type: INT
Length: 11
Null: not null
Default: 0

oder

2. das Script entsprechend umschreiben

bei der Eingabe:

mysql_query("INSERT INTO gbook (id, name, email, eintrag, datum) VALUES('','$name','$email','$eintrag',now());") or die(mysql_error());

("$datum = time();" entfällt)

und bei der Ausgabe:

<td><h4><?php echo $datum[$i]." ".stripslashes($name[$i])." (".stripslashes($email[$i]).")"; ?></h4></td>

17.06.2005 14:38