Formularverarbeitung - wie am besten?

Ich tippe darauf, dass die anderen beiden nicht funktionieren wegen irgendwelcher Schreibfehler.
Die Syntax scheint nämlich zu stimmen.
Du musst unbedingt darauf achten, keine Tippfehler in solchen Sachen zu haben:
Code:
(`befinden_id`, `datum`, `beschreibun`)
Dies zum Beispiel soll doch sicher "beschreibung" heissen oder?

Deswegen gehe bitte den Code Wort für Wort durch und prüfe, ob die Bezeichnungen auch wirklich alle korrekt sind.

Um eine Erfolgsmeldung ausgeben zu lassen, reicht es dem If-Block noch einen Else-Block folgen zu lassen:
PHP:
if( !mysql_query( $sql ) )
{
    echo mysql_error();
}
else
{
    echo 'Erfolgreich';
}

Eine Weiterleitung kannst du mit der header()-Funktion erreichen.

Beim Einsatz dieser Funktion musst du darauf achten, vor dem aufruf von header() keine Ausgabe an den Browser zu schicken.

Mehr dazu findest du in "Häufig auftretende Fehler".
 
Zuletzt bearbeitet:
Guten Abend,

ja - habe die Schreibweise im Original richtig. Es geht ja darum, wie ich die einzelnen mit einander verbinde. Also so, wie ich es oben gemacht habe?

Wenn ich bei der header-Funktion keine Ausgabe haben darf, dann kann ich ja nicht nach dem MySql speichern auf eine Seite weiterleiten, oder?

LG und vielen Dank
Muckel

Ausprobiert:
Habe es eben ausprobiert, alles zu speichern. Dabei habe ich folgende Meldung erhalten:
Schmerz-Werte erfolgreich übertragen.Duplicate entry '2008' for key 1Duplicate entry '2008' for key 1

Sprich das erste wurde wohl richtig gespeichert. In der Tabelle medikamente und allgemein hat es wohl nicht geklappt. Hier ist der php-Code, mit dem ich es versucht habe:
PHP:
<?php 
$link = mysql_connect('localhost', 'user', 'passwort') or die(mysql_error()); //Verbindung aufbauen
mysql_select_db("Doku"); //Datenbank auswaehlen

$sql = 'INSERT INTO `schmerz` (`schmerz_id`, `datum`, `morgens`, `mittags`, `abends`, `tiefst`, `mittel`, `hoechst`) 
    VALUES(
    NOW(),
    NOW(),
        "'.$_POST['morgens'].'",
        "'.$_POST['mittags'].'",
        "'.$_POST['abends'].'",
        4,
        5,
        6
        )';if( !mysql_query( $sql ) ) {echo mysql_error();}  
				else { echo 'Schmerz-Werte erfolgreich &uuml;bertragen.'; }  
		
'INSERT INTO `medikamente` (`medi_id`, `datum`, `Mmedikament`, `Mmorgens`, `Mmittags`, `Mabends`, `Mnachts`, `Mbedarf`) 
    VALUES(
    NOW(),
    NOW(),
        "'.$_POST['Mmedikament'].'"
		"'.$_POST['Mmorgens'].'",
        "'.$_POST['Mmittags'].'",
        "'.$_POST['Mabends'].'",
        "'.$_POST['Mnachts'].'",
        "'.$_POST['Mbedarf'].'"
        )';if( !mysql_query( $sql ) ) {echo mysql_error();}  
				else { echo 'Medikament-Werte erfolgreich &uuml;bertragen.'; }  

'INSERT INTO `allgemein` (`befinden_id`, `datum`, `beschreibung`) 
    VALUES(
    NOW(),
    NOW(),
        "'.$_POST['Abefinden'].'"
        )';if( !mysql_query( $sql ) ) {echo mysql_error();}  
				else { echo 'Allgemeinbefinden erfolgreich &uuml;bertragen.'; }  

mysql_close ($link); ?>
 
