Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP Javascript Problemchen

Frage Entwicklung PHP

Mitglied: kuehlmeister

kuehlmeister (Level 1) - Jetzt verbinden

30.06.2005, aktualisiert 04.07.2005, 7067 Aufrufe, 13 Kommentare

der tut nich wie er soll im Firefox!

Mahlzeit!!

ich hab hier n nettes Script geschrieben welches Daten in eine Datenbank einfügen soll. Der User füllt n paar Felder aus und drückt Submit!

Soweit is alles klar, funktioniert.

Nun hab ich ein kleines Javascript, welches die Felder auf die korrekte Eingabe checken und wenn nichts drin steht einfach den Cursor aufs Feld setzen und den User das eintragen lassen.

Funktioniert perfekt im Internet Explorer, nur der Firefox, der gibt zwar die Warnung aus das ein Formfeld nicht ausgefüllt ist, schickt das Formular aber trotzdem ab, so das der Inhalt der leeren Felder in der Datenbank landen (was sie ja nicht sollen)

Hier das Javascript:

<font class="code">
function check() {
if (document.bde.name.value == '0') {
alert ('Der Mitarbeiter fehlt!');
document.bde.name.focus();
document.bde.name.style.setAttribute("border","1px solid red");
return false;
}
}
</font>

Und hier das Form (zumindest der anfang)

<font class="code">
form name='bde' onSubmit='return check()' action='' method='post'
</font>
Mitglied: 11078
30.06.2005 um 15:35 Uhr
Hallo,

das Verhalten ist so wie beschrieben völlig normal, da der Event-handler "onSubmit" in dem Moment ausgeführt wird, wenn das Formular abgeschickt wird. Daran ändert (oder liege ich da ganz falsch?) auch das return false der JS-Funktion nichts.

Du müsstest das ganze nur etwas anders aufbauen.

Nimm mal das onSubmit aus dem einleitenden Form-Tag raus und setz onClick dafür in den Button, der das Absenden startet. Das kann dan so aussehen:


01.
  < button name="absenden" type="button" value="Absenden" onClick="test()">Absenden< /button>
Beim Click auf den Button wird die JS-Funktion test() aufgerufen, in der der eigentlich Befehl zum Absenden notiert ist. Hier kannst Du es dann ja mit IF-Abfragen etc. regeln, wann alle Voraussetzungen zum Versenden erfüllt sind:

Der JS-Befehl zum Versenden ist dann:

01.
        document.bde.submit();

Der Clou ist also nur, dass Du nicht onSubmit nehmen kannst für das, was Du machen willst, sondern es muss ein anderer Event-Handler sein. Ansonsten musst Du es natürlich nicht zwingend wie oben aufbauen, ist nur ein mögliches Beispiel


Gruß,
TIM
Bitte warten ..
Mitglied: 11078
30.06.2005 um 15:49 Uhr
Noch ein Nachtrag:

Ich weiß nicht, warum das ganze im IE so klappt, wie Du es geplant hast. Wenn man sich die Microsoft Erklärungen für ONSUBMIT im IE anschaut, ist da explizit die Rede:

01.
You can override this event by returning false in the event handler. Use this capability to validate data on the client side to prevent invalid data from being submitted to the server. 
02.
 
03.
[http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onsubmit.asp]
Und das ist das, was Du willst: das ursprüngliche Verhalten von Onsubmit per "return false" ausschalten, damit keine falschen Daten an den Server verschickt werden.

Das original Dokument des W3C zu HTML 4 schreibt davon aber gar nichts. Hier heßt es nur:

01.
onsubmit = script [CT] 
02.
    The onsubmit event occurs when a form is submitted. It only applies to the FORM element. 
03.
 
