php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (9) Themen-Optionen Bewertung: Bewertung: 6 Stimmen, 5,00 durchschnittlich.
  9 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 12-03-2014, 21:59
CptRiot
 Registrierter Benutzer
Links : Onlinestatus : CptRiot ist offline
Registriert seit: Feb 2014
Beiträge: 13
CptRiot befindet sich auf einem aufstrebenden Ast
Standard Mysql $GET action mit "_"

Guten Abend,

ich Möchte gern datensätze aus meiner Datenbank Löschen.

da dies hier nicht funktioniert hat,
PHP-Code:
if (isset($_POST['remove']))
                    {
                        if (!empty(
$_GET['action']))  
                        
//wenn GET übergeben wurde 
                        
{  
                            
$action $_GET["action"];  
                            
$loeschen mysql_query("DELETE FROM news WHERE headline = '$action' ");
                            
                        }
                    } 



hab ich in eine test.php
folgendes getippt:
PHP-Code:
 <form action="test.php?action=<?php echo $action?>" method="post">
<input name="submit" type="submit" value="Erstellen">
<?php

 
if (isset($_POST['submit']))
{
$action $_GET["action"];
echo 
$action;



?>
</form>
Das Funktioniert auch solange, biss action = Test_4 ist, dann wird nichts ausgegeben.
Jetzt frage ich mich , warum ?


Mit freundlichen Grüßen
Cpt.Riot
Mit Zitat antworten
  #2 (permalink)  
Alt 12-03-2014, 22:01
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wo soll $ueberschrift herkommen?

Was ergibt das Debugging?

Die mysql_* Funktionen sind veraltet und sollten nicht mehr verwendet werden. Nimm stattdessen mysqli oder PDO.
Mit Zitat antworten
  #3 (permalink)  
Alt 12-03-2014, 22:05
CptRiot
 Registrierter Benutzer
Links : Onlinestatus : CptRiot ist offline
Registriert seit: Feb 2014
Beiträge: 13
CptRiot befindet sich auf einem aufstrebenden Ast
Standard

Hab mich vertippt habs schon geändert

Das Mysql veraltet ist, ist mir bewusst aber ich denke wenn ich den code fertig habe kann ich ihn immer noch umschreiben und mich dann speziell mir mysqli beschäftigen


EDIT:

Den Fehler im oberen Code habe ich gefunden, die Form, in der der Button ist beziht sich auf admin.php und übernimmt die variable nicht
HTML-Code:
<form action="admin.php" method="post">
er müsste also ebenfalls so aussehen:
HTML-Code:
<form action="admin.php?action<?php echo $action;  ?>" method="post">

EDIT 2:


ein weiterer Fehler war :
" Unknown column 'Test4' in 'where clause' "

also einfach
PHP-Code:
$loeschen "DELETE FROM news WHERE headline = '$action' "
in

PHP-Code:
$loeschen "DELETE FROM news WHERE headline LIKE '$action' "
geändert.

bleibt nur leider immernoch das Problem, mit den "_"


EDIT3:

Okay ?!? scheint sich von alleine erledigt zu haben kp warum aber jetzt funktioniert es, ohne das ich was geändert habe ?

siht jetzt so aus:

PHP-Code:
<form action="admin.php?action=<?php echo $action?>" method="post">
                    <input name="remove" type="submit" value="Löschen">
                    <?php

                        
if (isset($_POST['remove']))
                            {
                                if (!empty(
$_GET['action']))  
                                
//wenn GET übergeben wurde 
                                    
{  
                                        
$action $_GET["action"];  
                                        
$loeschen "DELETE FROM news WHERE headline LIKE '$action' "
                                        
$loesch mysql_query($loeschen) OR die("Error: $loeschen <br>".mysql_error() );
                                        
                                        echo (
'<script>window.location.href="admin.php"</script>');
                                    }
                                else 
                        
                                echo 
"Es wurde kein Beitrag ausgewählt";
                            } 

                    
?>
                    </form>

Geändert von CptRiot (13-03-2014 um 16:34 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 15-03-2014, 09:25
anihex
 Registrierter Benutzer
Links : Onlinestatus : anihex ist offline
Registriert seit: Feb 2014
Beiträge: 28
anihex befindet sich auf einem aufstrebenden Ast
Standard

Hallo CptRiot,

ich würde den Quelltext ein wenig ändern. Denn ich sehe hier folgende Probleme:
  1. Du prüfst nicht, WELCHE Aktion ausgeführt werden soll. Das könnte zu Komplikationen führen, sofern du später andere Aktionen hinzufügen möchtest. Zudem könnnte es als Sicherheitslücke missbraucht werden.
  2. Du verwendest die Überschrift eines Eintrages. Das kann man machen, wenn man sich zu 100% sicher ist, dass die Überschriften einmalig sind und sich NIEMALS wiederholen. Besser wäre hier eine eindeutige Nummer. Oft "ID" genannt.
  3. Ich für meinen Teil würde dir von "LIKE" abraten. Damit suchst du keinen eindeutigen Eintrag. Es können auch andere Einträge betroffen sein.
  4. Da du nur einen Teil des Quelltextes zeigst, kann ich nicht prüfen ob du den Zugriff auf die Datei nur berechtigten Usern ermöglichst. Das halte ich für extrem wichtig, da du sonst relativ schnell eine leere Datenbank hast.
  5. In Anlehung an 4.) noch Folgendes: Du scheinst deine Daten nicht zu filtern. Ich sage nur: SQL-Injection.
Ich hoffe, ich konnte dir ein wenig Anregung liefern.


Viel Erfolg!
~ Chris
Mit Zitat antworten
  #5 (permalink)  
Alt 15-03-2014, 09:43
CptRiot
 Registrierter Benutzer
Links : Onlinestatus : CptRiot ist offline
Registriert seit: Feb 2014
Beiträge: 13
CptRiot befindet sich auf einem aufstrebenden Ast
Standard

Guten Morgen,

erstmal Danke für die Antwort

zu 1:
Ich steh leider seit ner woche scho aufm schlauh und habe kp wie ich das vernünftig filtern kann

zu2: jetzt wo du es sagst klingt es logisch ( war einfach nur faul ) werde es ändern, danke für den hinweis

zu 3:
ich hatte dort auh er = stehen aber das hat irdgendwie nicht funktioniert

zu4:

ich denke du meinst ein session basiertes Login ? dies ist vorhanden

in etwa so

login.php
PHP-Code:
<?php
$username 
$_POST["username"]; 
$passwort md5($_POST["password"]); 

$abfrage "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1"
$ergebnis mysql_query($abfrage); 
$row mysql_fetch_object($ergebnis); 

if(
$row->passwort == $passwort
    { 
    
$_SESSION["username"] = $username
    echo 
"Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>"
    } 
else 
    { 
    echo 
"Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"
    } 

?>
und admin.php
PHP-Code:
<?php 
session_start
(); 
?> 

<?php 
if(!isset($_SESSION["username"])) 
   { 
   echo 
"Bitte erst <a href=\"login.html\">einloggen</a>"
   exit; 
   } 
?>
Mit Zitat antworten
  #6 (permalink)  
Alt 15-03-2014, 11:25
anihex
 Registrierter Benutzer
Links : Onlinestatus : anihex ist offline
Registriert seit: Feb 2014
Beiträge: 28
anihex befindet sich auf einem aufstrebenden Ast
Standard

Hi CptRiot,

Zum Thema Filterung:
Du hast in deinem Quelltext folgendes:
PHP-Code:
                                if (!empty($_GET['action'])) 
Du prüfst hier einfach nur, ob "action" gesetzt wurde. Aber nicht, ob "action" einen bestimmten Wert hat. Damit kann da praktisch alles stehen.
Du kannst das Problem recht elegant lösen.
Normalerweise muss man Variablen die über GET etc. kommen, prüfen ob sie gesetzt wurden und ob der Wert gültig ist.
Also in etwa so:
PHP-Code:
if ( (isset( $_POST"id" ])) && (is_int($_POST"id" ])) ) {
  
// Auf dem ersten Blick ist alles okay.
  
$ID $_POST"id" ];

