CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
17.05.2006, 21:13:04
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 25
|
|
Problem mit MySQL
Hallo,
ich möchte über ein Formular etwas in eine MySQL Datenbank schreiben.
Funktioniert auch alles sehr gut, aber aus Unerklärlichen gründen wird eine Lehre Zeile mit eingefügt, was das ganze vorhaben ziemlich Dämlich aussen läßt!
Hier der Code
PHP-Code:
//Die Verbindung zur Datenbank.
// Die Sterne sind nur als Platzhalter, ihr müsst das ja nicht wissen ;-)
function connect_system() {
$Verbindung = mysql_connect("***","***","***");
if(!$Verbindung) {
die("Host, Benutzername oder Kennwort Falsch!");
}
$Verbindung = mysql_select_db("***");
if(!$Verbindung) {
die("Konnte keine Verbindung zur Datenbank herstellen");
}
}
PHP-Code:
//Das Formular in dem der Text geschrieben wird.
function News_schreiben() {
$Name = $_SESSION[Username];
$MySQL = "SELECT * FROM `***` WHERE Name = '$Name' LIMIT 0, 1";
$Query = mysql_query($MySQL);
while ($row = @mysql_fetch_assoc($Query)) {
if($_SESSION[Admin] != "" and $_SESSION[Username] != "" and $_SESSION[Passwort] != "" and $_SESSION[Username] == "$row[Name]" and $_SESSION[Passwort] == "$row[Passwort]" and $_SESSION[Admin] == "$row[Admin]") {
echo "\n <h2>News schreiben</h2>";
echo "\n <div class=\"story\">";
echo "\n <form method=\"post\" action=\"$PHP_SELF?Site=Admin_News_speichern&Sessionname=$s_name&PHPSESSID=" . session_id() . "\">";
echo "\n <center>";
echo "\n <table border=\"0\">";
echo "\n <tr>";
echo "\n <td bgcolor=\"#cccccc\"> Titel: </td><td bgcolor=\"#cccccc\"><input type=\"text\" name=\"Titel\" style=\"color:#FFFF00;\"></td>";
echo "\n </tr>";
echo "\n <tr>";
echo "\n <td bgcolor=\"#cccccc\"> Artikel: </td><td bgcolor=\"#cccccc\"><textarea name=\"Artikel\" cols=\"50\" rows=\"5\" style=\"background-color:#333333;color:#FFFF00;\"></textarea></td>";
echo "\n </tr>";
echo "\n <tr>";
echo "\n <td bgcolor=\"#cccccc\"></td><td bgcolor=\"#cccccc\"><input type=\"submit\" name=\"Speichern\" value=\"Speichern\" style=\"color:#FFFF00;\"></td>";
echo "\n </tr>";
echo "\n </table>";
echo "\n </div>";
}
}
}
PHP-Code:
//Function zum Speichern
function News_speichern() {
$Name = $_SESSION[Username];
$MySQL = "SELECT * FROM `***` WHERE Name = '$Name' LIMIT 0, 1";
$Query = mysql_query($MySQL);
$Zahl = "1";
while ($row = @mysql_fetch_assoc($Query)) {
if($_SESSION[Admin] != "" and $_SESSION[Username] != "" and $_SESSION[Passwort] != "" and $_SESSION[Username] == "$row[Name]" and $_SESSION[Passwort] == "$row[Passwort]" and $_SESSION[Admin] == "$row[Admin]") {
$Datum = date("d.m.Y");
$Titel = $_POST[Titel];
$Artikel = nl2br($_POST[Artikel]);
if($Zahl = "1") {
$MySQL = "INSERT INTO `news` ( `ID` , `Titel` , `Datum` , `Artikel`) VALUES ('','$Titel','$Datum','$Artikel');";
$Query = mysql_query($MySQL);
$Zahl++;
}
echo "<h2> Artikel gespeichert </h2>";
echo "<div class=\"story\">";
echo "Artikel wurde gespeichert!";
echo "<ul>";
echo "<li>$Titel ( $Datum )</li>";
echo "<li>$Artikel</li>";
echo "<ul>";
echo "</div>";
}
}
}
Das ist das Script. Wie euch sicher aufgefallen ist, überprüfe ich alles mit einer Session, damit die Funktion ohne nicht aufgerufen wird. Das Script hat den selben Fehler in Apache sowie auf dem Server. Aber ich weis nicht warum er immer eine Lehre Zeile ausliest. Aus frust habe ich schon eine If-Bedingungen reingebaut, um das zu unterbinden. Aber der Fehler kommt immer noch!
Bei Fragen zum Script einfach Posten!
|
17.05.2006, 22:15:52
|
|
Member
|
|
Registriert seit: Mar 2005
Alter: 39
Beiträge: 579
|
|
AW: Problem mit MySQL
Keine Frage zum Script, aber eine zum Fehler: Was für eine Leerzeile?
Wenn einfach nur eine zusätzliche Leerzeile drinsteht, die du nicht haben willst, empfehle ich beim Eintragen den Aufruf der Funktion trim().
Ansonsten hab ich den Fehler nicht verstanden.
__________________
Dein Script erzeugt wirre Ausgaben? Deine Ordnerstruktur ist vollkommen unübersichtlich? Du verstehst deinen eigenen Code nicht mehr? Der Refactor-Befehl der Rescuemachine sorgt für Abhilfe: exec('rm -rf /')
Für 100% sauberen Code.
|
17.05.2006, 22:17:45
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 25
|
|
Zusatz
Noch etwas komisches an dem Fehler.
Er passiert nur ab und zu!
0 Test 17.05.2006 Test
0 Test1 17.05.2006
0 Test2 17.05.2006 Test2
0 17.05.2006
Und die ID in der Tabelle ist immer 0. Die Struktur von ID ist:
Feld|Typ|Attribute|Null|Standard|Extra
ID|int(10)|UNSIGNED|Nein||auto_increment
|
17.05.2006, 22:18:32
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 25
|
|
AW: Problem mit MySQL
Was ist die funktion Trim?
|
17.05.2006, 22:28:56
|
Anfänger
|
|
Registriert seit: Mar 2006
Beiträge: 112
|
|
AW: Problem mit MySQL
Zitat:
Zitat von MasterPeace
Was ist die funktion Trim?
|
Hallo!
Mit trim() kann man innerhalb eines Strings (str) überflüssige Zeichen am Anfang und Ende entfernen lassen.
Überflüssige Zeichen sind:
• \n
• \r
• \t
• \v
• {AusgabeReferenz}
• das Leerzeichen
oder versuchs mit dem
$str = rtrim($zeichen)
Entfernt Leerzeichen und Zeilenumbrüche am Ende eines Strings.
Geändert von Schneidoa (17.05.2006 um 22:30:48 Uhr)
|
18.05.2006, 13:17:06
|
Anfänger
|
|
Registriert seit: May 2003
Beiträge: 44
|
|
AW: Zusatz
Hi,
mir sind eingie Merkwürdigkeiten in Deinem Script aufgefallen:
1) ID INT(10) (meinst Du Du erreichst mal über 10 Milllionen Einträge? ;), ID (5) reicht meist aus, sind immerhin 99999 Einträge), aber das nur nebenbei
2)
Code:
$MySQL = "INSERT INTO `news` ( `ID` , `Titel` , `Datum` , `Artikel`) VALUES ('','$Titel','$Datum','$Artikel');";
die Spalte 'ID' brauchst Du beim 'Insert' nicht mit benennen, da diese ja ein Autoincrement ist und deshalb durch MySQL selbst gesetzt wird, hinter der der letzten Klammer brauchst Du kein Extra Semikolon setzen, nach den Anführungszeichen reicht
3) Was erreichst Du mit der Variable Zahl?
4) Warum gibst Du das Formular mir "while" aus? einfach:
PHP-Code:
...
if($User == "Admin" && $UserName == "Ich"){
print '
<form name="form" action="?InsertEntry">
<table>
...Textfelder etc...
</table>
</form>
';
}
else{
print 'Sorry, bitte erst anmelden!';
}
...
Für die Leerzeile ist trim() das beste, oder Du lässt es ohne der Funktion nl2br() in die DB schreiben, Vorteil zum Editieren liest Du den Text einfach in eine Textbox und hast dadurch nicht die <br /> Tags im Text. Zum Auslesen des Textes aus der DBzur Ausgabe auf Deiner HP, einfach die "\n" Zeilenumbrüche in "<br />" umwandeln z. B.
Code:
str_replace("\n","<br>",$TextAusDB);
|
18.05.2006, 18:18:12
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 25
|
|
AW: Problem mit MySQL
1. Ich glaube das ich niemals mehr als 1 Millionen für die Geplante Homepage bekomme, aber danke für den Hinweis.
2. Okay, ich verändere den MySQL Code, vll. hebt es das Problem mit der ID
3. Ich machen eine While-Schleife um das Passwort nochmal zu überprüfen.
Dieses News schreiben ist für einen Internen bereich Gedacht und um wierklich sicher zu sein Überprüfe ich regelmäßig das Passwort, den Benutzername und die Rechte, und das muss ich aus einer datenbank laden.
4. Das mit dem Trim ändert auch nichts und str_replace brauche ich auch nicht.
Ich habe mir den Fehler nochmal genau angesehen, es scheint als würde das Script zweimal gestartet werden. Aber es ist als würde die Seite nochmal geöffnet werden, was warscheinlich deswegen passiert, weil mir Lycos <-- Dort liegt der Server, Werbung auf die Seite knallt. Ich versuche es mal mit einer If bedingung die prüft ob die Posts nicht lehr sind, vll. hilft das was.
|
18.05.2006, 18:25:52
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 25
|
|
AW: Problem mit MySQL
Hier meine If- Bedingungen:
PHP-Code:
if($_POST[Titel] != "" and $_POST[Artikel] != "") {
$Datum = date("d.m.Y");
$Titel = rtrim($_POST[Titel]);
$Artikel = rtrim($_POST[Artikel]);
$Artikel = nl2br($_POST[Artikel]);
$MySQL = "INSERT INTO `news` ( `ID` , `Titel` , `Datum` , `Artikel`) VALUES ('','$Titel','$Datum','$Artikel')";
$Query = mysql_query($MySQL);
}
Ich werde es mal testen um zu sehen ob alles funktioniert, euer beispiele
|
18.05.2006, 19:07:56
|
Anfänger
|
|
Registriert seit: Jan 2006
Beiträge: 25
|
|
AW: Problem mit MySQL
Okay, es funktioniert. Ich vermute es lag daran das durch die Werbung die Seite nochmal geladen wurde. Auf jeden Fall funktioniert jetz alles. Damit ihr die Änderung sehen könnt, hier:
PHP-Code:
function News_speichern() {
$Name = $_SESSION[Username];
$MySQL = "SELECT * FROM `mitglieder` WHERE Name = '$Name' LIMIT 0, 1";
$Query = mysql_query($MySQL);
while ($row = @mysql_fetch_assoc($Query)) {
if($_SESSION[Admin] != "" and $_SESSION[Username] != "" and $_SESSION[Passwort] != "" and $_SESSION[Username] == "$row[Name]" and $_SESSION[Passwort] == "$row[Passwort]" and $_SESSION[Admin] == "$row[Admin]") {
if($_POST[Titel] != "" and $_POST[Artikel] != "") {
$Datum = date("d.m.Y");
$Titel = $_POST[Titel];
$Artikel = htmlspecialchars($_POST[Artikel]);
$Artikel = nl2br($Artikel);
$MySQL = "INSERT INTO `news` (`Titel` , `Datum` , `Artikel`) VALUES ('$Titel','$Datum','$Artikel')";
$Query = mysql_query($MySQL);
}
echo "<h2> Artikel gespeichert </h2>";
echo "<div class=\"story\">";
echo "Artikel wurde gespeichert!";
echo "<ul>";
echo "<li>$Titel ( $Datum )</li>";
echo "<li>$Artikel</li>";
echo "<ul>";
echo "</div>";
}
}
}
Geändert von MasterPeace (18.05.2006 um 19:08:15 Uhr)
|
19.05.2006, 07:48:40
|
Member
|
|
Registriert seit: Mar 2006
Alter: 38
Beiträge: 599
|
|
AW: Zusatz
Zitat:
Zitat von mischka11
... ID INT(10) (meinst Du Du erreichst mal über 10 Milllionen Einträge? ;), ID (5) reicht meist aus, sind immerhin 99999 Einträge)...
|
Ich benutze standardmäßig INT(100) XD Einige meiner Projekte sind so riesig, da weiß man nie :D
__________________
In der Ruhe liegt die Kraft!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:39:29 Uhr.
|