04.
[http://www.w3.org/TR/REC-html40/interact/scripts.html#adef-onsubmit]

Es scheint also so, dass das gewünschte Verhalten nicht W3C konform ist und deshalb nicht von Firefox angewandt wird. Der IE scheint es zu machen, weil Microsoft es als Erweiterung zum eigentlichen Standard eingebaut hat.

Hhm, hast Du es mal mit Opera oder was anderem ausgetestet? Wie verhält es sich da?
Hat noch jemand eine Idee?

Gruß,
TIM
Bitte warten ..
Mitglied: kuehlmeister
30.06.2005 um 16:19 Uhr
Hi,

das hab ich jetzt auch probiert, leider funktioniert der document.bde.submit() nicht, da meckert der immer rum das sei keine Funktion....

function check() {
if(document.bde.name.value != '0' && document.bde.start.value != '' && document.bde.ende.value != '' && document.bde.anzahl.value != '') {
alert('alles klar');
document.bde.submit();
}
else {
alert('Eingaben fehlen');
}
}

Aber eigentlich ist das richtig geschrieben??

im Form:

print "< button name='submit' type='button' value='Eintragen' onClick='check()'>Absenden< / button >";


P.S. nich wundern wegen print, is alles in ner .php

thx
Bitte warten ..
Mitglied: 11078
30.06.2005 um 17:56 Uhr
Hallo,

lässt sich so schlecht beurteilen, sieht aber eigentlich richtig aus.

Kannst Du die Seite nicht mal testweise online stellen, dann könnte man es sich mal im ganzen ansehen, also das Zusammenspiel von Formular und Javascript. So müsste ich mir erst selbst eine Seite zum Testen zusammenbasteln und das ist mir gerade zu anstrengend

Hier nochmal ein beispiel zur Verwendung von Submit:
http://de.selfhtml.org/javascript/objekte/forms.htm#submit


Gruß,
TIM
Bitte warten ..
Mitglied: Guenni
30.06.2005 um 18:36 Uhr
@kuehlmeister

Hi,

anstatt if (document.bde.name.value == '0')

probiere mal

if (document.bde.name.value == " ")

Du fragst zwar ab, ob der Inhalt des Textfeldes 0 ist,
aber wenn das Feld leer ist, ist es eben auch nicht 0, sondern
einfach leer und somit in Ordnung.

Gruß
Günni
Bitte warten ..
Mitglied: kuehlmeister
30.06.2005 um 20:04 Uhr
@günni
ne, ich frag tatsächlich nach ner null in diesem Feld, wenn nämlich kein name angewählt ist. Die Namen sind in einem Listenfeld und der value des ersten eintrags ist 0.

@tim
seite kann ich morgen mal online stellen thx
Bitte warten ..
Mitglied: kuehlmeister
01.07.2005 um 09:27 Uhr
Hallo,

lässt sich so schlecht beurteilen,
sieht aber eigentlich richtig aus.

Kannst Du die Seite nicht mal testweise
online stellen, dann könnte man es sich
mal im ganzen ansehen, also das Zusammenspiel
von Formular und Javascript. So müsste
ich mir erst selbst eine Seite zum Testen
zusammenbasteln und das ist mir gerade zu
anstrengend

Hier nochmal ein beispiel zur Verwendung von
Submit:
http://de.selfhtml.org/javascript/objekte/forms.htm#submit


Gruß,
TIM

Jo hier ist die Seite mal online: http://laxfarm.de/php/test.php

Das mit dem submit funktioniert nur, wenn in dem < button > tag das type='button' nicht drin ist.
Aber der return nach dem anklicken des Buttons nicht, sondern sendet einfach ab.

thx
Bitte warten ..
Mitglied: 11078
01.07.2005 um 09:48 Uhr
Hallo,

merkwürdig, kann ich nur sagen.

Also der einzige JS-Fehler, der bei mir kommt, ist, dass die "setAttribute" keine Funktion ist. Das liegt aber wahrscheinlich nur daran, dass bei Dir der dritte Parameter fehlt. Vgl: http://de.selfhtml.org/javascript/objekte/all.htm#set_attribute

Was mir noch auffält, ist, dass Du nahezu überall ' statt " verwendest, was aber kein Problem sein sollte ???

Aber ansonsten will mir nicht einleuchten, warum das nicht geht, zumal ich vor einigen Jahren selbst mal Formularabfragen auf diese Weise gemacht habe - und die laufen heute noch problemlos. Vielleicht schaust Du Dir das einfach mal an, unter Umständen hilft es Dir ja:

http://www.uni-wuerzburg.de/philfakIII/phil3_7n.htm (Das "Service-Formular")
http://www.cip.phil3.uni-wuerzburg.de/content/feedback/feedback.php (hier vor allem die weiterführenden Formulare)


Sorry, dass ich nicht wirklich weiter helfen konnte...


Gruß,
TIM
Bitte warten ..
Mitglied: Guenni
01.07.2005 um 13:53 Uhr
@kuehlmeister

Hi,

so funkt. es(Sternchen durch < ersetzen):

<font class="code">
*!DOCTYPE HTML PUBLIC " -W3CDTD HTML 4.01 Transitiona lEN">

*html>
*head>
*title>Untitled</title>
*script type="text/javascript">
*!--
function check(){
if(document.formular.textfeld.value=="" || document.formular.textfeld.value=="Bitte ausfüllen!"){
document.formular.textfeld.value="Bitte ausfüllen!";
document.formular.textfeld.select();
return false;
}
return true;
fehlt bei dir
}
// -->
*/script>
*/head>
*body>
*form action="check.php" method="post" name="formular" onsubmit="return check()">
*input type="text" name="textfeld" value="" />
*input type="submit" value="Absenden"/>
*/form>
*/body>
*/html>

</font>

Dateiname=check.php
Beachte das return true am Ende der Funktion!

Gruß
Günni
Bitte warten ..
Mitglied: Guenni
01.07.2005 um 16:02 Uhr
@kuehlmeister

Hi,

ein Manko ist noch vorhanden:

Der Benutzer kann trotzdem falsche Eingaben machen wie z.B. Müller(Heinz),
Schmitz09, Otto=Peter oder einfach nur ein Leerzeichen.

Hier noch eine kleine Verbesserung:

<font class="code">
function check(){
ok=false;
muster=/[A-Za-zÄÖÜäöüß]/ ;Prüfen, ob Buchstaben eingegeben wurden
test=muster.exec(document.formular.textfeld.value);
if(test){ok=true;}
Wenn ja, dann O.K.
muster=/[0-9]|[@\(\)\[\]\.=]/ ;Prüfen, ob zusätzlich Ziffern, @-Zeichen,
Klammern, Punkt oder Gleichheitzeichen eingegeben wurden
Die Liste verbotener Zeichen kann einfach erweitert werden.
Zu beachten ist nur, dass best. Zeichen durch den Backslash maskiert(\(,\.,\])
werden müssen, da sie sonst nicht als das Zeichen selber interpretiert werden.
Einfach mal ausprobieren, allzu gut kenn´ich mich mit reg.Ausdrücken nicht aus.
test=muster.exec(document.formular.textfeld.value);
if(test){ok=false;}//Wenn ja, dann nicht O.K.
if(!ok || document.formular.textfeld.value=="Bitte ausfüllen!"){
document.formular.textfeld.value="Bitte ausfüllen!";
document.formular.textfeld.select();
return false;
}
return true;
}
</font>

Gruß
Günni
Bitte warten ..
Mitglied: kuehlmeister
04.07.2005 um 12:15 Uhr
@kuehlmeister

Hi,

ein Manko ist noch vorhanden:

Der Benutzer kann trotzdem falsche Eingaben
machen wie z.B. Müller(Heinz),
Schmitz09, Otto=Peter oder einfach nur ein
Leerzeichen.

Hier noch eine kleine Verbesserung:

<font class="code">
function check(){
ok=false;

muster=/[A-Za-zÄÖÜäöüß]/ ;Prüfen,
ob Buchstaben eingegeben wurden

test=muster.exec(document.formular.textfeld.value);
if(test){ok=true;}
Wenn ja, dann O.K.

muster=/[0-9]|[@\(\)\[\]\.=]/ ;Prüfen,
ob zusätzlich Ziffern, @-Zeichen,
Klammern, Punkt oder Gleichheitzeichen
eingegeben wurden
Die Liste verbotener Zeichen kann einfach
erweitert werden.
Zu beachten ist nur, dass best. Zeichen
durch den Backslash maskiert(\(,\.,\])
werden müssen, da sie sonst nicht
als das Zeichen selber interpretiert
werden.
Einfach mal ausprobieren, allzu gut
kenn´ich mich mit reg.Ausdrücken
nicht aus.

test=muster.exec(document.formular.textfeld.value);
if(test){ok=false;}//Wenn ja, dann nicht
O.K.
if(!ok ||
document.formular.textfeld.value=="Bitte
ausfüllen!"){

document.formular.textfeld.value="Bitte
ausfüllen!";
document.formular.textfeld.select();
return false;
}
return true;
}
</font>

Gruß
Günni

ja danke, das baue ich noch mit ein.
Bitte warten ..
Mitglied: kuehlmeister
04.07.2005 um 12:16 Uhr
@kuehlmeister

Hi,

so funkt. es(Sternchen durch <
ersetzen):

<font class="code">
*!DOCTYPE HTML PUBLIC " -W3CDTD HTML
4.01 Transitiona lEN">

*html>
*head>
*title>Untitled</title>
*script
type="text/javascript">
*!--
function check(){

if(document.formular.textfeld.value==""
document.formular.textfeld.value=="Bitte
ausfüllen!"){

document.formular.textfeld.value="Bitte
ausfüllen!";
document.formular.textfeld.select();
return false;
}
return true;
fehlt bei dir
}
// -->
*/script>
*/head>
*body>
*form action="check.php"
method="post"
name="formular"
onsubmit="return check()">
*input type="text"
name="textfeld" value=""
/>
*input type="submit"
value="Absenden"/>
*/form>
*/body>
*/html>

</font>

Dateiname=check.php
Beachte das return true am Ende der
Funktion!

Gruß
Günni

haha! nun gehts! Und zwar nur, wenn der keine Select-Felder abfragen soll. Weil dann nämlich sendet der das per Post ab.

muss noch rausfinden wie man die dinger besser abfragt, weil über value= gehts nich

thx
Bitte warten ..
Mitglied: kuehlmeister
04.07.2005 um 15:18 Uhr
Juhuu! Nun gehts ganz! So isses:

<font class="code"> function check() {
if(document.bde.name.options[0].selected==true) {
alert("Bitte den Namen eintragen!");
return false;
}
if(document.bde.typ.options[0].selected==true) {
alert("Bitte den Typen eintragen!");
return false;
}
if(document.bde.schritt.options[0].selected==true) {
alert("Bitte den Arbeitsschritt eintragen!");
return false;
}
if(document.bde.start.value=="") {
alert("Bitte den Startwert eintragen!");
document.bde.start.select();
return false;
}
if(document.bde.ende.value=="") {
alert("Bitte den Endwert eintragen!");
document.bde.ende.select();
return false;
}
if(document.bde.anzahl.value=="") {
alert("Bitte die Stueckzahl eingeben!");
document.bde.anzahl.select();
return false;
}
return true;

}
</font>

danke!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...