Nun gibt es aber eine elegantere Lösung. Und zwar diese:
PHP-Code:
$ID filter_inputINPUT_POST"id"FILTER_VALIDATE_INT ); 
Die Variable $ID hat nun einen von 3 möglichen Werten:
- Wenn eine Zahl angegeben wurde: INT
- Wenn ein ungültiger Wert (z.B. eine Zeichenkette) angegeben wurde: false
- Wenn das Feld gar nicht übermittelt wurde: NULL

Nun musst du im Zweifelsfalle nur noch prüfen, ob $ID eine Zahl enthält.

Übrigens ... Du verwendest "action" um den zu löschenden Eintrag zu bestimmen. Ich denke nicht, dass das eine so gute Idee ist. Ich bin mir nichtmal sicher, ob das so gewollt ist. Nur mal so als Anmerkung.

Zum vormals 3ten Punkt:
Wenn du mit einer ID (eine Zahl) anstatt einer Überschrift (eine Zeichenkette) arbeitest, sollte der = Operator tadellos funktionieren.

Zum Login:
Dazu gleich 2 Dinge:
  1. MD5 ist nicht ratsam. Schon gar nicht ohne "Salz". Ich hoffe, ich verstoße jetzt gegen keine Foren-Regel. Daher an die Mods: Sollten die Links die ich hier poste, illegal sein oder gegen die Foren-Regeln verstoßen, entfernt sie bitte. Auf MD5Online kannst du einen MD5-Hash eingeben. Sollte dieser in der Datenbank der Seite gespeichert sein, liefert dir die Seite einen dazu passendes "Passwort". Viele gängige Passwörter wie "passwort", "123456" etc. sind eigentlich enthalten. Darüber hinaus ist auch die Anwendung von SHA1 nicht empfehlenswert. Auf FreeRainbowTables kannst du dir RainbowTables zu MD5 und SHA1 runterladen. Damit sind gängige Passwörter ziemlich schnell enttarnt. Doch selbst von der SHA2-Familie würde ich dir abraten. Denn MD5, SHA1 und die SHA2-Familie sind auf Geschwindigkeit ausgelegt. Das ist leider suboptimal wenn du Passwörter speichern willst. Gute Alternativen sind Hash-Algos, die auf Langsamkeit getrimmt sind. z.B. bcrypt (siehe: Schöner hashen mit bcrypt. Viel Spaß beim Lesen. ;-)
  2. Auch hier filterst du die Angaben nicht. Ein Angreifer könnte mühelos eine SQL-Injection durchführen. Dazu empfehle ich dir Allgemeines - Sicher programmieren - SQL-Injections Teil 1 auf Peterkropff.de
