Probleme mit SQL array und smarty

crus4rd1990

Grünschnabel
Servus :)

Ich habe da ein kleines Problem an dem ich gerade etwas hänge :/
Ich habe eine tolle liste mit autos in meiner DB möchte diese aber
auch sortieren lassen z.B: nach Alter, Name usw.

Um nicht 1000000 querys zu schreiben, wollte ich das ganze als array machen
und den passenden dann in den query laden lassen.

In meiner .php datei wo auf das template (smarty .tpl) verlinkt wird muss ich ja die
Sortierung direkt abfangen und ansprechen lassen.

Ich muss sagen, ich bin noch recht neu in sachen php.

Aber bevor ich noch hunderte Worte schreibe, zeige ich euch einfach mal kurz den Code

PHP:
     public static function getAllCarsSorted($db) {
        $sort = array(
                0 => "age ASC", 
                1 => "age DESC", 
                2 => "genre ASC",
                3 => "genre DESC",
                4 => "name ASC",
                5 => "name DESC");
        foreach($sort as $sortObject) {
            $sql = "SELECT * FROM `cars` ORDER BY $sortObject";
}
            $result = $db->getDatabaseConnection()->query($sql);
            while ($row = $result->fetch_assoc()) {
                $cars[$row['ID']] = $row['name'];
        
            return $cars;
        }
     }


in der php datei habe ich einen lösungsansatz - dieser scheint jedoch falsch zu sein

PHP:
if(isset($_GET['option']) && isset($_GET['sort[]'])) $cars = Cars::getAllCarsSorted($db, $_GET['sort[]']);
else $cars = Cars::getAllCarsAsObjectsLimited($db);


ich danke im vorraus schonmal für die Hilfe :)
 
Ist das korrekt so, dass du 6 SQL-Statements mit unterschiedlichen Sortier-Bedingungen auswerten willst? Wenn ja, solltest die die Ergebnisse in unterschiedliche Arrays packen, denn sonst hast du einfach alle Autos in einem Array nach einander. Du weißt dann nicht mehr, wo die eine Sortierung aufhört und die nächste beginnt. Du könntest es so machen;

PHP:
<?php
class Cars {
	public static function getAllCarsSorted($db) {
		$sort = array (
				0 => "age ASC",
				1 => "age DESC",
				2 => "genre ASC",
				3 => "genre DESC",
				4 => "name ASC",
				5 => "name DESC" 
		);
		
		foreach ( $sort as $sortObject ) {
			$sql = "SELECT * FROM `cars` ORDER BY $sortObject";
			
			$result = $db->getDatabaseConnection ()->query ( $sql );
			while ( $row = $result->fetch_assoc () ) {
				$cars [$sortObject][$row ['ID']] = $row ['name'];
			}
		}
		return $cars;
	}
}

Im übrigen kannst du die Funktion var_dump() verwenden, um dir die Inhalte der Variablen (auch Arrays) anzuzeigen. Hilft ungemein beim Debuggen.
 
Hallo und danke :)
Den Aspekt hatte ich nicht mitbedacht *gg*

Nur macht mein Script fehler beim Aufrufen der Funktion sobald ich auf sortieren klicke >.<

Habe jetzt mal 2 Codes getestet

PHP:
if(isset($_GET['option']) && isset($_GET['sort[]'])) $cars = Cars::getAllCarsSorted($db, $_GET['sort[]']);
else $cars = Cars::getAllCarsAsObjectsLimited($db);



PHP:
if(isset($_POST['submit'])) {
    $_GET['sort'] = $_POST['submit'];
    $cars = Cars::getAllCarsSorted($db);
}

und habe die [] hinter sort mal dazugenommen oder weggelassen - beides jacke wie hose
 
Allem anschein nach, wird das Array nicht übergeben o_O

PHP:
array(1) { ["option"]=> string(4) "sort" }


    <form action="cara/sort/" method="POST">
        <select name="sort" id="sort">
            <option selected="selected" disabled="disabled">Sortieren</option>
            <option value="sort[0]">Alter aufsteigend</option>
            <option value="sort[1]">Alter absteigend</option>
            <option value="sort[2]">Kategorie aufsteigend</option>
            <option value="sort[3]">Kategorie absteigend</option>
            <option value="sort[4]">Name aufsteigend</option>
            <option value="sort[5]">Name absteigend</option>
        </select>
        <input type="submit" name="sort" value="Sortieren">
    </form>
 
Zuletzt bearbeitet:
Dein Formular ist POST, du willst die Daten aber aus GET holen. Desweiteren solltest du bei den Options-Feldern den Value auf einen skalaren Wert setzen. sort[0] - sort[5] ist kein gültiger Wert für Optionsfeld-Value.

Desweiteren sollten HTML-Formular-Elemente einen eindeutigen Namen haben. Sonst weißt du im Script nachher ja nicht, um welches Element es sich handelt. Die Rede ist vom Namen des Submit-Buttons, der genauso heißt wie das Select-Feld.

Schreib das Formular so um:

HTML:
    <form action="cara/sort/" method="POST">
        <select name="sort" id="sort">
            <option selected="selected" disabled="disabled">Sortieren</option>
            <option value="1">Alter aufsteigend</option>
            <option value="2">Alter absteigend</option>
            <option value="3">Kategorie aufsteigend</option>
            <option value="4">Kategorie absteigend</option>
            <option value="5">Name aufsteigend</option>
            <option value="6">Name absteigend</option>
        </select>
        <input type="submit" name="submitButtont" value="Sortieren">
    </form>

Dann testest du mal mit var_dump($_POST); ob das richtige angekommen ist.
 

Neue Beiträge

Zurück