Registrieren  •  Login 
  
 
im Forum


 FAQ   Mitgliederliste   Benutzergruppen   Teamseite   Suchen 

Weiterverarbeitung von Formulareingaben

 
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 24.09.2007, 09:15    Titel: Weiterverarbeitung von Formulareingaben

Hallo, Leute!

Habe aus einem Formular-Tutorial gelernt, wie nach abgeschlossener Eingabenüberprüfung eventuelle Fehlermeldungen nicht auf einer neuen Seite ausgegeben werden, sondern unter dem entsprechenden Eingabefeld.

Hier der gekürzte Code am Beispiel einer einzigen Eingabe:

PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
if ($_POST['gesendet']=="1"){

// Prüfung der Eingabefelder
if (!$_POST['name']) {$errorname.="Please enter your Name";}
}
?>

<form action="<?php $PHP_SELF ?>" method="POST">
<table width="712" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="72">Name</td>
    <td width="288">
      <input type="text" name="name" value="<?php echo $_POST['name'?>">
    </td>
  </tr>

  <tr>
    <td width="72"></td>
    <td width="288" style="color:red">
      <?php echo "".$errorname.""?>
    </td>
  </tr>

  <tr>
    <td style="text-align:center" colspan="2">
      <input type="submit" name="gesendet">
      <input type="hidden" name="gesendet1" value="1">
    </td>
  </tr>
</table>


So weit, so gut. Funktioniert prima und sieht besser aus als eine neue Seite a la "Sie haben keinen Namen eingegeben, klicken Sie auf zurück und füllen Sie alle Felder korrekt aus!"

Aber nirgends wird erklärt, wie ich nun die Eingaben weiter verarbeiten kann, da ich in der form action ja "<?php $PHP_SELF ?>" angegeben habe statt den Pfad zu einer "Auswertungsseite"!

Das muss doch irgendwie funktionieren, sonst wäre angegebenes Beispiel ja sinnlos!

Vielen Dank im Voraus für Eure Hilfe,

mfg kachimake
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13930
Wohnort: Wien

BeitragVerfasst am: 24.09.2007, 10:41    Titel:

Hallo kachimake.

Das ist ganz einfach. Du prüfst am Anfang des Scriptes einfach, ob das Formular abgesendet wurde. Das hast du ja bereits integriert. Nun solltest du das Script etwas erweitern, damit es bei keinem Fehler weiterverarbeitet wird, ein kleines Beispiel:
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php

