Top-Themen

Aktuelle Themen (A bis Z)

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 submit bottum funktioniert nicht

Frage Entwicklung PHP

Mitglied: Batcher-CMD

Batcher-CMD (Level 1) - Jetzt verbinden

05.12.2010 um 15:44 Uhr, 5535 Aufrufe, 9 Kommentare

Ich wollte ne Seite schreiben wo mann sich ragestrieren kann, Irgendwie klappt der submit bottum nicht.
Hier ist die php:

01.
<?php 
02.
// Verbindung herstellen 
03.
 
04.
$host = "localhost"
05.
$user = "root"
06.
$pass = ""
07.
$db = "login"
08.
 
09.
mysql_connect($host, $user, $pass); 
10.
mysql_select_db($db); 
11.
unset($host,$user,$pass,$db); 
12.
?> 
13.
<html> 
14.
<head> 
15.
<title>Registrieren</title> 
16.
</head> 
17.
<body> 
18.
<table align='center'> 
19.
<form action='<?php $_SERVER['PHP_SELF']; ?>' method='post'> 
20.
<h1>Formular ausfüllen um sich zu regestrieren!!</h1> 
21.
Benutzername:<input type='text' name='user' size'12' maxlength='24'><br/> 
22.
Passwort:    <input type='password' name='pass'><br/> 
23.
E-mail:<input type='text' name='mail'><br/> 
24.
<input type='submit' name='submit' value='Abschicken'> 
25.
</form> 
26.
</table> 
27.
<?php 
28.
$name = $_POST["user"]; 
29.
$pass = $_POST["pass"]; 
30.
$mail = $_POST["mail"]; 
31.
if(isset($_POST["Login"])){ 
32.
if($name == '' and $pass =='' and $mail =='') 
33.
{echo 'Sie haben nicht alle Daten angegeben!!'; 
34.
35.
else 
36.
37.
$sql = " 
38.
  INSERT INTO `users` 
39.
  (  
40.
  `id` , `username` , `password` , `mail`  
41.
  )  
42.
  VALUES 
43.
44.
  NULL , '$name', '$pass', '$mail
45.
  ); 
46.
";   
47.
$db_erg = mysql_query($sql
48.
   or die("Anfrage fehlgeschlagen: " . mysql_error()); 
49.
    
50.
echo "Benutzer erfolgreich angelegt!!!"
51.
}}; 
52.
?>
Was ist da falsch??
Mitglied: Nottrott
05.12.2010 um 16:18 Uhr
01.
<form action='<?php $_SERVER['PHP_SELF']; ?>' method='post'>
Schau mal in den ausgegebenen HTML-Code, da fehlt ein echo vor $_SERVER['PHP_SELF'];.
Bitte warten ..
Mitglied: Arano
05.12.2010 um 17:47 Uhr
Hallo Batcher-CMD

size'12'
Das sollte sicher "size='12'" sein ;)

