Zur Navigation

gbook hat einen Fehler?

1 tomaschko (Gast)

Hallo ich mal wieder mit einem problem.
Ich habe jetzt ein auf einer MySql-datenbank basierendes Gästebuch gemacht, aber das funktionier nicht richtig
Wenn ich einen Eintrag mache kommt danach (wie es auch sein soll) "Vielen Dank für Ihren eintrag" Darunter steht aber: Column count doesn't match value count at row 1

der zugehörige Code aus der Datei wo der Speichrvorgang vorgenommen wird:
<?
<?php

$feld = array();



$name = $_POST["Name"];

$email = $_POST["EMail"];

$eintrag = $_POST["eintrag"];



//Hier wird getestet, ob ein Eintrag im Namen steht und bei Email

//Wenn nicht, wird eine Fehlermeldung ausgegeben



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üllt:

<ul>

<?php

foreach ($feld as $fehler) {

echo "<li>".$fehler;



}

?>

<br>

<br>

</ul>

<input type="submit" value="Zurück">

</span></form><?php

exit(); // Skript beenden!

}

else { ?>

<span style="font-size:20pt"><p align="center">Danke <?php echo $name?> für deinen Eintrag.</p></span>

<br>

<br>
?>

Falls ihr hier keinen Fehler findet kann ich noch den Code der anderen beiden Dateien posten.

15.06.2005 14:37

2 Jörg Kruse

Die Fehlermeldung "Column count doesn't match value count at row 1" deutet darauf hin, dass die Werte in der MySQL INSERT Abfrage nicht übereinstimmen mit den Spalten der entsprechenden MySQL Tabelle. Also dass z.B. eine Spalte fehlt und noch angelegt werden muss. Wie lautet denn die INSERT Abfrage und wie sieht die Struktur der Tabelle aus, in die einfügt wird?

15.06.2005 14:57

3 tomaschko (Gast)

Die insertabfrage lautet:
mysql_query("INSERT INTO gbook VALUES('','$name','$email','$eintrag');") or die(mysql_error());
?>

Muss dabei die reihenfolge der Datenbank eingehalten werden, weil da bin ich mir nicht ganz sicher ob es die selbe ist.

Die datenbank enthält: id, name, email, eintrag, datum

15.06.2005 15:05

4 Jörg Kruse

Du kannst die Reihenfolge der Spalten hinter dem Tabellennamen angeben. Das Datum fehlt dann noch bei deiner query

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

15.06.2005 15:16

5 tomaschko (Gast)

Danke, jetzt gehts. Aber da ist noch eine Sache, die ich jetzt erste feststellen konnte.

Bei datum steht 01.01.1970 und bei Zeit 1:00 Uhr. Wie und wo ändert man das?

15.06.2005 15:22

6 Jörg Kruse

Vor der query muss für $datum wohl noch ein Timestamp erzeugt werden:

$datum = time();

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

15.06.2005 15:29

7 tomaschko (Gast)

Der befehl habe ich schon drinnen, deswegen weis ich auch nicht woran es liegt, dass das Datum falsch ist.

Auch die Einträge werden nicht ausgelesen. Es zeigt nur von wem und wann, sowie die emailadresse aber der Beitrag fehlt.
Code der auslesedatei:

if ($query = mysql_query("SELECT * FROM gbook ORDER BY datum DESC;")) {
while ($eintrag = mysql_fetch_array($query)) {
$datum[] = $eintrag["datum"];
$name[] = $eintrag["name"];
$email[] = $eintrag["email"];
$inhalt[] = $eintrag["eintrag"];
}
} else die(mysql_error());
?>
<?php

$inhalt = str_replace(":-)", "<img src=\"smilie1.gif\">", $inhalt);
$inhalt = str_replace(";-)", "<img src=\"smilie2.gif\">", $inhalt);
$inhalt = str_replace(":-D ", "<img src=\"smilie3.gif\">", $inhalt);
$inhalt = str_replace(":-(", "<img src=\"smilie4.gif\">", $inhalt);


for ($i = 0; $i < count($name); $i++) { ?>
<table>

<tr>
<td><h4><?php echo date("d.m.Y - H:i",$datum[$i])." ".stripslashes($name[$i])." (".stripslashes($email[$i]).")"; ?></h4></td>
</tr>
<tr>
<td><h3><?php echo stripslashes(nl2br($inhalt[$i]."")); ?></h3></td>
</tr>

</table>
<hr>
<?php
}?>

15.06.2005 22:03

8 Jörg Kruse

Einen Fehler, der dazu führt, dass Datum und Text im GEgensatz zu Name und Email nicht ausgegeben werden, sehe ich hier nicht. Sind die beiden Werte denn überhaupt in die Datenbank eingetragen worden? Wie sieht denn das Script vor der INSERT query aus? Vielleicht wurden die beiden Werte an irgendeiner Stelle nich korrekt übergeben

16.06.2005 07:58

9 tomaschko (Gast)

nein, das hast du falsch verstanden. Der Beitrag wird nicht ausgegeben.

Datum wird ausgegeben aber immernoch 1970.

Insert query hast du mir doch schon korrigiert.;-)

16.06.2005 11:19

10 Jörg Kruse

Die query selbst ist ja auch ok, nur werden $eintrag und $datum vor der DAtenbankeingabe auch richtig übergeben? In der Ausgabe ist der Fehler nicht zu finden, deswegen meine Vermutung, dass die WErte für Datum und Eintrag leer in die DB eingetragen wurden, weil sie vorher schon verloren gegangen sind - deswegen meine Frage nach dem Code vor der INSERT query

16.06.2005 11:42