Ich hoffe, das konnte dir ein wenig helfen.
Weiterhin viel Erfolg.

~ Chris
Mit Zitat antworten
  #7 (permalink)  
Alt 15-03-2014, 12:02
CptRiot
 Registrierter Benutzer
Links : Onlinestatus : CptRiot ist offline
Registriert seit: Feb 2014
Beiträge: 13
CptRiot befindet sich auf einem aufstrebenden Ast
Standard

Super danke

ich werde das gleich mal umsetzen
Zitat:
Übrigens ... Du verwendest "action" um den zu löschenden Eintrag zu bestimmen. Ich denke nicht, dass das eine so gute Idee ist. Ich bin mir nichtmal sicher, ob das so gewollt ist. Nur mal so als Anmerkung.
das könnte natürlich erklären, warum das bearbeiten auch nicht funktioniert
( $_POST in andere Form übernehmen )


zu3: '
ja dass funktioniert dann auch war nur zu faul immer mit nem array dann den zur id passenden Rest auszulesen aber habe halt nicht bedacht, dass ja Überschriften öfter vorkommen könnten


zum Thema Login erstmal danke
das sind berechtigte Einwände, ich werde dat Login noch einmal Überarbeiten.
( hab imo. eh nur ein Account und das pw is denk ich auch net schlecht ( enthält so ziemlich jedes Zeichen )
Mit Zitat antworten
  #8 (permalink)  
Alt 15-03-2014, 12:31
anihex
 Registrierter Benutzer
Links : Onlinestatus : anihex ist offline
Registriert seit: Feb 2014
Beiträge: 28
anihex befindet sich auf einem aufstrebenden Ast
Standard

Hi CptRiot,

wenn du dir absolut sicher bist, das nur DU darauf zugreifen darf kannst du das Login auch stark vereinfachen. Es ist zwar kein guter Stil, aber folgendes funktioniert ziemlich gut und du läufst auch nicht Gefahr, dass jemand deine Daten allzu schnell ausliest:

login.php
PHP-Code:
<?php
  
require_once( "admin_datas.php" );
  
$Username sha1filter_inputINPUT_POST"username" ) );
  
