Apache - MySql - PHP - phpMyAdmin

Multimedia pur!
Benutzeravatar
max_power
Zombiepirat
Zombiepirat
Beiträge: 10065
Registriert: 16.04.2002, 20:30
Wohnort: Uppsala
Kontaktdaten:

Beitrag von max_power »

Ich habe ganz stumpf den Text in der DB verglichen, da musst du höchstens mit Anführungs- und Sonderzeichen aufpassen. Also wie du nur mit dem Text statt ID. Ist zwar vermutlich total ineffizient, aber bei kleinen Projekten sicherlich in Ordnung.
„Es müsste immer Musik da sein, bei allem was du machst. Und wenn's so richtig Scheiße ist, dann ist wenigstens noch die Musik da. Und an der Stelle, wo's am allerschönsten ist, da müsste die Platte springen und du hörst immer nur diesen einen Moment.“ (Floyd, Absolute Giganten)
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Stimmt. Das könnt ich auch machen.
Benutzeravatar
Persisteus
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 20.06.2002, 16:43
Wohnort: Vluyn
Kontaktdaten:

Beitrag von Persisteus »

Warum speicherst du die checkID eigentlich in der Tabelle mit ab? Wäre es nicht einfacher, einen versteckten Input "saved" = 0 nach dem Abspeichern auf 1 zu setzen, und dessen Inhalt dann oben im Script abzufragen?
$sqlCheck = @mysql_query("SELECT id FROM formSend WHERE checkID = '".$_POST['checkID']."'");
Dieser SQL-Ausdruck wird nie ein Ergebnis zurückliefern, weil die Tabelle nachrichten heisst, und nicht formSend.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Ups. Stimmt ja. Hab ich total übersehen.

Änder aber leider am Problem auch ncihts. Funzt nach wie vor nicht. Ich werd wahrscheinlich wirklich den kompletten Text vergleichen müssen.
Ist aber aus zwei Gründen unschön:

- was, wenn ich rein zufällig mal genau das gleiche abspeichern will
- für die Performance ist das wohl auch nicht gerade das beste (owbohl die Datenmengen jetzt auch nicht unheimlich viel sein werden.)
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Persisteus hat geschrieben:Warum speicherst du die checkID eigentlich in der Tabelle mit ab? Wäre es nicht einfacher, einen versteckten Input "saved" = 0 nach dem Abspeichern auf 1 zu setzen, und dessen Inhalt dann oben im Script abzufragen?
Fänd ich ja an sich auch besser, aber das Problem ist ja, daß beim Aktualisieren der Seite der Button immer als gedrückt interpretiert wird.

Ich hätte also keine Bedinung, an hand derer ich die Variable dann wieder auf null setzen kann.

EDIT: Sorry für den Doppelpost.
TentakelTommy
Tastatursteuerer
Tastatursteuerer
Beiträge: 736
Registriert: 26.12.2005, 12:33
Wohnort: Villa des Tentakels
Kontaktdaten:

Beitrag von TentakelTommy »

Der Button wird keineswegs "als gedrückt interpretiert":
Du feuerst die Seite ab, die Daten werden eingetragen.
Wenn du das ganze jetzt nochmal machst, überträgt er die Daten halt erneut. Das ist so gewollt, mit einer eigenwilligen Interpretation hat das nix zu tun ;)

Das umgehst du, indem du nach dem Eintrag einfach ein neues (leeres) Formular ausgibst, meinetwegen zur Kontrolle nochmal den eingegebe nen Text als "echten" Text außerhalb des Input-Feldes.

Schau dir halt ein minimales PHP-Gästebuchskript deiner Wahl an, die können das eigentlich alle. Der von dir beschriebene Effekt tritt eigentlich nur auf wenn man sehr schnell (d.h. bevor die Antwort kommt) das Formular zweimal abschickt. Das sollte dann dein ID-Check unterbinden können.
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Ich mach es jetzt ganz anders und öffne einfach ein anderes php-Dokument.
Dann hab ich dieses ganze Theater nicht.

EDIT:

Code: Alles auswählen

<?php
if ( isset($_POST['Btn_save']) )
{
		$db_host = "localhost";         // MySQL Hostname
        $db_name = "news";         		// MySQL Datenbankname
        $db_user = "datenbankuser";     // MySQL Benutzername
        $db_pass = "";            	    // MySQL Passwort
		
		$link = mysql_connect ($db_host,$db_user,$db_pass ) // Verbindung zum Datenbankserver aufbauen 
           or die ("Verbindung fehlgeschlagen!");  // wenn fehlgeschlagen 
		$db = mysql_select_db($db_name,$link) // Datenbank wählen 
           or die ("Verbindung fehlgeschlagen"); // wenn fehlgeschlagen

	        $neuenachricht=$_POST['Text'];
			$datum = date("Y.m.d",time());
			mysql_query("insert into nachrichten (newseintrag, datum) values ('$neuenachricht', '$datum')");
}
?>

<html>
   <form name="Nachrichten" action="ok.php" method="post">
	<table align="center" border=1>
		<tr><td><textarea name="Text" rows="6" style="width:500px;""></textarea></td></tr>
		<tr><td><input type="submit" name="Btn_save" value="Neuen Beitrag"></td></tr>
	</table>
   </form>
</html>
Hab es jetzt so weit verschlankt.
Es wird also die ok.php aufgerufen, wenn das Formular abgeschickt wird. Leider trägt er jetzt gar nichts mehr in die Datenbank ein. Oder muß jetzt das eigentlich Updaten der DB in dem aufgerufenen php-dokument passiern, also in ok.php?

EDIT: Hab mir die Frage gerade selber beantwortet. Der DB-Code muß also in die ok.php.

Damit hab ich dann allerdings wieder den selben Käse wie vorher. Ich drück fröhlich F5 und erfügt jedes mal nen neuen Datensatz ein.
Ich glaub, ich geb es auf.

EDIT...mal wieder

Hab es jetzt folgendermaßen gemacht:

Code: Alles auswählen

<?php
if (($_POST['Btn_save'])!="" )
{
		$db_host = "localhost";         // MySQL Hostname
        $db_name = "news";         		// MySQL Datenbankname
        $db_user = "datenbankuser";     // MySQL Benutzername
        $db_pass = "";            	    // MySQL Passwort
		
		$link = mysql_connect ($db_host,$db_user,$db_pass ) // Verbindung zum Datenbankserver aufbauen 
           or die ("Verbindung fehlgeschlagen!");  // wenn fehlgeschlagen 
		$db = mysql_select_db($db_name,$link) // Datenbank wählen 
           or die ("Verbindung fehlgeschlagen"); // wenn fehlgeschlagen

	        $neuenachricht=$_POST['Text'];
			$datum = date("Y.m.d",time());
			mysql_query("insert into nachrichten (newseintrag, datum) values ('$neuenachricht', '$datum')");
			
			header ("Location: ok.php");  
			exit();  
}
?>
<html>
   <form name="Nachrichten" action="<?php $PHP_SELF ?>" method="post">
	<table align="center" border=1>
		<tr><td><textarea name="Text" rows="6" style="width:500px;""></textarea></td></tr>
		<tr><td><input type="submit" name="Btn_save" value="Neuen Beitrag"></td></tr>
	</table>
   </form>
</html>
Funzt astrein.
in der ok.php steht folgendes drin.

Code: Alles auswählen

<?PHP
echo "Datenbank aktualisiert";
$startzeit=time()+3;
while ($startzeit<time())
	{
	//tu nichts
	}
	header ("Location: news.php");  
	exit();  
?>
Da soll also nichts weiter passieren, außer daß dem User angezeigt wird: "Datenbank aktualisiert". Anshcließend soll er einfach wieder auf die andere Seite zurückgelinkt werden.

Allerdings krieg ich diesmal den Fehler, daß der Header bereits gesendet wurde...(was immer das auch heißen mag.)
Hat jemand ne Idee?
Benutzeravatar
Persisteus
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 20.06.2002, 16:43
Wohnort: Vluyn
Kontaktdaten:

Beitrag von Persisteus »

Der Header muss ausgegeben werden, BEVOR du irgendetwas anderes ausgibst!
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Ist ja blöd.

Habs jetzt anders gemacht. In der ok.php wird jetzt direkt wieder zur news.php zurückgesprungen. Damit vermeide ich die doppelten Einträge und optisch fällt es überhaupt nicht auf. Man hat den Eindruck, auf der Ur-Seite zu bleiben.
Gibt es eigentlich eine Funktion, die mir die letzte besuchte Seite ausgibt.

Also quasi news.php, wenn ich zu ok.php gesprungen bin? Dann könnte ich den Linkaufruf in der ok.php dynamischer gestalten und die auch noch für andere Zwecke benutzen.
TentakelTommy
Tastatursteuerer
Tastatursteuerer
Beiträge: 736
Registriert: 26.12.2005, 12:33
Wohnort: Villa des Tentakels
Kontaktdaten:

Beitrag von TentakelTommy »

Referrer?
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Kannst Du das vielleicht in einem Beispiel darstellen?
TentakelTommy
Tastatursteuerer
Tastatursteuerer
Beiträge: 736
Registriert: 26.12.2005, 12:33
Wohnort: Villa des Tentakels
Kontaktdaten:

Beitrag von TentakelTommy »

$referrer="ok.php";
if (referrer != "") {$location=$referrer}
header ("Location: $location");


Den Rest kannst du ja selbst ;)
Und nein, könnte man nicht drauf kommen, sind ja nur 1,89 Mio Hits
Benutzeravatar
Persisteus
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 177
Registriert: 20.06.2002, 16:43
Wohnort: Vluyn
Kontaktdaten:

Beitrag von Persisteus »

@TentakelTommy:
Dein Script löst das Problem von Fightmeyer nicht (und es ist sowieso sinnlos, einer Variablen einen Wert zuzuweisen und ihn direkt danach wieder abzufragen).

@Fightmeyer:
Na ja, die Variable $_SERVER['HTTP_REFERER'] ist nicht unbedingt verlässlich. Siehe hier: http://de.php.net/manual/de/reserved.va ... les.server
Dann könnte ich den Linkaufruf in der ok.php dynamischer gestalten und die auch noch für andere Zwecke benutzen.
Es empfiehlt sich ein Übergabeparameter, z.B. ok.php?refer=news
TentakelTommy
Tastatursteuerer
Tastatursteuerer
Beiträge: 736
Registriert: 26.12.2005, 12:33
Wohnort: Villa des Tentakels
Kontaktdaten:

Beitrag von TentakelTommy »

jein, ist es nicht. es fehlt nur ein Zeichen...
War so gemeint, daß der Referrer ja gut und gerne auch leer sein kann und er daher einen default braucht (oder ein else)

Wobei ich ihm ja shconmal empfohlen hatte, sich wenigstens mit den Grundlagen anzuvertrauen :)
Benutzeravatar
Fightmeyer
Riesiger Roboteraffe
Riesiger Roboteraffe
Beiträge: 7309
Registriert: 16.12.2004, 22:51
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Fightmeyer »

Kann mal bitte jemand über folgende zeile Code drüberschauen?!

Code: Alles auswählen

$string="Update nachrichten set ueberschrift='$_POST[ueberschrift]', nachricht='$_POST[nachricht]' where id=$_GET[newsid]";
echo $string;
mysql_query($string);
Als Ergenis liefert er das hier:

Update nachrichten set ueberschrift='Eine News von heute_editiert', nachricht='Das ist ein Test und so weiter und so fort...editiert' where id=11

Was ja an sich auch richtig ist.
Nur leider wird der Eintrag in der Datenbank nicht geupdated. Woran könnte das liegen?

(Diese ganze Kommata, Hochkommata, Apostrophe und Anführungszeichen machen mich fertig...:-) Die schwierigsten Zeilen Code sind für mich die SQL Abfragen und die Echo Anweisungen... :wink: )
Antworten