Zuletzt bearbeitet:
Ich weis immernoch nicht so genau was du mit was verbinden willst. :(

PHP Script darfst du durchaus vorher ausführen. Es darf nur keine Ausgabe stattfinden vorher, wie zum Beispiel ein "echo".

Hier, das sollte funktionieren:
PHP:
<?php 
$link = mysql_connect('localhost', 'user', 'passwort') or die(mysql_error()); //Verbindung aufbauen
mysql_select_db("Doku"); //Datenbank auswaehlen

$sql = 'INSERT INTO `schmerz` (`datum`, `morgens`, `mittags`, `abends`, `tiefst`, `mittel`, `hoechst`) 
    VALUES(
    NOW(),
        "'.$_POST['morgens'].'",
        "'.$_POST['mittags'].'",
        "'.$_POST['abends'].'",
        4,
        5,
        6
        )';if( !mysql_query( $sql ) ) {echo mysql_error();}  
                else { echo 'Schmerz-Werte erfolgreich &uuml;bertragen.'; }  
        
$sql2 = 'INSERT INTO `medikamente` (`datum`, `Mmedikament`, `Mmorgens`, `Mmittags`, `Mabends`, `Mnachts`, `Mbedarf`) 
    VALUES(
    NOW(),
        "'.$_POST['Mmedikament'].'"
        "'.$_POST['Mmorgens'].'",
        "'.$_POST['Mmittags'].'",
        "'.$_POST['Mabends'].'",
        "'.$_POST['Mnachts'].'",
        "'.$_POST['Mbedarf'].'"
        )';if( !mysql_query( $sql2 ) ) {echo mysql_error();}  
                else { echo 'Medikament-Werte erfolgreich &uuml;bertragen.'; }  

$sql3 = 'INSERT INTO `allgemein` (`datum`, `beschreibung`) 
    VALUES(
    NOW(),
        "'.$_POST['Abefinden'].'"
        )';if( !mysql_query( $sql3 ) ) {echo mysql_error();}  
                else { echo 'Allgemeinbefinden erfolgreich &uuml;bertragen.'; }  

mysql_close ($link); ?>

Du darfst nicht einfach ein Codebeispiel von mir dreimal 1:1 kopieren und erwarten das dann alles klappt.
Schau dir die Veränderungen, die ich vorgenommen habe genau an. Du willst ja auch was lernen dabei, oder?

Und wenns nicht funktioniert, bitte die Fehlermeldungen dazu posten.
 
Das verstehe ich dann leider nicht so ganz. Was ich möchte ist, dass wenn alles Ordnungsgemäß gespeichert wurde, dass es z.B. auf index.php?site=schmerzen weiter geht. Und in dem MySql habe ich ja auch echo Befehl mit drinnen.

Aber erstmal habe ich ja noch ein Problem bei dem abspeichern mit den Werten. Denn es klappt bei den zweiten INSERT INTO leider nicht.

LG und vielen Dank
Muckel
 
Guten Abend Loomes,

natürlich will ich nicht 1 zu 1 kopieren und etwas lernen. Doch ich hatte es am Anfang auch so probiert, dass ich sql 2 und 3 genommen hatte, was leider nicht klappte. Deines scheint nun zu funktionieren, zumindest zu 2/3. Denn für den Mittleren Teil bekomme ich diese Fehlermeldung:
Column count doesn't match value count at row 1
Bei den Schmerzen und dem Allgemeinbefinden hat es geklappt:
Schmerz-Werte erfolgreich übertragen. Allgemeinbefinden erfolgreich übertragen.

Nur ehrlich gesagt, weiß ich noch nicht, wo der Fehler liegen soll/könnte. Fange erst an, mit php/mysql zu arbeiten und habe kein Buch oder ähnliches. Mit meinem schlechten englisch kann ich der Meldung nur entnehmen, dass etwas nicht gezählt werden konnte. Doch das ergibt irgendwie keinen Sinn.

PHP:
$sql = 'INSERT INTO `schmerz` (`datum`, `morgens`, `mittags`, `abends`, `tiefst`, `mittel`, `hoechst`) 
    VALUES(
    NOW(),
        "'.$_POST['morgens'].'",
        "'.$_POST['mittags'].'",
        "'.$_POST['abends'].'",
        4,
        5,
        6
        )';if( !mysql_query( $sql ) ) {echo mysql_error();}  
                else { echo '<p>Schmerz-Werte erfolgreich &uuml;bertragen.</p>'; }  
        
$sql2 = 'INSERT INTO `medikamente` (`datum`, `angesetzt`, `medikament`, `morgens`, `mittags`, `abends`, `nachts`, `bedarf`, `abgesetzt`) 
    VALUES(
    NOW(),
	0,
        "'.$_POST['Mmedikament'].'"
        "'.$_POST['Mmorgens'].'",
        "'.$_POST['Mmittags'].'",
        "'.$_POST['Mabends'].'",
        "'.$_POST['Mnachts'].'",
        "'.$_POST['Mbedarf'].'",
	1
        )';if( !mysql_query( $sql2 ) ) {echo mysql_error();}  
                else { echo '<p>Medikament-Werte erfolgreich &uuml;bertragen.</p>'; }  

$sql3 = 'INSERT INTO `allgemein` (`datum`, `beschreibung`) 
    VALUES(
    NOW(),
        "'.$_POST['Abefinden'].'"
        )';if( !mysql_query( $sql3 ) ) {echo mysql_error();}  
                else { echo '<p>Allgemeinbefinden erfolgreich &uuml;bertragen.</p>'; }

Nochmal vielen Dank für eure Geduld und Hilfe!
Lieben Gruß
Muckel
 
Da fehlt ein Komma:
Code:
        "'.$_POST['Mmedikament'].'"
Richtig wäre:
Code:
        "'.$_POST['Mmedikament'].'",

Das meinte ich mit kleinen Schreibfehlern. :)