$Password sha1filter_inputINPUT_POST"password" ) );

  if ( (
$Username == ADMIN_USER) && ($Password == ADMIN_PW ) ) {
    
$_SESSION"username" ] = filter_inputINPUT_POST"username" );
  }
?>
ADMIN_USER und ADMIN_PW wären dann Konstanten die nur in der login.php einbindest. Und die Datei "admin_datas.php" sollte sich an einen Ort befinden, wo definitv niemand sie aufrufen kann.
Aber wie gesagt: Das ist kein guter Stil. Aber es funktioniert.

Gruß
~ Chris
Mit Zitat antworten
  #9 (permalink)  
Alt 15-03-2014, 13:00
CptRiot
 Registrierter Benutzer
Links : Onlinestatus : CptRiot ist offline
Registriert seit: Feb 2014
Beiträge: 13
CptRiot befindet sich auf einem aufstrebenden Ast
Standard

Ja im Moment bin ich mir dessen sicher, aber da das nicht so bleiben soll nehme ich doch lieber bcrypt

(versuch jz erstmal den $_GET teil abzusichern und den quarkt mit bearbeiten undso ans laufen zu bekommen )



LG
Chrischy
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/104550-mysql-get-action-mit-_.html
Erstellt von For Type Datum
Schöner hashen mit bcrypt | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 20-04-2014 16:00
Mit Wetterdaten arbeiten: Yahoo Weather API | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 30-03-2014 15:38
GetMyeBaySelling | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 29-03-2014 07:11
Text in Bild einfügen: ImageLabeler | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 27-03-2014 12:23
Farben in der Kommandozeile nutzen | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 25-03-2014 12:02
Die Reise des großen ElePHPanten | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 21-03-2014 19:50
Wie erstelle ich einen Socket-Server in PHP? | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 20-03-2014 17:05
Info über MySQL Zertifizierungen? | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 20-03-2014 11:13
Die lieben Zeitzonen | PHP Gangsta - Der PHP Blog mit Praxisbezug This thread Refback 19-03-2014 01:56

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wieso hängt facebook GET Parameter mit "#" an und nicht mit "?" BananaJo PHP Developer Forum 10 02-07-2011 10:01
index.php?action Brauche dringen HILFE """ share-king PHP Developer Forum 37 17-08-2008 08:33
Aus Variableninhalt "\t" wird "\\t" bei übergabe über URL / GET FrozenEmotions PHP Developer Forum 12 07-09-2007 18:11
"form action" mit include enforcer Projekthilfe 10 27-11-2006 19:54
Problem mit Action "post" mikeHH PHP Developer Forum 15 29-12-2005 11:14

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:29 Uhr.