Zum Problem:
if(isset($_POST["Login"])){
Wenn ich nicht irre, ist dies NIEMALS der Fall, den in dem Formular wird kein Feld namens "Login" verwendet !


Einen schönen Abend noch
~Arano
Bitte warten ..
Mitglied: Xaero1982
05.12.2010 um 18:29 Uhr
Moin,

also da ist meiner Ansicht nach einiges Schief

01.
<form action='<?php $_SERVER['PHP_SELF']; ?>' method='post'> 
Das hier ist gar nicht notwendig.
Das:
01.
<form action="" method="post">
reicht vollkommen aus.

Das hier:
01.
if($name == '' and $pass =='' and $mail =='')
trifft nur zu, wenn alle Eingaben fehlen.
Wenn ich aber nur die Mail oder was anderes weglasse wirds nicht abgefangen.
Die Zeile sollte eher
01.
if($name == '' || $pass =='' || $mail =='')
lauten.

Und zu guter Letzt muss dein

01.
</form>
unter die mysqlanweisung.

Und noch ein, zwei Kleinigkeiten die "ich" so nicht machen würde, weils viel zu umständlich ist:

01.
<?php 
02.
// Verbindung herstellen 
03.
 
04.
$host = "localhost"; 
05.
$user = "root"; 
06.
$pass = ""; 
07.
$db = "login"; 
08.
 
09.
mysql_connect($host, $user, $pass); 
10.
mysql_select_db($db); 
11.
unset($host,$user,$pass,$db); 
12.
 
13.
function sqlSafeString($param) { 
14.
    return (NULL === $param ? "NULL" : ''.mysql_escape_string ($param).''); 
15.
16.
?> 
17.
<html> 
18.
<head> 
19.
<title>Registrieren</title> 
20.
</head> 
21.
<body> 
22.
<table align='center'> 
23.
<form action='' method='post'> 
24.
<h1>Formular ausfüllen um sich zu regestrieren!!</h1> 
25.
Benutzername:<input type='text' name='user' size='12' maxlength='24'><br/> 
26.
Passwort:    <input type='password' name='pass'><br/> 
27.
E-mail:<input type='text' name='mail'><br/> 
28.
<input type='submit' name='submit' value='Abschicken'> 
29.
</table> 
30.
<?php 
31.
if(isset($_POST["Login"])){ 
32.
if($_POST["user"] == '' || $_POST["pass"] =='' || $_POST["mail"] =='') 
33.
{echo 'Sie haben nicht alle Daten angegeben!!'; 
34.
35.
else 
36.
37.
$sql = " 
38.
  INSERT INTO `users` 
39.
  (  
40.
  `id` , `username` , `password` , `mail`  
41.
  )  
42.
  VALUES 
43.
44.
  NULL , '".sqlSafeString( $_POST["user"])."', '".sqlSafeString($_POST["pass"])."','".sqlSafeString($_POST["mail"])."'" 
45.
  ); 
46.
";   
47.
$db_erg = mysql_query($sql) 
48.
   or die("Anfrage fehlgeschlagen: " . mysql_error()); 
49.
    
50.
echo "Benutzer erfolgreich angelegt!!!"; 
51.
}}; 
52.
?> 
53.
</form> 
54.
</body> 
55.
</html>
Mit den Anführungszeichen etc. musst du noch mal schauen.
sqlSafeString ist eine Funktion gegen MySQL Injunctions.

VG
Bitte warten ..
Mitglied: Arano
05.12.2010 um 19:30 Uhr
Hm...

Warum müssen denn die MySQL-__Bearbeitung__sanweisungen noch in das __Eingabe__formular !?
Da sehe ich keinen Sinn drin.
Ich würde es sowieso ganz anders machen, es aber dennoch für Sinnvoller halten wenn die Erfolgsausgabe __über__ dem Formular stünde.
Denn nach dem abschicken der Daten ist alles was mich interessiert (interessieren könnte), ob die Daten gespeichert werden konnten oder nicht.
Das Formular ist doch bei Erfolg völlig unwichtig und bei einem Misserfolg erst nach der Fehlermeldung.

Zitat von PHP-Manual - mysql_escape_string()
---
Warning
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
Nimm stattdessen PHP-Manual - mysql_real_escape_string()]
Und warum verpackst du die Funktion noch in einem Wrapper wenn doch nichts weiter gemacht wird als sie selbst aufzurufen !?

Das <form action='<?php $_SERVER['PHP_SELF']; ?>' method='post'> ist gar nicht notwendig.
Das <form action="" method="post"> reicht vollkommen aus.
Ähm... nö !
W3C - Forms in HTML documents
  1. Ist das action-Attribut notwendig (required) und
  2. ist das Browserverhalten bei einer anderen Angabe als einer URI nicht definiert. (Jeder Browser macht also was er will - nicht was du willst !) (User agent behavior for a value other than an HTTP URI is undefined.)

Nach wie vor ist es so, das kein Feld namens "Login" übertragen wird und so die gesamten MySQL-Anweisungen (Bearbeitung) übersprungen wird !

Und um das auch mal eben noch klar zu halten, der Submitbutton funktioniert also schon, es ist lediglich die Scriptlogik die Fehlerhaft ist ;)


~Arano
Bitte warten ..
Mitglied: Xaero1982
05.12.2010 um 19:50 Uhr
Moin,

ich würde es auch anders machen, aber ich wollt ihm da nun nicht alles zerlegen...

Du kannst den ganzen MySQL Quatsch auch VOR das Formular packen, ansonsten muss es ins Formular. Kannst es ja gerne mal probieren unter und außerhalb des Formulars.

01.
Parameter, die innerhalb von Quotes als String an die Datenbank übergeben werden sollen, dürfen selbst keine ungeschützten Quotes enthalten. Parameter, die IDs oder Zahlen repräsentieren, dürfen nur Ziffern enthalten. Die beiden Funktionen sichern genau dies, und sorgen zudem dafür, dass NULL-Values korrekt wiedergegeben werden
Mit der Funktion haste natürlich recht. Kann man die neue nehmen.

Ähm, doch!
Weil nichts anderes passiert, außer der Aufruf der gleichen Seite genau so wie mit PHP_SELF.
Mach ich seit eh und je und hatte noch NIE in egal welchem Browser Probleme damit
Required? Jo, es ist ja auch da ... ich habs ja nicht weggelassen - das ist der Unterschied.

Das mit dem Login stimmt natürlich, aber das hattest du ja bereits geschrieben.

VG
Bitte warten ..
Mitglied: Arano
05.12.2010 um 20:43 Uhr
Hi,

__From, MySQL__:
es geht doch nicht ums probieren, sondern ums verstehen !
Warum "muss es ansonsten ins Formular" ?

__sqlSafeString__:
Na ich weiss nicht ob es so praktisch ist, wenn NULL (null bzw. der default Wert) in die DB gespeichert werden soll und wegen der Funktion "NULL" (string) gespeichert wird.

__Form, action__:
Ich sage ja auch gar nicht das es so überhaupt nicht funktioniert - dennoch ist es "nur Zufall" !
Nur ein Zufall das sich alle Browserhersteller für die selbe Vorgehensweise entschieden haben - aber kein muss !
Und wir wissen doch alle wie viele Unterschiede es bei der Interpretation von HTML zwischen den Browsern geben kann ;)
Also wähle ich doch lieber die Methode bei der ich sicher sein kann, dass das gewünschte passiert und fülle das action-Attribut mit einer URI.
Außerdem weiss ich so bei der Fehlersuche, das ich die Angabe einer URI nicht versehentlich vergessen habe den:
  • URI vorhanden = oaky
  • URI fehlt = nicht okay
erkennbar auf den ersten Blick ! (Zumal es bei mir eh selten der Fall ist, das Formular und Zieladresse die selbe URI haben).


~Arano
Bitte warten ..
Mitglied: dog
05.12.2010 um 23:02 Uhr
Beim Entwickeln gehört immer dieser Code an den Anfang eines PHP-Programms:

01.
<?php 
02.
  error_reporting(E_ALL|E_STRICT); 
03.
  ini_set('display_errors','On'); 
04.
?>
Damit siehst du noch so einige Stil-Fehler.

Das eigentliche Problem wurde ja schon eingehend erläutert, außer:
PHP_SELF ist eine Benutzerübergabe und kein Server-Wert und genau so gehört es auch behandelt (XSS lässt grüßen).
Also entweder du schreibt die URL fest, benutzt basename(_ _FILE_ _) (was nur bei einfachen scripts geht) oder du escapst den Wert sauber: html_specialchars($_SERVER['PHP_SELF'])
Bitte warten ..
Mitglied: Batcher-CMD
06.12.2010 um 16:08 Uhr
Ok wie krieg ich das denn hin das der untere teil nur ausgefürt wird wenn der Bottum gedrückt wird???
Bitte warten ..
Mitglied: Guenni
06.12.2010 um 17:17 Uhr
Hi Batcher-CMD,

Ok wie krieg ich das denn hin das der untere teil nur ausgefürt wird wenn der Bottum gedrückt wird???

In dem du prüfst, ob der Button gesendet wurde . . .

if(isset($_POST['Name_des_Buttons'])) { . . . }

Deine Zuweisung der Formularfelder an Variablen gehört ebenfalls hinter die Prüfung des Buttons.

Und damit die von Dog geschriebenen Anweisungen . . .


<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors','On');
?>

. . . keine Fehler/Warnungen hervorrufen, prüfst du die POST-Daten ebenfalls mit . . .

if(isset($_POST['Name_des_Feldes'])) { . . . }

auf ihre Existenz.

Und wenn die Existenz gegeben ist, ist es auch ratsam, bei der Zuweisung an Variablen die Leerzeichen

zu entfernen. Heißt, auch wenn variable=='' ein positives Ergebnis liefert, muß da nicht unbedingt was

Lesbares drinstehen. Auch ein Leerzeichen ist eine gültige Eingabe!! Sieht aber in der DB-Tabelle

einigermaßen doof aus Falls das überhaupt eingetragen wird!?!.

Also: $variable=trim($_POST['Name_des_Feldes']);

Sind die Leerzeichen entfernt, muß man natürlich prüfen, ob noch was übrig geblieben ist. Dazu kann man

mit der Funktion strlen prüfen, ob die variable nach Entfernung der Leerzeichen überhaupt noch Zeichen

enthält: if(strlen(variable)>0){ . . . }

Gruß
Günni
Bitte warten ..
Ähnliche Inhalte
PHP
SSH-Verbindung mit PHP funktioniert (teilweise) nicht..
Frage von thaddaeus93PHP16 Kommentare

Hallo zusammen, zunächst habe ich folgendes vor: Ich möchte über PHP/SSH zwei WLAN-Access-Points ansteuern und auf diesen SSH-Befehle ausführen ...

JavaScript
Livevalidierung durch Javascript (Submit nach LV invalid deaktiviert)
gelöst Frage von chef1568JavaScript4 Kommentare

Hallo zusammen, ich nutze für die Validierung der Formularfelder auf einer Homepagen die Livevalidation von. Die Livevalidierung funktioniert auch ...

PHP
PHP statements mit PHp erzeugen
gelöst Frage von LorderichPHP4 Kommentare

Hallo zusammen, ich habe eine Datei, in welcher per switch und case die Webseiten definiert werden, welche bei Aufruf ...

PHP
PHP - Variable in anderes PHP-Skript mitgeben
gelöst Frage von Jens4everPHP3 Kommentare

Hi zusammen, könnt ihr mir kurz helfen? Ich habe folgendes vor: Ich möchte, dass beim Aufruf von "check1.php" eine ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 14 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 16 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...