Problem mit Abfrage und Sicherheit (PHP, MYSQL)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
array
art
beschreibung
code
datenbank
datensatz
domain
holen
host
http
manual
post
problem
programmierung
resultat
string
stufe
url
vergessen
-
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ü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ü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?? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
tecfreak schrieb:
Dann ist ja gut, dass du die Frage nicht im Politik-Forum gestellt hast.
Ich hab leider ein Problem mit MYSQL UND PHP.
tecfreak schrieb:
Du machst da eine LIKE-Abfrage.
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:´
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 )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ü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
oder ähnlichem zu prüfen, ob es sich überhaupt um ein gültiges Format handelt. Siehe dazu preg_match.preg_match('/[^0-9_a-zA-Z\.]/', $domain);
Beitrag zuletzt geändert: 25.9.2013 3:31:04 von noxious -
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? -
Da habe ich ein Semikolon vergessen...
$domain_arr = array(); while($datensatz = mysql_fetch_assoc($resultat)){
-
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 -
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ü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>
-
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;
-
okey da funkt. schonmal.
Allerdings bekomme ich alle Ergebnisse aufinmal wenn ich nichts eingebe und dann möchte ich eine Message:
"Du hast glü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ü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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage