PHP GET variable auf Inhalt prüfen
nobodyisperfect (Level 1) - Jetzt verbinden
20.07.2011, aktualisiert 01.08.2011, 6975 Aufrufe, 6 Kommentare
Hallo an alle da DRAUSEN ^^
PHP Variable $_GET[''] macht mich verrückt!
Kurze Info zu meinen Server:
OS : Linux 11.3
Module: apache2 mit PHP Modulen / MySQL-Datenbank
Nutzung: Webserver
Mein Problem:
Ich lasse eine Variable übergeben an ein php Dokument wo die Übergabe abgefangen wird mit $_GET[" "]
sieht wie folgt aus:
Document "musik.php"
Also Übergabe von Wert "gen" und "int" wird von Dokument "musik_show.php" abgefangen mit $_GET['gen'] und $_GET['int']
Dokument "musik_show.php" sieht wie folgt aus:
Hier das Problem:
Irgendwo ist ein Fehler drin und weis nicht wo bzw wieso.
Möchte Prüfen lassen ob die $_GET['gen'] Variable leer ist aber funktioniert nicht.
Bräuchte wirklich eure Hilfe hab schon rauf und runter gebingt aber irgendwie find ich dazu weder ne lösung noch versteh ich des eigentliche Problem.
Vielen Dank für eure Hilfe.
nobodyisperfect
OS : Linux 11.3
Module: apache2 mit PHP Modulen / MySQL-Datenbank
Nutzung: Webserver
Mein Problem:
Ich lasse eine Variable übergeben an ein php Dokument wo die Übergabe abgefangen wird mit $_GET[" "]
sieht wie folgt aus:
Document "musik.php"
$abf = mysql_query("SELECT * FROM musik");
while ($a = mysql_fetch_row($abf)) {
echo"
<tr>
<td><li><a id='mures' href='musik_show.php?gen=$a[4]'>$a[4]</a></li></td>
<td><li><a id='mures' href='musik_show.php?int=$a[1]'>$a[1]</a></li></td>
</tr>
";
};
Dokument "musik_show.php" sieht wie folgt aus:
$ggen = $_GET['gen'];
$gint = $_GET['int'];
$abfg = mysql_query("SELECT * FROM musik WHERE interpret LIKE $gint");
$abfi = mysql_query("SELECT * FROM musik WHERE genre LIKE $ggen");
echo "<table><tr>";
if (!isset($_GET["gen"])) {
while($a = mysql_fetch_row($abfi)) {
echo "<td>$a[1]</td>";
}
else {
while ($b = mysql_fetch_row($abfg)) {
echo "<td>$b[4]<td>";
}
}
}
echo "</tr></table>";
Irgendwo ist ein Fehler drin und weis nicht wo bzw wieso.
Möchte Prüfen lassen ob die $_GET['gen'] Variable leer ist aber funktioniert nicht.
Bräuchte wirklich eure Hilfe hab schon rauf und runter gebingt aber irgendwie find ich dazu weder ne lösung noch versteh ich des eigentliche Problem.
Vielen Dank für eure Hilfe.
nobodyisperfect
Kommentar vom Moderator masterG am 01.08.2011 um 13:21:52 Uhr
Formartierungshilfe beachten
6 Antworten
- LÖSUNG nxclass schreibt am 20.07.2011 um 22:35:48 Uhr
- LÖSUNG nobodyisperfect schreibt am 20.07.2011 um 23:33:57 Uhr
- LÖSUNG dog schreibt am 21.07.2011 um 04:07:59 Uhr
- LÖSUNG SlainteMhath schreibt am 21.07.2011 um 09:01:30 Uhr
- LÖSUNG nobodyisperfect schreibt am 20.07.2011 um 23:33:57 Uhr
- LÖSUNG blackwinged schreibt am 21.07.2011 um 10:26:40 Uhr
- LÖSUNG nobodyisperfect schreibt am 21.07.2011 um 13:44:16 Uhr
LÖSUNG 20.07.2011 um 22:35 Uhr
Übergabe von Wert "gen" und "int"
abgefangen mit $_GET['gen'] und $_GET['int']
.. nein es ist $_GET['gen'] ODER $_GET['int']abgefangen mit $_GET['gen'] und $_GET['int']
Prüfen kannst du ob ein Schlüssel in einem Array ist z.B.mit
if ( isset( $_GET['gen'] ) ) {
// ...
}
Nebenbei: überlege mal mit etwas Fantasie was in der musik_show.php mit der SQL Abfrage passiert wenn jemand die URL manipuliert.
LÖSUNG 20.07.2011 um 23:33 Uhr
Hi Danke für die schnelle Antwort!
Hab schon zuvor mit "isset" versucht mit "empty" geht aber einfach net werd net schlau draus.
Hier mal beide Dateien komplett:
musik.php
<?php
echo"
<!DOCTYPE HTML PUBLIC ' -W3CDTD HTML 4.01 Transitiona lEN' 'http:www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title>Musik</title>
<link rel=stylesheet type=text/css href=global.css>
<link rel=stylesheet type=text/css href=nav.css>
<script type=text/javascript src=nav.js></script>
</head>
<body>
";
include 'head.html';
include 'nav.html';
include 'musik.html';
echo "
<table id='musik'>
<tr>
<td>Genre</td>
<td>Interpret</td>
</tr>
";
include 'logindb.php';
mysql_select_db("elysionpw");
$abf = mysql_query("SELECT * FROM musik");
while ($a = mysql_fetch_row($abf)) {
echo"
<tr>
<td><li><a id='mures' href='musik_show.php?gen=$a[4]&int=$a[1]'>$a[4]</a></li></td>
<td><li><a id='mures' href='musik_show.php?int=$a[1]&gen=$a[4]'>$a[1]</a></li></td>
</tr>
";
};
echo"
</table>
";
echo"
</body>
</html>
";
?>
musik_show.php
<?php
$ggen = $_GET['gen'];
$gint = $_GET['int'];
echo"
<!DOCTYPE HTML PUBLIC ' -W3CDTD HTML 4.01 Transitiona lEN' 'http:www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title>Musik</title>
<link rel=stylesheet type=text/css href=global.css>
<link rel=stylesheet type=text/css href=nav.css>
<script type=text/javascript src=nav.js></script>
</head>
<body>
";
include 'head.html';
include 'nav.html';
echo "
<table id='musik'>
<tr>
<td>$ggen $gint</td>
</tr>
</table>
<br>
<br>
";
include 'logindb.php';
mysql_select_db("elysionpw");
$abfg = mysql_query("SELECT * FROM musik WHERE interpret LIKE $gint");
$abfi = mysql_query("SELECT * FROM musik WHERE genre LIKE $ggen");
echo "<table><tr>";
if ( isset( $_GET['gen'] ) ) {
while($a = mysql_fetch_row($abfi)) {
echo "<td>$a[1]</td>";
}
else {
while ($b = mysql_fetch_row($abfg)) {
echo "<td>$b[4]<td>";
}
}
}
echo "</tr></table>";
echo"
</body>
</html>
";
?>
Werd zum Hirsch......
>Nebenbei: überlege mal mit etwas Fantasie was in der musik_show.php mit der SQL Abfrage passiert wenn jemand die URL >manipuliert.
ist nur für private zwecke aber an und für sich hast schon recht
Hab schon zuvor mit "isset" versucht mit "empty" geht aber einfach net werd net schlau draus.
Hier mal beide Dateien komplett:
musik.php
<?php
echo"
<!DOCTYPE HTML PUBLIC ' -W3CDTD HTML 4.01 Transitiona lEN' 'http:www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title>Musik</title>
<link rel=stylesheet type=text/css href=global.css>
<link rel=stylesheet type=text/css href=nav.css>
<script type=text/javascript src=nav.js></script>
</head>
<body>
";
include 'head.html';
include 'nav.html';
include 'musik.html';
echo "
<table id='musik'>
<tr>
<td>Genre</td>
<td>Interpret</td>
</tr>
";
include 'logindb.php';
mysql_select_db("elysionpw");
$abf = mysql_query("SELECT * FROM musik");
while ($a = mysql_fetch_row($abf)) {
echo"
<tr>
<td><li><a id='mures' href='musik_show.php?gen=$a[4]&int=$a[1]'>$a[4]</a></li></td>
<td><li><a id='mures' href='musik_show.php?int=$a[1]&gen=$a[4]'>$a[1]</a></li></td>
</tr>
";
};
echo"
</table>
";
echo"
</body>
</html>
";
?>
musik_show.php
<?php
$ggen = $_GET['gen'];
$gint = $_GET['int'];
echo"
<!DOCTYPE HTML PUBLIC ' -W3CDTD HTML 4.01 Transitiona lEN' 'http:www.w3.org/TR/html4/loose.dtd'>
<html>
<head>
<title>Musik</title>
<link rel=stylesheet type=text/css href=global.css>
<link rel=stylesheet type=text/css href=nav.css>
<script type=text/javascript src=nav.js></script>
</head>
<body>
";
include 'head.html';
include 'nav.html';
echo "
<table id='musik'>
<tr>
<td>$ggen $gint</td>
</tr>
</table>
<br>
<br>
";
include 'logindb.php';
mysql_select_db("elysionpw");
$abfg = mysql_query("SELECT * FROM musik WHERE interpret LIKE $gint");
$abfi = mysql_query("SELECT * FROM musik WHERE genre LIKE $ggen");
echo "<table><tr>";
if ( isset( $_GET['gen'] ) ) {
while($a = mysql_fetch_row($abfi)) {
echo "<td>$a[1]</td>";
}
else {
while ($b = mysql_fetch_row($abfg)) {
echo "<td>$b[4]<td>";
}
}
}
echo "</tr></table>";
echo"
</body>
</html>
";
?>
Werd zum Hirsch......
>Nebenbei: überlege mal mit etwas Fantasie was in der musik_show.php mit der SQL Abfrage passiert wenn jemand die URL >manipuliert.
ist nur für private zwecke aber an und für sich hast schon recht
LÖSUNG 21.07.2011 um 04:07 Uhr
LÖSUNG 21.07.2011 um 09:01 Uhr
Moin,
auch wenn's jetzt nichts mit der eigentlichen Frage zu tun hat, aber solchem Code
Kräuseln sich mir die Fußnägel.
Frage: was passiert, wenn $_GET['gen'] den Wert "1; DROP TABLE MUSIC; --" hat?
Bitte, bitte benutze diese Funktion: http://php.net/manual/de/function.mysql-real-escape-string.php
Nähers dazu: http://de.wikipedia.org/wiki/SQL-Injection
lg,
Slainte
auch wenn's jetzt nichts mit der eigentlichen Frage zu tun hat, aber solchem Code
$ggen = $_GET['gen'];
[...]
$abfi = mysql_query("SELECT * FROM musik WHERE genre LIKE $ggen");
Frage: was passiert, wenn $_GET['gen'] den Wert "1; DROP TABLE MUSIC; --" hat?
Bitte, bitte benutze diese Funktion: http://php.net/manual/de/function.mysql-real-escape-string.php
Nähers dazu: http://de.wikipedia.org/wiki/SQL-Injection
lg,
Slainte
LÖSUNG 21.07.2011 um 10:26 Uhr
Hi,
1. Nimm dir die Kommentare zur Sicherheit bitte zu Herzen! Besser ist immer:
Das muss dir in Fleisch und Blut übergehen ;)
2. Hinter dem LIKE in deiner Query wird ein String erwartet, aber (aus Sicht von MySQL) ein Spaltenname übergeben.
So dürfte es funktionieren:
Gruß,
blackwinged
1. Nimm dir die Kommentare zur Sicherheit bitte zu Herzen! Besser ist immer:
$ggen = mysql_real_escape_string($_GET['gen']);
$gint = mysql_real_escape_string($_GET['int']);
2. Hinter dem LIKE in deiner Query wird ein String erwartet, aber (aus Sicht von MySQL) ein Spaltenname übergeben.
So dürfte es funktionieren:
$abfg = mysql_query("SELECT * FROM musik WHERE interpret LIKE '%$gint%'");
$abfi = mysql_query("SELECT * FROM musik WHERE genre LIKE '%$ggen%'");
blackwinged
LÖSUNG 21.07.2011 um 13:44 Uhr