Hallo,
ich habe ein einfaches Forum erstellt, welches beim meinem alten Webhoster wunderbar funktioniert hat. Nach dem Umzug kann ich leider keine Antworten mehr geben bzw. keien neuen Threads erstellen. Ich erhalte immer die ensprechende Fehlermeldung, das snicht alle Felder ausgefüllt sind. (Also die vorgegebene Fehlermelung). Also wa sist falsch?
<?php
...
if(isset($username) && isset($eintrag)){
$date=date("d.m.Y");
$time=date("H:i");
@mysql_query("Update forum_threads set thread_replys=thread_replys+1 where thread_id='".$threadid."'");
$query="Insert into forum_replys
VALUES(
'',
'".$title."',
'".$username."',
'".$date."',
'".$time."',
'".$eintrag."',
'".$boardid."',
'".$threadid."'
)";
@mysql_query($query);
echo"<b>Die Antwort wurde erfolgreich erstellt!<br><a href=\"replys.php?boardid=".$boardid."&threadid=".$threadid."\">Weiter</a></b>";
} else {
echo"<b>Bitte füllen Sie alle Felder aus.<br><a href=\"javascript:history.go(-1)\">Zurück</a></b>";
}
?>
register_globals ist deaktiviert. Du musst $_POST bzw $_GET benutzen, um auf die Formulardaten zugreifen zu können.
register_globals ist deaktiviert. Du musst $_POST bzw $_GET benutzen, um auf die Formulardaten zugreifen zu können.
[quote=„Balmung“]if(isset($username) && isset($eintrag)){
register_globals ist deaktiviert. Du musst $_POST bzw $_GET benutzen, um auf die Formulardaten zugreifen zu können.[/quote]
Das heist für einen php & mysql n00b wie mich was? 
$_POST[‘username’]
Für Formulardaten die per method=“post” übermittelt wurden, statt einfach nur $username 
Habe nun den Code wie folgt geändert, erhalte aber immernoch keine Einträge, sondern die definierte Fehlermeldung. Was mache ich denn falsch?
<?php
...
@mysql_select_db($db_name); // Wähle Datenbank
if(isset($username) && isset($eintrag)){
$date=date("d.m.Y");
$time=date("H:i");
@mysql_query("Update forum_threads set thread_replys=thread_replys+1 where thread_id='".$threadid."'");
$query="Insert into forum_replys
VALUES(
'',
'".$_POST['title']."',
'".$_POST['username']."',
'".$date."',
'".$time."',
'".$_POST['eintrag']."',
'".$boardid."',
'".$threadid."'
)";
@mysql_query($query);
echo"<b>Die Antwort wurde erfolgreich erstellt!<br><a href=\"replys.php?boardid=".$boardid."&threadid=".$threadid."\">Weiter</a></b>";
} else {
echo"<b>Bitte füllen Sie alle Felder aus.<br><a href=\"javascript:history.go(-1)\">Zurück</a></b>";
}
?>
Natürlich musst du es überall ändern oder am Beginn den alten Variablen zuweisen.
if(isset($username) && isset($eintrag)){ <-- Hier greift er natürlich auch ins Leere
Ich habe langsam keine Lust mehr. Ich habe nun alle geändert. Zwischendurch nur ein paar udn einige leer gelassen, aber es funktioniert einfach nicht. 
Hier der Code:
<?php
...
if(isset($_POST['username']) && isset($_POST['eintrag'])){
$date=date("d.m.Y");
$time=date("H:i");
@mysql_query("Update forum_threads set thread_replys=thread_replys+1 where thread_id='".$_POST['threadid']."'");
$query="Insert into forum_replys
VALUES(
'',
'".$_POST['title']."',
'".$_POST['username']."',
'".$_POST['date']."',
'".$_POST['time']."',
'".$_POST['eintrag']."',
'".$_POST['boardid']."',
'".$_POST['threadid']."'
)";
@mysql_query($query);
echo"<b>Die Antwort wurde erfolgreich erstellt!<br><a href=\"replys.php?boardid=".$boardid."&threadid=".$threadid."\">Weiter</a></b>";
} else {
echo"<b>Bitte füllen Sie alle Felder aus.<br><a href=\"javascript:history.go(-1)\">Zurück</a></b>";
}
?>
Ich verstehe sowieso nur 10% von dem, was ich da mache. Was mache ich denn falsch?
Zunächst war ein schreibfehler im Absendeformular SCHULD, dass die Variablen nicht mit POST übermittelt wurden. Nun kann ich einen EIntrag erstellen (Dieser bekommt die reply_id 0) aber dann keinen weiteren mehr. Es kommt nichts in der Datenbank an. Außerdem kenne ich die Befehle für die Zeit und das Datum nicht.
<?php
...
if(isset($_POST['username']) && isset($_POST['eintrag'])){
$date=date("d.m.Y");
$time=date("H:i");
@mysql_query("Update forum_threads set thread_replys=thread_replys+1 where thread_id='".$_POST['threadid']."'");
$query="Insert into forum_replys
(reply_id,reply_title,reply_username,reply_date,reply_time,reply_message,reply_boardid,reply_threadid)
VALUES(
[color=#FF0000]''[/color],
'".$_POST['title']."',
'".$_POST['username']."',
[color=#FF0000]NOW()[/color],
[color=#FF0000]NOW()[/color],
'".$_POST['eintrag']."',
'".$_POST['boardid']."',
'".$_POST['threadid']."'
)";
@mysql_query($query);
echo"<b>Die Antwort wurde erfolgreich erstellt!<br><a href=\"replys.php?boardid=".$_POST['boardid']."&threadid=".$_POST['threadid']."\">Weiter</a></b>";
} else {
echo"<b>Bitte füllen Sie alle Felder aus.<br><a href=\"javascript:history.go(-1)\">Zurück</a></b>";
}
?>
reply_id ist warscheinlich der Primary Key, daher kann reply_id = 0 nur ein mal vorkommen. mit ‘’ weißt du aber immer 0 zu.
Eine effektive Lösung ist es reply_id auf auto_increament zu setzen, und aus der Insert-Liste komplett herauszunehmen, bzw NULL zu senden

Okay, das hat geklappt. Beim Übertrag der Datenbank war auch überall der auto_increament Befehl aus allen Tabellen verschwunden.
Wie sorge ich nun für die richtige Zeit und Datumsübertragung?
Zeiten sind in MySQL extrem leicht einzufügen. Entweder du sendest einfach einen Timestamp als Integer, oder einen String der ein gültiges Datumsformat enthält. MySQL erkennt dann automatisch welches Format es ist 
Okay, nun habe ich alles geschafft:
<?php
...
if(isset($_POST['username']) && isset($_POST['eintrag'])){
$date=date("d.m.Y");
$time=date("H:i");
@mysql_query("Update forum_threads set thread_replys=thread_replys+1 where thread_id='".$_POST['threadid']."'");
$query="Insert into forum_replys
(reply_title,reply_username,reply_date,reply_time,reply_message,reply_boardid,reply_threadid)
VALUES(
'".$_POST['title']."',
'".$_POST['username']."',
'".$date."',
'".$time."',
'".$_POST['eintrag']."',
'".$_POST['boardid']."',
'".$_POST['threadid']."'
)";
@mysql_query($query);
echo"<b>Die Antwort wurde erfolgreich erstellt!<br><a href=\"replys.php?boardid=".$_POST['boardid']."&threadid=".$_POST['threadid']."\">Weiter</a></b>";
} else {
echo"<b>Bitte füllen Sie alle Felder aus.<br><a href=\"javascript:history.go(-1)\">Zurück</a></b>";
}
?>
Damit funktioniert das Eintragen und das Datum. ABER. Alle Sonderzeichen werden codiert in die Datenbank gesendet und auch codiert ausgegeben. Wie kann ich dafür sorgen, dass ein „Ü“ wieder als ein „Ü“ in die Datenbank geht und nicht als „Ü“?
Ich dreh hier noch echt durch. 
Verwende in der Datenbank und auf der Webseite die gleiche Zeichenkodierung 
Also im head meiner Dokumente steht:
Dies war nätig, damit alle Sonderzeichen nach dem Umzug richtig dargestellt wurden.
Die Kollation meiner Datenbank steht überall auf utf8_general_ci. Müsste doch gleich sein, oder?
[quote=“moneymeyer”]Also im head meiner Dokumente steht:
Dies war nätig, damit alle Sonderzeichen nach dem Umzug richtig dargestellt wurden.
Die Kollation meiner Datenbank steht überall auf utf8_general_ci. Müsste doch gleich sein, oder?[/quote]
Nein, ISO-8859-1 ganz und gar nicht “das gleiche” wie UTF-8.
Die Überlegung, welche Kodierung man verwenden will, und wo diese dann überall einzustellen ist, sollte vorher erfolgen (und durchdacht sein) - dann muss man nachher nicht so viel rumbasteln, um es irgendwie “wieder hin zu kriegen”.
Jetzt wirst du schauen müssen, wo überall du noch Angaben zur Kodierung machen musst (HTTP-Header, Verbindung zur Datenbank, …).
Okay, langsam mag ich echt nicht mehr. Vor dem Umzug auf diesem Webspace hatte ich nie darauf geachtet (Ich hatte auch keine Codierung im head meiner Dokumente angegeben) und es hatte komischerweise immer funktioniert.
Kann mir bitte jemand sagen, wie ich meine alten Daten exportieren und hier bei bplaced importieren kann, damit ich nicht überall eine unterschiedliche Codierung habe und alle Zeichen (sowohl die alten aus der übernommenen Datenbank und die neu hinzugefügten) richtig dargestellt werden?
Was muss ich wo einstellen (phpmyadmin, html-head, sql-befehle, etc.). Es muss doch auch einen einfachen Weg geben!
(Hätte nicht gedacht, dass ein Webspacewechsel so kompliziert werden kann)
es gibt in PHP Funktionen die das erleichtern, aber vorher solltest du schauen, ob in der DB die Codierung überall passt 