/edit:
Mit Value Count ist folgendes gemeint:
Code:
    NOW(),
    0,
        "'.$_POST['Mmedikament'].'"
        "'.$_POST['Mmorgens'].'",
        "'.$_POST['Mmittags'].'",
        "'.$_POST['Mabends'].'",
        "'.$_POST['Mnachts'].'",
        "'.$_POST['Mbedarf'].'",
    1
da das Komma fehlte, wurden hier 8 gezählt.
Somit hat die Anzahl der Spalten (9) nicht mit der Anzahl der Inhalte zusammengepasst (8).
 
Zuletzt bearbeitet:
Danke Loomes,

habs drei/viermal gelesen und nicht gefunden. Liegt wohl an meinen Medikamenten :(

Lieben Gruß und nochmals vielen Dank
Muckel
 
Guten Tag zusammen,

ich habe es jetzt auch geschafft, die Werte aus der Datenbank wieder aus zu geben:
PHP:
<?php 
$link = mysql_connect('localhost', 'user', 'passwort') or die(mysql_error());

mysql_select_db("Doku");
// Datensatz auslesen:

$sql = 'SELECT `datum`, `morgens`, `mittags`, `abends`, `tiefst`, `mittel`, `hoechst` FROM `schmerz`';
echo("
<h1>Schmerzdokumentation</h1>
<p>Hier werden nun deine Schmerzwerte in einer Tabelle angeziegt.</p>
<table border=\"1\" width=\"60%\">
		<tr  align=\"center\"><th>Morgens</th>
		<th>Mittags</th>
		<th>Abends</th>
		<th>H&ouml;chstwert</th>
		<th>Mittelwert</th>
		<th>Tiefstwert</th></tr>");
$result = mysql_query($sql); while($row = mysql_fetch_array($result)) {

echo("<tr><td colspan=\"6\"  align=\"center\">".$row['datum']."</td></tr>");
echo("<tr><td>".$row['morgens']."</td>");
echo("<td>".$row['mittags']."</td>");
echo("<td>".$row['abends']."</td>");
echo("<td>".$row['tiefst']."</td>");
echo("<td>".$row['mittel']."</td>");
echo("<td>".$row['hoechst']."</td></tr>");
} 
echo("</table>"); ?>

Doch dabei gibt es noch zwei "Fehler" bzw. Dinge, die ich anders haben möchte. Einmal ist es so, dass der neuste Wert unten steht, das sollte aber oben sein. Desweiteren ist das Datums Format in der Ausgabe so:
2008-11-17 18:19:58
Kann ich jenes so formatieren, dass man dieses erhält: Wochentag, d. xx.xx.xxxx?

Vielen Dank
Muckel / Tobias
 
Das mit dem Sortieren habe ich hinbekommen mit dem order:
PHP:
 ORDER BY `schmerz` . `datum` DESC';

Doch das mit dem Datum anzeigen ist noch mein Problem. Gruß und vielen Dank
Muckel
 
Zurück