php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.12.2008, 09:21  
Dominik
Gast
 
Beiträge: n/a
Standard

@David

das ich die ' maskieren muss da man sonst ja nen angriff starten kann ist mir klar

die <> soll man wohl dann maskieren wegen zb xss?

@
skietz

ich sagte doch bereits

nach dem
mysql_query($loeschen) or die(mysql_error());
}

machst du mal:
mysql_query($loeschen) or die(mysql_error());
header("Location: diedatei.php");
}
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.12.2008, 09:46  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
Zitat von Dominik Beitrag anzeigen
die <> soll man wohl dann maskieren wegen zb xss?
Ja, oder weil es einfach Dein HTML kaputt macht.
Es kann natürlich auch sein, dass Du HTML oder sonst irgendein Markup in der Datenbank speichern und auch als solches ausgeben willst, durchaus möglich. Aber in der Regel musst Du in irgendeiner Form dafür sorgen, dass Benutzer nicht beliebiges HTML/Javascript/sonstwas in Deine Seite einbringen können.
David ist offline  
Alt 28.12.2008, 09:50  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Du kannst das Lösch-Statement auch einfach ausführen lassen, bevor die (verbliebenen) Datensätze abgefragt und angezeigt werden
PHP-Code:
if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR'])
{ die(
"Du hast keinen Zugriff auf diese Datei"); }

// Jedes Mal neu gegen die Session-Werte vergleichen?
// Gibt es dafür einen guten Grund?
if(!login_right($_SESSION['user'], $_SESSION['pw']))
{ die(
"Du hast keinen Zugriff auf diese Datei"); }


// Erst löschen...
if ( isset($_GET['id']) ) {
  
$id mysql_real_escape_string($_GET['id']);
  
$loeschen "DELETE FROM login_gruss WHERE id = '$id'";
  echo 
'<pre>Debug: 'htmlspecialchars($loeschen), '</pre>';
  
mysql_query($loeschen) or die(mysql_error());
  echo 
'<p>Anzahl gelöschter Datensätze:'mysql_affected_rows(), "</p>\n";
}  

// ...dann anzeigen
$abfrage "SELECT * FROM login_gruss ORDER BY id";
$ergebnis mysql_query($abfrage) or die(mysql_error());
while(
$row mysql_fetch_object($ergebnis)) ... 
Wenn Du die Löschaktion über _GET anstoßen lässt, reicht es übrigens, wenn man Dir (oder dem eingeloggten Benutzer) eine HTMl Seite mit einem "hinterhältigen" <img> unterjubelt.
Code:
<img src="http://xyz/dein/script.php?id=5" />
und weg ist der Eintrag.

Geändert von David (28.12.2008 um 09:55 Uhr).
David ist offline  
Alt 28.12.2008, 10:23  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 6
skietz befindet sich auf einem aufstrebenden Ast
Standard

So geschafft, nach dem ausschlafen war mein Verstand wieder zurückgekommen Ich bendanke mich vielmals für eure Hilfe... Jetzt kommt für mich wieder ein langer Tag, denn nach dem Grußsystem werd ich mich jetzt ran machen und einen Sendeplan proggen... Man lernt ja nie aus. Die ganze Zeit hab ich mich gegen MYSQL gewehrt ;P...

LG Stefan

Edit
Brauche nochmals eure Hilfe... Das Formular, das in die Datenbank schreibt funktioniert zu gut!!! es schreibt direckt beim Öffnen´schon einen Datensatz in die Datenbank... Wieso dass denn?

PHP-Code:
<?php 
session_start
();
require_once(
'login_config.php');
require_once(
'login_include.php');
?>
<style type="text/css">
<!--
.Stil1 {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
}
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
}
body {
    background-image: url(../img/index_r44_c11.jpg);
    background-repeat: repeat;
    margin-left: 5px;
    margin-right: 0px;
    margin-top: 5px;
    margin-bottom: 0px;
}
-->
</style>


<form method="post" action="gruss.php">

  <span class="Stil1">Nickname:<br /> 
  <input name="nickname" type="text" size="22">
  <br />
  <br>
  Dein Gruss:<br />
  <textarea name="gruss" cols="22" rows="10"></textarea>
  </span><br>

<input type="submit" name="Button" value="Abschicken">

</form>

<?php
  $nickname 
$_POST["nickname"];
  
$gruss $_POST["gruss"];


$eintrag "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";


$eintragen mysql_query($eintrag);
?>

Geändert von skietz (28.12.2008 um 10:29 Uhr).
skietz ist offline  
Alt 28.12.2008, 10:35  
Dominik
Gast
 
Beiträge: n/a
Standard

weil du eine if bruachst