// Prüfen, ob das Formular abgesendet wurde
if ($_POST['gesendet']=="1")
{
    
// Variablen füllen
    
$error false;
    
$error_message '';

    
// Prüfung der Eingabefelder
    
if(empty($_POST['name']))
    {
        
$error true;
        
$error_message .= ((!empty($error_message)) ? '<br />' '')."Please enter your Name";
    }
    
    
// Weitere Prüfungen....
    // ....
    
    // Gibt es Fehler?
    
if(!$error)
    {
        
// Verarbeitung der Daten, zum Beispiel in eine Datei schreiben oder in eine Datenbank
        // ...
        
        // Ausgabe eines textes, dass alles erfolgreich war
        // ...
        
        // Und das Script wirklich beenden, damit der untere Teil nicht mehr ausgeben wird
        
exit;
    }

?> 

<form action="<?php $_SERVER['PHP_SELF'?>" method="POST"> 
<table width="712" border="0" cellspacing="0" cellpadding="0"> 
  <tr> 
    <td width="72">Name</td> 
    <td width="288"> 
      <input type="text" name="name" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 
    </td> 
  </tr> 

  <tr> 
    <td width="72"></td> 
    <td width="288" style="color:red"> 
      <?php echo $error_message?> 
    </td> 
  </tr> 

  <tr> 
    <td style="text-align:center" colspan="2"> 
      <input type="submit" name="gesendet"> 
      <input type="hidden" name="gesendet1" value="1"> 
    </td> 
  </tr> 
</table>

Du überprüfst also ganz normal die Felder. Falls es keine Fehler gibt, verarbeitest du die Daten weiter, ansonsten zeigt es das Formular inklusive Fehlern an.

Außerdem solltest du wie ich in diesem Beispiel immer htmlspecialchars() verwenden, wenn du ein Formularfeld füllst, sonst würde es bei Eingaben mit Zeichen wie " zu Problemen kommen. Damit dein Code auch auf Servern funktioniert, wo Register Globals deaktiviert sind, solltest du auch $_SERVER['PHP_SELF'] ansatt der Kurzform verwenden Wink


MfG Christian
_________________


Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fanrpg
Mitglied
Mitglied



Anmeldedatum: 14.12.2006
Geschlecht: Keine Angabe
Beiträge: 126
Wohnort: Windeck

BeitragVerfasst am: 24.09.2007, 10:47    Titel:

PHP-Code:
1
2
3
4
5
6
7
<?php
if ($_POST['gesendet']=="1"){ 

// Prüfung der Eingabefelder 
if (!$_POST['name']) {$errorname.="Please enter your Name";} 
}
?>

Kann aber böse ins Auge gehen Wink

Ich würde das gesamte Formular eher so lösen...
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
if( isset($_POST['submit']) )
{
    
$error false;
    
$error_msg "";
    
$name = ( isset($_POST['name']) && !empty($_POST['name']) ) ? $_POST['name'] : 0;
    if( empty(
$name) )
    {
        
$error true;
        
$error_msg = ( ( !empty($error_msg) ) ? "<br />" '' ) . "Bitte fülle das Feld mit den Namen 'Name' aus";
    }
    else
    {
        
// Und was wird jetzt mit "name" gemacht? z.B...
        
$name htmlspecialchars($name);
        if( !
preg_match("#^[0-9]+$#"$name) )
        {
            
$error true;
            
$error_msg = ( ( !empty($error_msg) ) ? "<br />" '' ) . "Das Feld 'Name' wurde nicht korrekt ausgefüllt" ;
        }
        
// Und noch mehr je nach Bedarf
    
}
}
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST"> 
<table width="712" border="0" cellspacing="0" cellpadding="0"> 
  <tr> 
    <td width="72">Name</td> 
    <td width="288"> 
      <input type="text" name="name" value="<?=$name?>" /> 
    </td> 
  </tr> 
<?php
if( $error == true )
{
?>
  <tr> 
    <td width="72"></td> 
    <td width="288" style="color:red"> 
      <?=$error_msg?> 
    </td> 
  </tr> 
<?php
}
?>

  <tr> 
    <td style="text-align:center" colspan="2"> 
      <input type="submit" name="submit" value="Absenden" />
    </td> 
  </tr> 
</table>


Edit: Hmpf 6min zu spät Confused Das Umschreiben braucht auch seine Zeit gerade morgens Laughing

Dieser Beitrag wurde insgesamt 2 mal geändert. Zuletzt von fanrpg.
Nach oben
Benutzer-Profile anzeigen fanrpg ist derzeit offline Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 25.09.2007, 09:06    Titel: Danke für hilfreiche Antworten!

Hallo!

Danke für Eure schnelle Hilfe, klappt einwandfrei!

Bezüglich der Sicherheitslücken in meiner HP (offline) -und da gibt es bestimmt etliche- muss ich noch ein paar Tuts durcharbeiten, da mir Angriffe wie z.B. PHP-Injection bisher fremd waren...

Jetzt habe ich noch eine harte Nuss (zumindest für mich) zum Thema Datenbankabfrage:

Ich möchte gerne für meinen (noch fiktiven) Online-Shop die Bestellungen der letzten 24h abfragen.

Beispiel: heute ist Dienstag, 25.November.

Was wurde im Zeitraum von Montag, 24.November 09:00 bis heute Dienstag, 25.November 09:00 in meinem Online Shop bestellt?

Der Select-Befehl sollte also nicht nur die letzten 24h ab dem Zeitpunkt der DB-Abfrage umfassen, sondern auch noch die Uhrzeit berücksichtigen.

Hat jemand vielleicht eine Idee???

Danke an Alle,

mfg kachimake
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13930
Wohnort: Wien

BeitragVerfasst am: 25.09.2007, 09:11    Titel:

Ich verstehe nicht ganz was du meinst...
Willst jetzt die letzten 24 Stunden von JETZT oder allgemein den ganzen Tag?

Beim ersten müsstest ja nur BETWEEN verwenden Wink


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 25.09.2007, 09:29    Titel: @christian

Hallo, Christian!

Deine Rückfrage läßt sich am Besten anhand eines Beispiels beantworten:

Angenommen heute ist Dienstag, 25.November, 16:20.

Wie müsste der Select-Befehl lauten, welcher mir die Bestellungen von

Montag, 24.September 09:00 - Dienstag, 25.September 09:00 ausgibt?

Also immer von 09:00 - 09:00, egal wann ich die Abfrage ausführe.

Gruss, kachimake
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13930
Wohnort: Wien

BeitragVerfasst am: 25.09.2007, 09:37    Titel:

OK, jetzt habe ich verstanden Wink

Ich kann dir hier nur einmal ein Beispiel geben, wenn du die Zeitwerte als UNIX Timestamp in der Datenbank speicherst, mit dem anderen Datumformat von MySQL habe ich bisher noch keine Erfahrung:

PHP-Code:
1
2
3
4
5
6
7
8
9
<?php

$first 
mktime(900date('m'), date('d'), date('Y'));
$second $first 3600 24;

$sql "SELECT * FROM tabellenname
        WHERE time BETWEEN " 
$first " AND " $second;

?>

Das Script berechnet also den Timestamp für heute 9 Uhr und den zweiten Wert indem es die Anzahl an Sekunden abrechnet. Es gibt dafür bestimmt noch bessere Lösungen, so sollte es aber schon mal funktionieren. tabellenname musst natürlich durch den Tabellennamen ersetzen und time durch den Namen deiner Spalte Wink


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 25.09.2007, 10:01    Titel: Dank@Christian

Hallo, Christian!

Bei mir ist es umgekehrt, habe bis jetzt noch nicht mit dem UNIX Timestamp gearbeitet. Müsste daher erst meine DB umstellen, da ich für die eingegangenen Betellungen das andere Datumsformat anwende.

Oder -fällt mir gerade ein- einfach eine zusätzliche Zeile in die Tabelle mit dem Timestamp einfügen.

Werde das heute noch testen und Bescheid geben.

Danke und bis bald,

kachimake
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13930
Wohnort: Wien

BeitragVerfasst am: 25.09.2007, 10:11    Titel:

Es ist mit deinen Werten auch möglich, beide Methoden haben vor und Nachteile. Es in zwei Formaten zu speichern ist natürlich interessant. Es gibt einige Datums und Zeitfunktionen vom MySQL: dev.mysql.com
Ob man es damit lösen kann weiß ich nicht, da ich die noch nie gebraucht habe. Da ist die Lösung, die Werte doppelt zu speichern vielleicht noch sinnvoller.


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 25.09.2007, 23:28    Titel:

Hi, Christian!

Habe mich nun für eine Kombination aus DATETIME und TIMESTAMP entschieden:

Code:

$today = date('Y-m-d 09:00:00');
$tstamp  = mktime(9, 0, 0, date("m"), date("d")-1, date("Y"));
$yesterday = date("Y-m-d", $tstamp) . ' 09:00:00';
$orders_SQL = "SELECT * FROM orders WHERE time BETWEEN ' . $yesterday . ' AND ' . $today . ' ORDER BY entry_ID ASC LIMIT $pos,$count";


Funktioniert wunderprächtig und ich bin sehr zufrieden!!!

Vielen Dank für den Denkanstoß,

Gruß, kachimake

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von kachimake.
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13930
Wohnort: Wien

BeitragVerfasst am: 26.09.2007, 12:53    Titel:

Ganz schlechte Idee: d -1 Exclamation

Denk einmal was dann am 1. Oktober passieren würde. Denn einen 0. Oktober gibt es nicht. Du musst es wie ich machen, 9 Uhr heute brechnen (das hast du ja schon) und von diesem Wert die Anzahl an Sekunden von 24 Stunden abziehen (3600 * 24) - denn sonst wirst du am Monatsanfang oder am Jahresanfang immer ein Problem haben Wink


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 26.09.2007, 13:59    Titel:

Hi, Christian!

Schau Dir mal das an:

http://www.php-faq.de/q/q-datum-gestern.html

Hier habe ich meine Informationen gefunden.

Demnach müsste es auch an Monatsanfängen und Neujahr funktionieren.

mfg, kachimake
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13930
Wohnort: Wien

BeitragVerfasst am: 26.09.2007, 14:14    Titel:

Das wusste ich nicht, man lernt nie aus, danke für den Link Wink
Damit werde ich mir in Zukunft auch einiges an Tipparbeit ersparen Smile


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.
Du kannst Dateien in diesem Forum nicht hochladen.
Du kannst Dateien in diesem Forum nicht herunterladen.

 

Alle Zeiten sind GMT + 2 Stunden (Sommerzeit)
Aktuelles Datum und Uhrzeit: 03.04.2020, 02:37
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!
Software based on work from the phpBB-Group  •  Deutsche Übersetzung von phpBB.de

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]