kostenloser Webspace werbefrei: lima-city


Problem mit Abfrage und Sicherheit (PHP, MYSQL)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tecfreak

    tecfreak hat kostenlosen Webspace.

    Ich hab leider ein Problem mit MYSQL UND PHP.
    ICh möchte Domains, Beschreibungen dazu usw aus der Datenbank holen und diese auf der Seite ausgeben wenn vorhanden.
    Das alles sollte aber mit mysql_real_escape_string und strip_tags gesichert werden.
    Ich hab aber die Probleme das ich nicht weiß wo, und das die Inhalte schon vorher ausgegeben werden, bevor ich sie eigtl. abgeragt habe:

    <body>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <input type="text" name="domain"/><br />
            <input type="submit" value="Pr&uuml;fen"/>
        </form>
    
        <?php
            mysql_connect($host, $username, $passwort);
            mysql_select_db($datenbank);
    
            $sql_query = "select domain, beschreibung, stufe, art from seiten where domain like '" . $_POST["domain"] . "%'";
    
            $resultat = mysql_query($sql_query);
            $nummer = mysql_num_rows($resultat);
    
            if($nummer==0) echo "Keine Seiten gefunden! Du hast Gl&uuml;ck";
            else{
            while ($datensatz = mysql_fetch_assoc($resultat))
            {
                echo $datensatz["domain"] . " , "
                . $datensatz["beschreibung"] . " , "
                . $datensatz["stufe"] . " , "
                . $datensatz["art"] . "<br />";
            }
            }
         ?>
    </body>


    Könnt ihr die 2 Sachen fixxen??
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. tecfreak schrieb:
    Ich hab leider ein Problem mit MYSQL UND PHP.
    Dann ist ja gut, dass du die Frage nicht im Politik-Forum gestellt hast.

    tecfreak schrieb:
    ICh möchte Domains, Beschreibungen dazu usw aus der Datenbank holen und diese auf der Seite ausgeben wenn vorhanden.
    Das alles sollte aber mit mysql_real_escape_string und strip_tags gesichert werden.
    Ich hab aber die Probleme das ich nicht weiß wo, und das die Inhalte schon vorher ausgegeben werden, bevor ich sie eigtl. abgeragt habe:´
    Du machst da eine LIKE-Abfrage.
    mysql_real_escape_string()
    escaped keine für LIKE relevanten Sonderzeichen wie % oder _. Wenn du das möchtest, musst du das also selbst escapen. ( Siehe: mysql_real_escape_string )
    <?php
    	if($isset($_POST['domain'])){
    		mysql_connect($host, $username, $passwort);
    		mysql_select_db($datenbank);
    		$domain = mysql_real_escape_string($_POST['domain']);
    		
    		$result = mysql_query("SELECT `domain`, `beschreibung`, `stufe`, `art` FROM `seiten` WHERE `domain` LIKE '$domain%';");
    		if(mysql_num_rows($result)!=0){
    			$domain_arr = array()
    			while($datensatz = mysql_fetch_assoc($resultat)){
    				$domain[] = $datensatz;
    			}
    		}
    	}
    ?><html>
    	<head></head>
    	<body>
    		<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    		
    			<input type="text" name="domain" /><br />
    			<input type="submit" value="Pr&uuml;fen" />
    		</form>
    <?php
    	if(isset($domain_arr)){
    		foreach($domain_arr as $key => $value){
    			echo "<p>";
    			echo addslashes($value['domain']) .", ";
    			echo addslashes($value['beschreibung']) .", ";
    			echo addslashes($value['stufe']) .", ";
    			echo addslashes($value['art']) ."<br /> ";
    			echo "</p>";
    		}
    	}
    ?>
    	</body>
    </html>
    Ungetestet und ohne Gewährleistung auf eventuelle Sicherheitslücken. Ich würde sowas auf jeden Fall nicht verwenden.

    Vielleicht wäre es in deinem Fall auch sinnvoller, via
    preg_match('/[^0-9_a-zA-Z\.]/', $domain);
    oder ähnlichem zu prüfen, ob es sich überhaupt um ein gültiges Format handelt. Siehe dazu preg_match.

    Beitrag zuletzt geändert: 25.9.2013 3:31:04 von noxious
  4. Autor dieses Themas

    tecfreak

    tecfreak hat kostenlosen Webspace.

    Danke erstmal. WIe würdest du es machen?
    Ich bekomme jetzt folgenen Code ausgegeben:
    Parse error: syntax error, unexpected 'while' (T_WHILE) in D:\Users\***\Desktop\Programmierung\Webserver\htdocs\***\datenbank.php on line 14

    Line 13-14:
    $domain_arr = array()
     while($datensatz = mysql_fetch_assoc($resultat)){


    Übrigens hast du einmal $result und einmal $resultat verwendet was natülich umgewandelt habe.
    Weißt/ihr worans liegen könnte?
  5. Da habe ich ein Semikolon vergessen...
    $domain_arr = array();
    while($datensatz = mysql_fetch_assoc($resultat)){
  6. Autor dieses Themas

    tecfreak

    tecfreak hat kostenlosen Webspace.

    thx.

    Jetzt gibt er mir das aus:


    Notice: Undefined variable: isset in D:\Users\***\Desktop\Programmierung\Webserver\htdocs\***\datenbank.php on line 6

    Fatal error: Function name must be a string in D:\Users\***\Desktop\Programmierung\Webserver\htdocs\***\datenbank.php on line 6

    Line 5-6:[code]
    //Abfrage aus der Datenbank
    if($isset($_POST['domain'])){[/code]

    Sorry^^


    Konnte ich selber beheben. Jetzt kommt das:

    Notice: Undefined variable: result in D:\Users\***\Desktop\Programmierung\Webserver\htdocs\***\datenbank.php on line 12

    Warning: mysql_num_rows() expects parameter 1 to be resource, null given in D:\Users\***\Desktop\Programmierung\Webserver\htdocs\***\datenbank.php on line 12

    Beitrag zuletzt geändert: 25.9.2013 16:52:30 von tecfreak
  7. So sollte das nun laufen...
    <?php
        if(isset($_POST['domain'])){
            $connection = mysql_connect($host, $username, $passwort) or die("Fehler bei der Verbindung zum SQL-Server:" . mysql_error($connection));
            mysql_select_db($datenbank, $connection) or die("Fehler bei der Auswahl der Datenbank:" . mysql_error($connection));
    		$domain = mysql_real_escape_string($_POST['domain'], connection);
          
            $result = mysql_query("SELECT `domain`, `beschreibung`, `stufe`, `art` FROM `seiten` WHERE `domain` LIKE '$domain%';", $connection);
            if($result){
                $domain_arr = array();
                while($datensatz = mysql_fetch_assoc($result)){
                    $domain[] = $datensatz;
                }
            }
        }
    ?><html>
        <head></head>
        <body>
            <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
             
                <input type="text" name="domain" /><br />
                <input type="submit" value="Pr&uuml;fen" />
            </form>
    <?php
        if(isset($domain_arr)){
            foreach($domain_arr as $key => $value){
                echo "<p>";
                echo addslashes($value['domain']) .", ";
                echo addslashes($value['beschreibung']) .", ";
                echo addslashes($value['stufe']) .", ";
                echo addslashes($value['art']) ."<br /> ";
                echo "</p>";
            }
        }
    ?>
        </body>
    </html>
  8. Autor dieses Themas

    tecfreak

    tecfreak hat kostenlosen Webspace.

    du hattest noch nen $ vergessen aber trozdem kommt das hier:
    Fatal error: [] operator not supported for strings in D:\Users\***\Desktop\Programmierung\Webserver\htdocs\***\datenbank.php on line 15

    14-15:
    while($datensatz = mysql_fetch_assoc($result)){
                    $domain[] = $datensatz;


  9. Ach verdammt...
    $domain_arr[] = $datensatz;
    anstelle von
    $domain[] = $datensatz;
  10. Autor dieses Themas

    tecfreak

    tecfreak hat kostenlosen Webspace.

    okey da funkt. schonmal.
    Allerdings bekomme ich alle Ergebnisse aufinmal wenn ich nichts eingebe und dann möchte ich eine Message:
    "Du hast gl&uuml;ck! Keine Seiten in der Datenbank!"

    Ich hab das mit der Message so gelöst:
    [code] $result = mysql_query("SELECT `domain`, `beschreibung`, `stufe`, `art` FROM `seiten` WHERE `domain` LIKE '$domain%';", $connection);
    if($result){
    $domain_arr = array();
    while($datensatz = mysql_fetch_assoc($result)){
    $domain_arr[] = $datensatz;
    }
    } else{
    echo "Du hast gl&uuml;ck! Keine Seiten in der Datenbank!";
    }
    }[/code]

    Leider funkt. das nicht.
    Kannst du das auch noch korrigieren?
    Ich bin dir echt dankbar!


    Hat sich erledigt ;)
    Danke an dich!

    Beitrag zuletzt geändert: 25.9.2013 22:09:47 von tecfreak
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!