<?php
$nickname
= $_POST["nickname"];
$gruss = $_POST["gruss"];
if($nickname!="" && $gruss !="")
{

$eintrag = "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";


$eintragen = mysql_query($eintrag);
}
?>


aber achtung $nickname und $grus mit mysql real string sichern
 
Alt 28.12.2008, 10:47  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 6
skietz befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Dominik Beitrag anzeigen
weil du eine if bruachst


<?php
$nickname
= $_POST["nickname"];
$gruss = $_POST["gruss"];
if($nickname!="" && $gruss !="")
{

$eintrag = "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";


$eintragen = mysql_query($eintrag);
}
?>


aber achtung $nickname und $grus mit mysql real string sichern

Und wie funktioniert das mit dem real string bei mir kommt nun HTTP 500 Interner server fehler...

PHP-Code:
<?php
  $nickname 
$_POST["nickname"];
  
$gruss $_POST["gruss"];
if(
$nickname!="" && $gruss !="")
{
            
mysql_real_escape_string($nickname),
            
mysql_real_escape_string($gruss));

$eintrag "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";


$eintragen mysql_query($eintrag);
?>
skietz ist offline  
Alt 28.12.2008, 10:55  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Ich glaube, da liegt noch ein generelles Missverständnis über die Funktionsweise von PHP vor.
Du scheinst zu glaube, dass PHP zwischen
Zitat:
<form method="post" action="gruss.php">

<span class="Stil1">Nickname:<br />
<input name="nickname" type="text" size="22">
<br />
<br>
Dein Gruss:<br />
<textarea name="gruss" cols="22" rows="10"></textarea>
</span><br>

<input type="submit" name="Button" value="Abschicken">

</form>
und
Zitat:
<?php
$nickname = $_POST["nickname"];
$gruss = $_POST["gruss"];
in irgendeiner Weise auf eine Interaktion wartet. Das ist nicht so.
Dein Skript wird bei jeder Anfrage komplett von oben nach unten abgearbeitet.
Sämtliche Ausgabe (nicht der Quellcode, nur die Ausgaben) werden an den Browser gesendet. Sobald das passiert ist, ist PHP fertig und wird beendet.
Das HTML Formular "lebt" nur im Browser. Sämtliche Eingaben finden im Browser statt - jenseits von PHP. Bis das Formular abgeschickt wird und der Browser drauf hin einen neuen HTTP Request an den Webserver sendet, ist PHP völlig unbeteiligt.
Wie Dominik schon schrieb, musst Du zum Beispiel mit if abtesten, ob im aktuellen Request (und damit im aktuellen Durchlauf Deines Skripts) die entsprechenden Parameter vorhanden sind.
Auch in diesem Fall kannst Du den "Nutzcode" wieder an den Anfang des Skripts schreiben
PHP-Code:
<?php 
session_start
();
require_once 
'login_config.php';
require_once 
'login_include.php';
if ( isset(
$_POST["nickname"], $_POST["gruss"]) ) {
  
// <-- hier ggf. noch auf leere Zeichenketten abtesten -->
  
  
$nickname mysql_real_escape_string($_POST["nickname"]);
  
$gruss mysql_real_escape_string($_POST["gruss"]);
  
$eintrag "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";
  
$eintragen mysql_query($eintrag) or die(mysql_error());
}
?>
<html>
  <head>
    <title>xyz</title>
    <style type="text/css">
    <!--
    .Stil1 {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 11px;
    }
    body,td,th {
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size: 11px;
    }
    body {
        background-image: url(../img/index_r44_c11.jpg);
        background-repeat: repeat;
        margin-left: 5px;
        margin-right: 0px;
        margin-top: 5px;
        margin-bottom: 0px;
    }
    -->
    </style>
  </head>
  <body>
    <form method="post" action="gruss.php">
      <p class="Stil1">
        Nickname:
        <br /> 
        <input name="nickname" type="text" size="22" />
        <br />
        Dein Gruss:
        <br />
        <textarea name="gruss" cols="22" rows="10"></textarea>
      </p>
      <div>
        <input type="submit" name="Button" value="Abschicken" />
      </div>
    </form>
  </body>
</html>
David ist offline  
Alt 28.12.2008, 11:06  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 6
skietz befindet sich auf einem aufstrebenden Ast
Standard

Uiuiuiui da liegt noch viel lernen vor mir, muss ich feststellen... Puh Das script funktioniert nun do wie ich mir das vorstelle. Nun noch eine Frage zu verständniss:

