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

Frage Entwicklung PHP

Mitglied: Batcher-CMD

Batcher-CMD (Level 1) - Jetzt verbinden

05.12.2010 um 15:44 Uhr, 5437 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...