Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

11

09.01.2014, 14:26

Ich muss jetzt gleich erstmal weg, deswegen kann ich die Tips erst heute Abend ausprobieren, werde mich dann aber wieder melden :)


Mit den Prepared Statements habe ich noch gar nicht gearbeitet, bisher benutze ich für alles immer mysqli.

Also Beipsielsweise so:

$select = "SELECT * FROM tabelle";
$abfrage = mysqli_query(§connection,$select);


Sind prepared Statements grundsätzlich etwas anderes oder sieht es für mich nur so aus?
Auf einschlägigen Seiten finde ich da viel mit ->bindParam ->execute .....


@Sacaldur: SQL an sich kann ich ja, also WHERE, ORDER BY ... sind bekannt ;)

Dank dem Tipp von Exploit3r ( Desc und Limit zusammen) läuft es ja schon fast, nur so wie ich das sehe ist mein letztes Problem jetzt noch, wie genau ich während der Abfrage an eine Position komme, damit ich mit ihr die Beiträge die auf der aktuellen Seite angezeigt werden errechnen kann. An eine Seite wird immer eine Zahl übergeben, auf der ersten ist es zB eine 5, diese 5 würde ich dann von der höchsten Position abziehen und dann praktisch so etwas Limit max-5,5 machen, damit die obersten 5 ausgelesen werden. Geht man auf die nächste Seite wird die Position+5 gerechnet und übergeben (also 10) und dann auf der neuen Seite Limit max-10,5 angezeigt.

Mir fehlt halt nur jeweils dieses max (welches ich vorher versucht habe per COUNT zu bekommen). Mache ich das zu umständlich, oder stehe ich grade einfach auf dem Schlauch und verstehe etwas nicht?


Es geht in diesem Projekt darum das ganze möglichst perfekt umzusetzen, online gehen wird es nicht.

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

12

09.01.2014, 14:59

Sind prepared Statements grundsätzlich etwas anderes oder sieht es für mich nur so aus?
Auf einschlägigen Seiten finde ich da viel mit ->bindParam ->execute .....
Sie funktionieren auch mit mysqli, der Unterschied ist, dass du die Queries anders aufbaust.
Anstatt $SQL = "SELECT * FROM news WHERE id=".$id was sehr einfach für SQL injections verwendet werden kann, verwendest du dann:

Quellcode

1
2
3
$stmt = $db->prepare("SELECT * FROM news WHERE id=:id");
$stmt->bindParam(":id", $id);
$stmt->execute();

Dies hat mehrere Vorteile. Zum einen werden einfach SQL Injections unmöglich, da das Statement vor der Anwendung geprüft wird, zum anderen kannst du die Statements wieder verwenden. Andere Orte erklären das noch besser. ;)


wie genau ich während der Abfrage an eine Position komme, damit ich mit ihr die Beiträge die auf der aktuellen Seite angezeigt werden errechnen kann.
Die Seiten bekommst du ja direkt mit der Abfrage, du musst nicht das Maximum holen und dann Abziehen, du sortierst das Ganze einfach den anderen Weg rum und somit ist das "Maximum" an erster Stelle. Die übergeben Zahl sagt dir ja dann schon an welcher Position du stehst.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
$offset = $_GET['offset'];

$stmt = $db->prepare('SELECT id, title, date, content FROM news ORDER BY date LIMIT :offset , 5');
$stmt->bindParam(':offset', $offset);
$stmt->execute();

while ($row = $stmt->fetchObject())
{
    echo '<h2><a href="news.php?id=' . $row->id . '">' . $row->title . '</a></h2>';
    echo '<p style="text-align: right;">' . $row->date . '</p>';
    echo '<p>' .  $row->content . '</p>';
}
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

13

12.01.2014, 14:13

Grosses DANKE nochmal,. das hat natürlich alles ganz wunderbar geklappt ;)

Ich habe jetzt ein neues Problem:

Ich habe zwei Buttons(vor/zurück) auf den Seiten auf diese verweisen werden wieder SQL Abfrage durchgeführt. Diese Abfragen brauchen aber ne Mensche Variablen, die ich ungern alle per GET übergeben möchte, dass sieht ja hässlich aus. Kann man das irgendwie mit POST realisieren?

14

12.01.2014, 14:31

"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

15

12.01.2014, 20:19

Wieso, get ist doch gut, wenn man die Seite Bookmarken oder den Link weiterschicken möchte. Oder der Tab bei der nächsten Sitzung (mit neuer Session) neu geladen wird. Bei Post und Session ist es schwerer, die passende Seite wiederzufinden.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

16

12.01.2014, 21:07

Warum brauchst du da viele Variablen? Eine Seiten-, bzw. Offsetangabe reicht doch. sieht dann ungefähr so aus:

Quellcode

1
example.com/show.php?offset=5 

Mit mod_rewrite etwa so:

Quellcode

1
example.com/show/5

Ich weiß nicht, warum das hässlich aussehen sollte.

ERROR

Alter Hase

  • »ERROR« ist der Autor dieses Themas

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

17

12.01.2014, 21:13

hmmm ok, ich hätte wohl dazu sagen sollen, dass es zwar immernoch um das gleiche php Projekt, aber eine andere Datei handelt.

Es geht grade um eine Suche, in der mindestens 5 Variablen übergeben werden müssten, die teilwesie ziemlich lang sein können. Ich möchte halt gerne Amazon-artige Links vermeiden. Dass man diese dann nicht übergeben kann ist mir klar, aber auch nicht benötigt für diese Suche.

Werbeanzeige