- Das heisst also das es erstens egal ist, ob der PHP code vor oder nach dem HTML code ist?
- Der Befehl if ( isset($_POST["nickname"], $_POST["gruss"]) ) { testet ob in den Eingabefeldern des HTML code eingaben getägtigt wurde die weitergeleitet werden müssen???

Hoffentlich hab ich nu verstanden
skietz ist offline  
Alt 28.12.2008, 11:41  
Dominik
Gast
 
Beiträge: n/a
Standard

if ( isset($_POST["nickname"], $_POST["gruss"]) ) {

ich übersetze mal für dich

fall die variable post nickname und die variable postgruss existiert bzw inhalt hat so mache das was zwischen den klammern steht

 
Alt 28.12.2008, 11:47  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
Zitat von skietz Beitrag anzeigen
- Das heisst also das es erstens egal ist, ob der PHP code vor oder nach dem HTML code ist?
In diesem Fall ja.
Wie gesagt: Dein Skript wird eh immer von oben bis unten ausgeführt.
Du tippst den url im Browser ein, Skript läuft durch.
Du schickst das Formular ab, Skript läuft durch.
Wenn Du etwas im HTML Dokument ausgeben willst, kommt es natürlich auf die Position des Codes an


Zitat:
Zitat von skietz Beitrag anzeigen
- Der Befehl if ( isset($_POST["nickname"], $_POST["gruss"]) ) { testet ob in den Eingabefeldern des HTML code eingaben getägtigt wurde die weitergeleitet werden müssen???
Jein. isset() testet ab, ob eine Variable (oder ein Feldelement) gesetzt ist.
Aber wenn nichts im Formular eingegeben wurde, schickt der Browser trotzdem die Parameter ab, als leere Zeichenketten. Dann ist $_POST['nickname'] eine leere Zeichenkette, aber isset($_POST['nickname']) liefert trotzdem true.
Zum Ausprobieren:
PHP-Code:
<?php
$x 
''// leere Zeichenkette
if ( isset($x) ) {
  echo 
'x vorhanden';
}
Allerdings liefert isset() false, wenn eine Variable explizit auf NULL gesetzt wird.
PHP-Code:
<?php
$x 
null;
if ( isset(
$x) ) {
  echo 
'x vorhanden';
}
Wenn Du also abtesten willst, ob wirklich etwas eingegeben wurde, solltest Du erst führende und abschließende Leerzeichen entfernen und dann zum Beispiel die Länge der Zeichenkette abtesten.
Es gibt auch noch die Funktion empty().
Das funktioniert dann wie ein isset() gefolgt von einem Typecast (Umwandlung) nach bool.
PHP-Code:
if ( isset($x) && true===(bool)$x
Wie der Typecast funktioniert, kannst Du unter PHP: Booleans - Manual nachlesen - wenn Du willst.

PHP-Code:
<?php
$notice 
null;
if ( isset(
$_POST["nickname"], $_POST["gruss"]) ) { 
  
$nickname trim($_POST["nickname"]);
  
$gruss trim($_POST["gruss"]); 
  if ( 
strlen($nickname) ) {
    echo 
'nickname fehlt. Mindestens zwei Zeichen eingeben.';
  }
  else if ( 
strlen($gruss) ) {
    echo 
'Grussbotschaft fehlt. Mindestens drei Zeichen eingeben.';
  }
  else {
    
$nickname_sql mysql_real_escape_string($nickname);
    
$gruss_sql mysql_real_escape_string($gruss);
    
$eintrag "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname_sql', '$gruss_sql')";
    
mysql_query($eintrag) or die(mysql_error());
    
    
$notice 'folgende Nachricht wurde eingetragen:
      <fieldset><legend>' 
htmlspecialchars($nickname) . '<legend>
        ' 
htmlspecialchars($gruss) . '
      </fieldset>'
;
  }
}
?>
<html>
  <head>
    <title>xyz</title>
    <style type="text/css">
      ...
    </style>
  </head>
  <body>
    <?php if (isset($notice) ) { echo $notice; } ?>
    <form method="post" action="gruss.php">
David ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
2 Tabellen aus unterschiedlichen Datenbank synchron halten. stefanjann Datenbanken 0 29.10.2008 15:47
Kann nicht zur Datenbank verbinden kate018 Datenbanken 5 08.10.2008 00:32
Direkten Zugriff auf Datenbank verhindern heyho PHP Tipps 2008 7 07.02.2008 11:41
Wann Datenbank öffnen/schließen tayke PHP Tipps 2006 10 24.05.2006 17:29
Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
Mehrere Anwendungen eine Datenbank... Datenbanken 5 15.08.2005 11:22
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:31
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:29
Eintrag in Datenbank mittels Formular? Datenbanken 5 16.12.2004 17:36
[Erledigt] MySQL findet Datenbank nicht Datenbanken 10 21.10.2004 09:14


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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum