Gb->>Navigation-->$PHP_SELF dickes Problem

Hi,
ch moechte nur mal kurz darauf hinweisen, dass hier die ganze Zeit im Source das MySQL-Passwort zu sehen ist.
Danke , wie kann man sooo doof sein :eek:
ich habes geändert. Ich probiere die ganzen Tips jetzt mal aus. Bis hierhin erstmal vielen Dank an alle :)

EDIT::::
So ich habe noch ein wenig "gefeilt".
@Gumbo:
HTML:
`'.$table.'`
was sind das noch für kleine Zeichen vor und nach den Anführungsstrichen Die machen mir etliche Fehlermeldungen. Hier
PHP:
datum`  = "'.time().'"
            ':
        mysql_query($query);
bekomme ich auch eine (Wenn ich ein ; hinmache bleibt der Fehler aber)Dein Script sieht sehr gut aus, aber mit den Fehlern komme ich nicht klar.EDIT:::: es war das[ code=php ] am Anfang und die ":" das musste ein ";" sein prima Vielen Dank
@firstlord18 Deine Änderungen einwandfrei ich muss nur am Layout ein bissel was machen ..Vielen Dank
.
.
.
Gruss Didi
 
Zuletzt bearbeitet:
Die kleinen ` sind Backticks. Man muss sie nicht nutzten, aber man kann sie bei SQL-Queries nutzten. Dann werden sie immer um die Tabellen-Namen geschrieben!

PhpMyAdmin tut dies z.b. auch bei Backups:

Code:
CREATE TABLE `um_users_rights` (
  `users_id` int(10) NOT NULL default '0',
  `rights_id` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

So nur mal als Beispiel :)
 
Mit den so genannten Backtick werden in MySQL Datenbank-, Tabellen-, Index-, Spalten- und Alias-Namen explizit ausgezeichnet. Dies ist zwar in den meisten Fällen nicht nötig, sondern nur, wenn reservierte Wörter benutzt werden sollen, doch ich halte das Setzen für stilistisch und syntaktisch nur vorteilhaft. Denn allein wie viele Themen gab es bereits, in denen jemand versuchte, eine Tabelle mit der Spalte „alter“ anzulegen oder in einer Abfrage eine Berechnung mit „alter“ zu betiteln?
 
Hi, so das hätten wir. Ein DICKES DANKE an alle "Mitwirkenden" :)
Ich habe noch ein paar "Feinheiten" am Layout gemacht und das mit dem Datum geändert (ich brauchte da tstamp).
Ich werde mir Euren ganzen Links mal zu Gemüte führen.. Nochmal danke
Hier mal das (fast) fertige Werk klick
.
.
.
Gruss Dieter
 
Sry, ich will ja nix sagen, aber lass es vorerst nochmal sein mit dem GB ...

Ich muss schon sagen, da sind einige sicherheitslücken ://

Stell dein Gb lieber erst on, wenn dus wirklich perfektioniert hast :)

Hast du mysql_real_escape_string() eingebaut, bevor du die Sachen in die DB speicherst?

DIe Ausgabe solltest du mir htmlentities() laufen lassen (du siehst ja, ich konnte einfach thml code benutzten :/ ) ...

dann solltest du noch das am Anfang deiner Seite stehen haben:

PHP:
function removeSlashes($str)
	{
		if(is_array($str)) {
			return array_map(removeSlashes, $str);
		}
		else {
			return stripslashes($str);
		}
	}

if(get_magic_quotes_gpc()) {
			$_POST = removeSlashes($_POST);
			$_GET = removeSlashes($_GET);
		}

um durch die MagicQuotes hinzugefügte Slashes vor Anführungszeichen loszuwerden ...

Weil angenommen diese werden hinzugefügt, und dann machst du noch zusätzlich mysql_real_escape_string(), dann hast du noch mehr :D

Dann solltest du bei der Ausgabe noch stripslashes() verwenden.

Eine Plausibiliitätsprüfung bei der Mail adresse und der Homepage adresse sollte auch vorhanden sein!

Joa, verwende dann auch noch bitte trim() beim Speichern ;)

So, des wars erstmal ;)
 
Hi, Ja ne iss klar..da musste ja ein Haken an der sache sein:(
PHP:
`name`   = "'.mysql_real_escape_string($_POST['name']).'",
habe ich drin..war aber vorher auch schon. Den Teil von Dir habe ich nach dem Aufruf der Db eingefügt
PHP:
<div id="content_form">
 <h2><a href="http://www.so-klappt-es.de/secure/index.php">G&auml;stebuch</a></h2><br/><br/>
<?php

    $user     = 'xxx';  //hier denn usernamen angeben
    $pw       = 'xxx';          //hier das passwort eintragen
    $host     = 'localhost'; //hier die datenbankadresse angeben, meistens localhost
    $database = 'xxx';  //hier den db namen
    $table    = 'gbook';     //hier den namen der erstellten tabelle angeben

    $link = mysql_connect($host, $user, $pw); //verbindung zur db wird aufgebaut
    mysql_select_db($database, $link);
//Sicherheit
function removeSlashes($str)
    {
        if(is_array($str)) {
            return array_map(removeSlashes, $str);
        }
        else {
            return stripslashes($str);
        }
    }

if(get_magic_quotes_gpc()) {
            $_POST = removeSlashes($_POST);
            $_GET = removeSlashes($_GET);
        }  
//Sicherheit ende
    if( isset($_POST['action']) && $_POST['action'] == 'save' )
......
desweiteren einen mail check..
Jetzt funzut es natürlich nicht mehr:( angezigt wird es aber absenden bzw eintragen klappt nicht mehr
das ist der Mailcheck
PHP:
<?php
function check_email($email) {
  // RegEx begin
  $nonascii = "\x80-\xff"; # Non-ASCII-Chars are not allowed

  $nqtext = "[^\\\\$nonascii\015\012\"]";
  $qchar = "\\\\[^$nonascii]";

  $protocol = '(?:mailto:)';

  $normuser = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
  $quotedstring = "\"(?:$nqtext|$qchar)+\"";
  $user_part = "(?:$normuser|$quotedstring)";

  $dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9._-]*\\.';
  $dom_subpart = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*';
  $dom_tldpart = '[a-zA-Z]{2,5}';
  $domain_part = "$dom_subpart$dom_mainpart$dom_tldpart";

$regex = "$protocol?$user_part\@$domain_part";
  // RegEx end

  return preg_match("/^$regex$/",$email);
}
/*
Die Funktionsweise dazu unter:
Prüfung von E-Mail-Syntax über reguläre Ausdrücke
http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/
*/
?>
..und das ist der neue Code
PHP:
<div id="content_form">
 <h2><a href="http://www.so-klappt-es.de/secure/index.php">G&auml;stebuch</a></h2><br/><br/>
<?php
include ("check.php");
    $user     = 'xxx';  //hier denn usernamen angeben
    $pw       = 'xxx';          //hier das passwort eintragen
    $host     = 'localhost'; //hier die datenbankadresse angeben, meistens localhost
    $database = 'xxx';  //hier den db namen
    $table    = 'gbook';     //hier den namen der erstellten tabelle angeben

    $link = mysql_connect($host, $user, $pw); //verbindung zur db wird aufgebaut
    mysql_select_db($database, $link);
//Sicherheit
function removeSlashes($str)
    {
        if(is_array($str)) {
            return array_map(removeSlashes, $str);
        }
        else {
            return stripslashes($str);
        }
    }

if(get_magic_quotes_gpc()) {
            $_POST = removeSlashes($_POST);
            $_GET = removeSlashes($_GET);
        }  
//Sicherheit ende
    if( isset($_POST['action']) && $_POST['action'] == 'save' ) {
        $_POST['name'] = !empty($_POST['name'])
            ? $_POST['name']
            : 'unbekannt';

        $query = '
            INSERT INTO
                    `'.$table.'`
              SET
                    `name`   = "'.mysql_real_escape_string($_POST['name']).'",
                    `$email` = "'.mysql_real_escape_string($_POST['$email']).'",
                    `hp`     = "'.mysql_real_escape_string($_POST['hp']).'",
                    `inhalt` = "'.mysql_real_escape_string($_POST['inhalt']).'"
            ';
        mysql_query($query);

        $content = 'Der User '.$_POST['name'].' hat gerade einen eintrag in ihr gaestebuch vorgenommen!';
        @mail('dietertreffer@dietrude.de', 'Gaestebucheintrag', $content, 'From: '.$_POST['name'].' <'.$_POST[$email].'>');

    }

    if( isset($_GET['action']) && $_GET['action'] == 'neu' ) {

        echo '<p><a href="index.php?section=gaestebuch">zum Guestbook</a></p>';

?>
<form method="post" action="index.php?action=save&section=gaestebuch"> 
    <input type="hidden" name="action" value="save">
    <p><label class="form">Name</label>
        <input class="text" type="text" name="name"></p>
    <p><label class="form">E-Mail</label>
        <input class="text" type="text" name="$email"></p>
    <p><label class="form">Website</label>
        <input class="text" type="text" name="hp" value="http://"></p>
    <p><label class="form">Eintrag</label>
        <textarea class="text" name="inhalt" rows="6" cols="25"></textarea></p>
    <p><input class="button" type="submit" value="eintragen"></p>
</form>
<?php

    } else {

        echo '<p><a href="'.$_SERVER['PHP_SELF'].'?action=neu&section=gaestebuch">Neuer Eintrag</a></p>';

    }

    $query = '
        SELECT *, DATE_FORMAT(tstamp,"%d.%m.%y") AS tstamp_f FROM `'.$table.'` ORDER BY tstamp DESC LIMIT 0, 50 ';
    $result = mysql_query($query);

    while( $row=mysql_fetch_array($result, MYSQL_ASSOC) ) {
        echo '
<table width="70%">
  <tr>
    <td>Name:</td>
    <td class="gb">'.$row['name'].'</td>
    <td>Datum:</td>
    <td class="gb">'.$row['tstamp_f'].'</td>
  </tr>
  <tr>
    <td>Mail:</td>
    <td class="gb">'.$row[$email].'</td>
    <tr>
    <td>Homepage</td>
    <td class="gb">';
        if( $row['hp'] == '' ) {
            echo '<p>keine Homepage</p>';
        } else {
            echo '<p><a href="'.$row['hp'].'" target="_new">'.$row['hp'].'</a></td></tr>';
        }
	echo'</td></tr>
</table>
<p class="bgweiss">'.nl2br($row['inhalt']).'</p>';
    }

?>
<br/><br/>
<a class="top" href="">Top<img src="img/top.gif" alt="Top"/></a>
 </div>
ne ne war wohl sehr naiv zu denken ich wäre fertig :-)
.
.
.
Gruss Didi
 
nehm einfach folgenden mail check (function):

PHP:
function check_mail($email)
	{
		$email = trim($email);
		if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email)) {
			return true;
		} else {
			return false;;
		}
	}

und rufe es dann so auf:

PHP:
if(isset($_POST['$email'] && trim($_POST['$email'] != '' AND !check_mail$_POST['$email'] ) 
   echo "fehler, falsches mail-format!";

du solltest auch weitere formular felder validieren:

PHP:
if(!isset($_POST['feldname'] || trim($_POST['feldname') == '')
   echo 'Bitte geben sie was für feldname ein!';

feldname halt ersetzten und das so oft rein, so viele felder du validieren willst.
Ich meine, HP-Adresse solltest du z.b. nicht reinnehmen, da nicht jeder ne HP hat ;)
 
Hi, oki doki ich werde den ganzen "Kram" mal einbauen. Wie ich das sehe kommen wir mit den ganzen Erweiterungen so lamgsam an das Gb was ich am laufen hatte. :) . Dort waren (sind) die ganzen Sicherheitseinrichtungen enthalten. Es ist mir nur nicht gekungen dort eine "Blätterfunktion" einzubauen. Deshalb ja das neue..das zB war die Email und "feldname" Sicherheit
PHP:
if ($_POST['submit']) {
  // Tags entfernen
  $vname   = trim(strip_tags($vname));
  $ort     = trim(strip_tags($ort));
  $beitrag = trim(strip_tags($beitrag));
  $homepage = trim(strip_tags($homepage));
  // Variablen prüfen

  if ( $vname == "" ) { $tvname = "Bitte Deinen Namen eintragen !" ; }
  else { $tvname = "" ; }
  if ( $email == "" ) { $temail = "Bitte Deine E-mail Addi !" ; }
  else {
    if(check_email($email)) { $temail = "" ; }
    else { $temail = "Das ist keine Mail Addi!" ; }
  }
  if ( $beitrag == "" ) { $tbeitrag = "Bitte schreibe etwas!" ; }
  else { $tbeitrag = "" ; }

  // Mails versenden
  if ( $vname != "" && $beitrag != "" && $temail == "" ) {

    

    $webmaster = "";
    $betreff = "Gästebuch";
    $kopf1 = "Folgender Eintrag erfolgte:\n\n";
    $eintrag = "Name: ".$vname."\nOrt: ".$ort."\nEMail: ".$email."\n\n".$beitrag."\n";
    $loeschlink = "\n\nLöschen:
    ";
    $text1 = $kopf1.$eintrag.$loeschlink;
//45
    @mail($webmaster,$betreff,$text1,$headers);

    if ($email !=""){
      $kopf2 = "Sie haben in unser Gästebuch folgenden Eintrag vorgenommen:\n\n";
      $fuss2 = "\n\nVielen Dank für Ihren Eintrag\nDieter Treffer\nwww.sp-klappt-es.de";
      $text2 = $kopf2.$eintrag.$fuss2;
      @mail($email,$betreff,$text2,$headers);
du siehst sie ähnelt deiner sehr. Ich war schon auf dem richtigen Weg, nur die blöde Blätterfunktion wollte nicht klappen..Bei meinem alten konnte man auch keinen Code eingeben, oder ein Bild einfügen das war also fast schon perfekt.EDIT:::..Vielleicht könntet ihr mir ja bei der Blätterfuntion helfen*duck*
if(isset($_POST['$email'] && trim($_POST['$email'] != '' AND !check_mail$_POST['$email'] )
echo "fehler falsches mail-format!";
Hier ist ein fehler drin..
Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ',' or ')' in /b.php on line 48
ich glaube ich werde mich nochmal um eine Blätterfunktion für mein altes bemühen:(
Gruss Didi
 
Zuletzt bearbeitet:
den fehler hätteste du auch finden können:

Code:
 			 				if(isset($_POST) && trim($_POST != '' AND !check_mail$_POST ) 
    echo "fehler falsches mail-format!";
und bitte verwende hier die superglobalen arrays:


Code:
  $vname   = trim(strip_tags($vname)); 
  $ort	 = trim(strip_tags($ort)); 
  $beitrag = trim(strip_tags($beitrag)); 
  $homepage = trim(strip_tags($homepage));

du solltest jetzt wissn, was das ist ...
 
Hi,
if(isset($_POST['$email']) && trim($_POST['$email'] != '' AND !check_mail$_POST['$email'] )
jepp die klammer habe ich auch schon geändert, aber dann kommt ."syntax error, unexpected T_VARIABLE in /www/htdocs/w006"...
:::
Das mit den "superglobalen.. habe ich mir bei verschiedenen Seiten durchgelesen..leuchtet wohl ein. Nur hapert es daran es an einem verständlichen Beispiel zB hierbei
HTML:
$vname   = trim(strip_tags($vname)); 
  $ort	 = trim(strip_tags($ort)); 
  $beitrag = trim(strip_tags($beitrag)); 
  $homepage = trim(strip_tags($homepage));
umzusetzen...wie fange ich da an?
Das gehört übrigens zu meinem alten Gb die "trim" Klamotte hattest du doch in deiner "check Funktion enthalten"
.
.
.
Gruss Didi
 
Zurück