Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
php/html/css chaos
#1
Hallo meine lieben,

vielleicht kann mir einer weiterhelfen. Da ich programmieren in meiner Freizeit betreibe ist mein Fachwissen auch relativ schlecht. Ich arbeite meist mit Bausteine und schaue wie es irgendwie passen könnte.
Deswegen wird der ein odere andere meinen Code als Chaos bezeichnen aber vielleicht kann trotzdem jemand helfen.

Ich habe eine Sotierung untereinander und möchte diese gerne in eine Art memory format bringen. (3 steht für Bild)
bzw. 3 x 3 x 3 steht auch für die Ansicht. xD

Code:
3x3x3
3x3x3
3x3x3

PHP-Code:
<?php
//Anzeige Startseite
$i 0;
$r "";
$w "";
$o "id";
// Sortierung
if ($_REQUEST["order"] == "id") {
    $o "id";

if (
$_REQUEST["order"] == "name") {
    $o "kuenstlername";

if (
$_REQUEST["richtung"] == "auf") {
    $r "DESC";

// Ende Sortierung
// Suche
if (!empty($_REQUEST["suche"])) {
    $w "WHERE kuenstlername LIKE '%" umbruch($_REQUEST["suche"]) . "%' OR videotitel LIKE '%" umbruch($_REQUEST["suche"]) . "%' OR text_d LIKE '%" umbruch($_REQUEST["suche"]) . "%' OR text_p LIKE '%" umbruch($_REQUEST["suche"]) . "%'";

// Ende Suche
$abfrage "SELECT id, kuenstlername FROM rd_kuenstler " $w " ORDER BY " $o " " $r " LIMIT " $seite "," $proseite;
$ergebnis mysql_query($abfrage);
while (
$row mysql_fetch_object($ergebnis)) {
    if ($i == 0) {
        $t "a";
    } else {
        $t "b";
    
//Anzeige Startseite
    ?>
                            <tr class="memoryanzeige<?php echo $t?>">
                            <td><b># <?php echo $row->id?></b></td>
                            <td><img src="img/mini/<?php echo $row->id?>.gif" border="0" alt=" <?php echo $row->kuenstlername?>" /></br></br></td>
                            <td><a href="steckbrief.php?id=<?php echo $row->id?>"><?php echo $row->kuenstlername?></a></td>    
                            </td>
                        </tr>                
                        <?php
    $i
++;


?>
Code:
#memoryanzeige {
    border:#000 1px solid;
    width:71px;
    height:71px;
    float:left;
    margin:10px;
    padding:20px;
    font-size:64px;
    cursor:pointer;
    text-align:center;
}

Würde mich über Rückmeldung freuen
Achtung
 nehmen Sie diese Beiträge nicht ernst! Das MyBB wissen beruht auf
(letzter Stand: MyBB 1.2.8)
Zitieren
#2
Smile
Ich habe zwar keine Ahnung, was genau du vorhast, aber folgendes musst du nochmal überdenken:

1.
Code:
$abfrage = "SELECT id, kuenstlername FROM rd_kuenstler " . $w . " ORDER BY " . $o . " " . $r . " LIMIT " . $seite . "," . $proseite;
Die Variablen $seite und $proseite sind nicht definiert. Daher führt die SQL zwangsläufig zu einem Fehler, weil das Komma einfach so nackt da rumsteht.

2.
Code:
<tr class="memoryanzeige<?php echo $t; ?>">
Hier wird entweder ein a oder b angehangen. Es gibt abr keine CSS-Klasse #m...anzeigea und #m...anzeigeb. Hier ird es nötig zei Klassen zu definieren.
Außerdem nutzt du eine Klasse, in CSS jedoch die Definition des Identifiers:
id="" --> #memory...
class="" --> .memory...

Was ist der Unterschied zwischen a und b. Vielleicht nur eine andere Hintergrundfarbe des Rasters!?

3.
Um unnötige Fehlermeldungen zu vermeiden, würde ich das gesamte ORDER in eine Variable stecken, ebenso das gesamte LIMIT:
Code:
if ($_REQUEST["order"] == "id") {
    $o = "ORDER BY id";
...
$limit = "LIMIT " . $seite . ", " . $proseite;
...
$abfrage = "SELECT id, kuenstlername FROM rd_kuenstler $w $o $r $limit";

4.
Code:
if ($_REQUEST["order"] == "id") { ...
Hier würde ich besser erst abfragen, ob order überhaupt übergeben und belegt ist und besser mit einem case/switch arbeiten, um nur diesen beide erlaubten Werte zu akzeptieren und bei Übergabe jedes anderen Wertes den Standard id oder name festsetzen:
Code:
if (isset($_REQUEST["order"]) && $_REQUEST["order"] != "") {
  switch ($_REQUEST["order"]) {
    case "id":
      $o = "id";
      break;
    case "name":
      $o = "kuenstlername";
      break;
    default:
      $o = "id;"
  }
}

[ExiTuS]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#3
Unabhängig von der Fragestellung enthält der Code schwerwiegende Sicherheitslücken (inbesondere SQL-Injection und XSS). Zudem ist die mysql-Erweiterung seit vielen Jahren deprecated und mit PHP 7.0 komplett entfernt worden.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#4
EXITUS hat dich zwar auf die leeren Variablen hingewiesen, aber hat was wesentliches vergessen. Beschäftige dich bitte unbedingt mit PDO oder MySQLi. Damit du Injections ausschließt, bitte Parameter binden und mit prepared Statements arbeiten. Meiner Meinung nach solltest du PDO bevorzugen, da Objekt-orientiert.

MySQL gibt es seit 7.0 nicht mehr in PHP und wurde bereits vorher als veraltet erklärt.

Formfelder bitte unbedingt mit htmlspecialchars() oder htmlentities() überprüfen. Andernfalls ebenfalls anfällig für Injections oder eben besonders XSS. Darüber könnte JavaScript eingeschleust werden. Einfacher Test: Gebe <script>alert("Hallo")</script> in ein Formularfeld ein und echo den Inhalt des Feldes in den Body

Es gilt in der Webentwicklung IMMER.. (ja immer): Vertraue NIEMALS der Eingabe von Benutzern. Überprüfe besser 1x mehr als zu rudimentär

Bitte nimm dir die Worte zu Herzen falls du wirklich weiter lernst.
Zitieren