Ohja, blöder Fehler von mir.
Alt hab ich mal weggelassen, ist ja fürs Beispiel nicht notwendig.
Druckbare Version
Darüber kann man sehr lange streiten^^Zitat:
Alt hab ich mal weggelassen, ist ja fürs Beispiel nicht notwendig.
Ich bin eben der Meinung, wenn schon, denn schon. Vor allem da du die XHTML-Schreibweise gewählt hast.
Aber gut, belassen wir das. Hier geht es ja schließlich auch um die Hilfe, di im Vordergrund stehen sollte. ;)
Hab noch so ein seltsames Problem...
HTML-Code:
<form action='news_eintrag.php' method='post'>
<br>
<div style='margin-bottom: 10px;'>
<b style='color: white;'>Titel:</b><br />
<input type='text' name='titel' style='border: 1px solid #666666; background: #EEEEEE;' />
</div>
<b style='color: white;'>Text:</b><br />
<textarea cols='40' rows='10' name='message' style='border: 1px solid #666666; background: #EEEEEE;'></textarea>
<br /><br /><input type='submit' value='Absenden' style='border: 1px solid #666666; background: #EEEEEE;'>
</form>
Wie man sieht handelt es sich um ein einfaches Newsscript.PHP-Code:
<?php
$verbindung = mysql_connect ("localhost",
"...", "...")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db("...")
or die ("Die Datenbank existiert nicht.");
$message = $_POST["message"];
$username = $_POST["autor"];
$titel = $_POST["titel"];
$zeit = time();
$eintrag = "INSERT INTO news
(message, username, titel, zeit)
VALUES
('$message', '$username', '$titel', '$zeit')";
$eintragen = mysql_query($eintrag);
if($eintragen == true)
{
echo "<div align=\"center\" style='color: white; '><br /><br />Eintrag war erfolgreich. <br /> <br/> <a style='color: white; ' href=\"index.php\">Weiter »</a></div>";
}
else
{
echo "Fehler beim Speichern";
}
?>
Doch seltsamerweise werden immer 2 Einträge gemacht?
Woran hängt das?
Wobei ich dazu sagen muss, dass es auf einem anderen Server funktioniert.
Ich dachte schon an Unterschiedliche PHP Versionen - gibt es da einen Befehl, der bei einer anderen Version anders aussehen müsste?
Ich sehe nichts, dass eine doppelte Eintragung verursachen könnte.
Tritt dieses Problem in mehreren oder nur einem bestimmten Browser auf?
Falls letzteres zutrifft, versuche doch mal einen <button type="submit"> statt <input /> zu verwenden.
Oder aktualisierst du die Seite mit dem Eintrageskript eventuell, so dass es erneut aufgerufen wird?
So, muss jetzt leider wieder arbeiten gehen ;_;
Bist du sicher, dass das Codestueck nicht mehrfach aufgerufen wird? Und bist du auch sicher, dass die Eintraege mehrfach in der DB stehen und nicht einfach nur doppelt ausgegeben werden?
Ansonsten wuerde ich den Code uebrigens auch noch gegen SQL-Injections schuetzen.
@mitaki: Nein, sowohl IE7, als auch MF verursachen denselben Fehler
@mq: Zum testen hab ich wirklich nur diese beiden Dateien (ohne zusammenhängende Webseite) genutzt. Und ich sehe darin keinen Fehler, sodass die Datei 2x aufgerufen werden könnte.
Außerdem schau ich hauptsächlich per phpMyAdmin und der Timestamp ist exakt derselbe, demnach schließe ich einen Reload außerdem aus.
Vielleicht nützt es ja jemandem:
Funpic --> Funktioniert korrekt
Serverdrome --> Error
Der Unterschied bei einem Timestamp ist eine Sekunde, in dieser Zeit könnte das Skript zigmal gerufen werden, bevor die Sekunde zu Ende ist.Zitat:
Außerdem schau ich hauptsächlich per phpMyAdmin und der Timestamp ist exakt derselbe, demnach schließe ich einen Reload außerdem aus.
Besteht wirklich kein weiterer Unterschied zwischen deinen Dateien und dem geposteten Quelltext?
hätte auch mal frage woher das hier komt :o
sehe im Foumlar nix was denn "name" autor hat.PHP-Code:
$username = $_POST["autor"];
Sicher das dann wirklich nix dazwischen funkt? ^^
Oder mal neu uploaden,vllt einfach einmal korrigiert udn net neu geuploadet.
Ja, Autor hab ich im Postscript nicht dabei, aber das ändert nichts, denn Autor wird sowieso nicht in die Db eingetragen. zumindest laut aktuellem Script nicht.
@mitaki: Mit Reload meine ich einen manuellen Reload, der ausversehen passieren könnte.
*edit*
Nochmal der exakte Code:
So, hab nur die Zugansdaten editiert.PHP-Code:
<?php
$verbindung = mysql_connect ("localhost",
"...", "...")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db("...")
or die ("Die Datenbank existiert nicht.");
//Variabeln initalisieren
$message = $_POST["message"];
$username = $_POST["autor"];
$titel = $_POST["titel"];
$zeit = time();
// Daten eintragen
$eintrag = "INSERT INTO news
(message, titel, zeit)
VALUES
('$message', '$titel', '$zeit')";
$eintragen = mysql_query($eintrag);
if($eintragen == true)
{
echo "<div align=\"center\" style='color: white; '><br /><br />Eintrag war erfolgreich. <br /> <br/> <a style='color: white; ' href=\"index.php\">Weiter »</a></div>";
}
else
{
echo "Fehler beim Speichern";
}
?>
Exakt übernommen.HTML-Code:
<form action='news_eintrag.php' method='post'>
<br>
<div style='margin-bottom: 10px;'>
<b style='color: white;'>Titel:</b><br />
<input type='text' name='titel' style='border: 1px solid #666666; background: #EEEEEE;' />
</div>
<div style='margin-bottom: 10px;'>
<b style='color: white;'>Autor:</b><br />
</div>
<b style='color: white;'>Text:</b><br />
<textarea cols='40' rows='10' name='message' style='border: 1px solid #666666; background: #EEEEEE;'></textarea>
<br /><br /><input type='submit' value='Absenden' style='border: 1px solid #666666; background: #EEEEEE;'>
</form>
Ich weiß, manche Stellen mögen sinnlos wirken, allerdings funktioniert der Script auf exakt diese Weise nicht, und deshalb hab ich die seltsamen Stellen (die aber keine Fehler enthalten) übernommen.
Achja:
Der Server ist sehr seltsam.
Letztens habe ich eine fehlerhafte PHP Datei inkludiert, doch es kam keine Fehlermeldung, sondern es wurde einfach nichts angezeigt.
Eine ganz banale Idee:
Würde sich etwas ändern, wenn du bei der letzten IF-Abfrage den „== true“-Abschnitt weglässt (der ohnehin nicht notwendig ist)?
Ansonnsten könntest du auch mal versuchen, die Dateien auf dem fehlerhaften Server zu löschen und neu hochzuladen, wie Demonking vorschlug, eventuell hat sich beim hochladen wirklich ein Fehler eingeschlichen.
Ändert leider nichts.
Neu hochladen?
Naja ich erstelle und editiere sämtliche Dateien online, von daher kann man das vergessen.
*Edit*
Ich frag mich eigentlich, warum ich euch mit massig Quelltext zuspamme..
Allein dieses Script führt zu exakt demselben Fehler !PHP-Code:
<?php
$verbindung = mysql_connect ("localhost",
".", ".")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db(".")
or die ("Die Datenbank existiert nicht.");
$message = "hallo";
$eintrag = "INSERT INTO news
(message)
VALUES
('$message')";
$eintragen = mysql_query($eintrag);
?>
Ah, deine Administration will keine Fehlermedlungen für die Benutzer sichtbar machen.Zitat:
Der Server ist sehr seltsam.
Letztens habe ich eine fehlerhafte PHP Datei inkludiert, doch es kam keine Fehlermeldung, sondern es wurde einfach nichts angezeigt.
Füge bitte eine dieser Zeilen ganz oben in dein PHP-Skript ein:
Nachtrag:PHP-Code:
/* PHP 4 */: error_reporting(E_ALL);
/* PHP 5 */: error_reporting(E_ALL|E_STRICT);
Gut, wenn das nichts ergibt, frage bitte den Support des betroffenen Servers (sofern vorhanden).Zitat:
Allein dieses Script führt zu exakt demselben Fehler !
Also, so:
PHP-Code:
<?php
/* PHP 4 */: error_reporting(E_ALL);
/* PHP 5 */: error_reporting(E_ALL|E_STRICT);
$verbindung = mysql_connect ("localhost",
".", ".")
or die ("keine Verbindung möglich.
Benutzername oder Passwort sind falsch");
mysql_select_db(".")
or die ("Die Datenbank existiert nicht.");
$message = "hallo";
$eintrag = "INSERT INTO news
(message)
VALUES
('$message')";
$eintragen = mysql_query($eintrag);
?>
Resultat: Seite bleibt leer (weiß); Nichts wird in die DB eingetragen.
:rolleyes: Ich habe die großen PHP-Versionen absichtlich getrennt, damit diese sich nicht in die Quere kommen.Zitat:
Füge bitte eine dieser Zeilen ganz oben in dein PHP-Skript ein:
Wenn du deine PHP-Version nicht kennst kannst du sie über phpversion() ausgeben.
Mit echo vorne dran?Zitat:
lol, nicht mal das funktioniert.
Ansonnsten hat dein Provider da wohl nur eine schlechte PHP-Immitation :D
Naja, da das Eintragen ja funktioniert hilft wohl auch kein (echo) mysql_error() bzw. mysql_errno().
Sorry, mehr fällt mir wirklich nicht ein.
Hat auch keinen wirklichen Sinn mehr.
Hab dem Besitzer empfohlen mal schnellstens den Webspaceanbieter zu wechseln.
Trotzdem danke an alle, vorallem an mitaki ;)
Hi Leute,
wie kann ich fuer meine MySQL Querys eine Log Datei Schreiben? Am besten in einer Funktion. Ich Stelle mir das so vor:
So stell ich mir das vor aber irgend wie geht das nicht KP wieso. =)PHP-Code:
$query = "SELECT ... WEHRE ...";
$sql = mysql_query($query) OR mysqlErrorLog();
Kennt jemand noch seiten wo ich Allgemeines zum Lesen ueber LogDatein mit PHP und MySQL finde?
Zunächst würde ich den Aufruf der Logfunktion anders aufbauen.
Dass es nicht funktioniert liegt daran, dass PHP (bzw. die MySQL-API) keine Funktion namens mysqlErrorLog() kennt. Diese müsstest du zunächst selbst erstellen.PHP-Code:
$sql = mysql_query( '[...]' );
if ( !$sql ) mysqlErrorLog();
In dieser Funktion möchtest du sicher mit Textdateien arbeiten. Beispielsweise deren bisherigen Inhalt auslesen, oben neuen Inhalt hinzufügen und das ganze dann wieder in die Textdatei speichern.PHP-Code:
function mysqlErrorLog() {
/* Hier steht, was die Funktion machen soll. */
}
Leider finde ich gerade keine guten und aktuellen Tutorials für das Arbeiten mit Textdateien :/
Eventuell dieses, aber bitte nicht die short-tags übernehmen ;)
Für die Fehlerinformationen stehen PHP die Funktionen mysql_error() und mysql_errno() zur Verfügung.
Das ist mir bewusst, das ist ja auch eine eigene Funktion und die wollte ich ja nun mit mysql_query() OR mysqlErrorLog() aufrufen. Ansich Funktionierte ja auch die Funktion nur halt nicht in Verbindung mit OR...Zitat:
Dass es nicht funktioniert liegt daran, dass PHP (bzw. die MySQL-API) keine Funktion namens mysqlErrorLog() kennt. Diese müsstest du zunächst selbst erstellen.
...
Ah ich seh grad ich habe noch das die() vergessen. =)
So sollts eigentlich aussehen.PHP-Code:
$query = "SELECT ... WEHRE ...";
$sql = mysql_query($query) OR die(mysqlErrorLog());
# und dann noch die If abfragen. ;)