myGully.com

myGully.com (https://mygully.com/index.php)
-   Entwicklung & Programmierung (https://mygully.com/forumdisplay.php?f=72)
-   -   [Erledigt] Frage zu Text aus SQLITE und Get ID (https://mygully.com/showthread.php?t=5711927)

RandomUser1111 23.01.20 09:04

[Erledigt] Frage zu Text aus SQLITE und Get ID
 
Hallo. Ich soll ein kleines online Textspiel erstellen, also ausschließlich Text mit 1-2 Links, die zu weiterem Text mit 1-2 Links führen.

Wäre get ID dafür sinnvoll? Und wie setze ich das um?
Im Umfang soll es ~100 Texte + Links sein.

Wie müsste ich das für eine SQLITE umändern?

(Der Acc der DB ist ausschließlich auf lesen, somit brauche ich mir um die bösen Hacker keine Gedanken machen.)

Mein Level ist kurz nach absoluter Neuling und ich werde das Wissen nach der Aufgabe auch nicht weiter benötigen, daher habe ich nicht wirklich vor, mich durch das php manual zu lesen.

Ich Danke für jeden Tipp.

P.S: Es soll keiner sagen, ich würde es nicht selbst versuchen. Wer Fehler findet, möge bitte seinen Code posten. Und obriges nicht vergessen. Danke. ;)

Zitat:

<?php
// Verbindung zum Datenbankserver
mysql_connect("host", "benutzer", "passwort") or die (mysql_error ());

// Datenbank auswählen
mysql_select_db("dbname") or die(mysql_error());

// Daten aus der Datenbank abrufen, wobei der Wert von id aus in der URL berücksichtigt wird
$strSQL = "SELECT * FROM test WHERE id=" . $_GET["id"];
$rs = mysql_query($strSQL);

// Schleifendurchlauf durch $rs
while($row = mysql_fetch_array($rs)) {

// Schreibe die Daten der Person
echo "<dt>Text: </dt><dd>" . $row["Text"] . "</dd>";
echo "<dt>Link: </dt><dd>" . $row["Link"] . "</dd>";

}

// Schließt die Datenbankverbindung
mysql_close();
?>

nichdiemama 24.01.20 23:37

War jetzt die aufgabe dass du das programmieren sollst oder war sie, dass du jemanden finden sollst der das für dich programmiert?

Der schnipsel .php ist ja ganz nett, aber welchen teil deiner aufgabe bzw. welchen teilaspekt soll der erfüllen und wie hast du vor, den rest zu lösen? Und in welchem zusammenhang steht der schnipsel zu thread titel "sqlite..."?

Beschreib es ruhig einfach mal ohne code, vielleicht hilft es dir zu verstehen was du schon hast und was dir noch fehlt.

RandomUser1111 25.01.20 12:18

Zitat:

Zitat von nichdiemama (Beitrag 36355712)
War jetzt die aufgabe dass du das programmieren sollst oder war sie, dass du jemanden finden sollst der das für dich programmiert?

Der schnipsel .php ist ja ganz nett, aber welchen teil deiner aufgabe bzw. welchen teilaspekt soll der erfüllen und wie hast du vor, den rest zu lösen? Und in welchem zusammenhang steht der schnipsel zu thread titel "sqlite..."?

Beschreib es ruhig einfach mal ohne code, vielleicht hilft es dir zu verstehen was du schon hast und was dir noch fehlt.

Nun, ich würde den code nehmen und dann wie folgt vorgehen:
ID1: Text1 | Link1 Link2
ID2: Text 2 | Link 1 Link 2

Und die dann eben untereinander verlinken, wenn es passt.
Das S***** dann mit foo.bar/index.php?id=1 starten und fertig.

Warum SQLITE? Nun, ich würde es lieber in eine Datei als eine DB packen, kann man mir folgen? Man kann es viel einfacher weitergeben, als erst via import in eine MySQL zu laden.

Lieber wäre mir foo.bar/1 als startlink zu haben,
aber mir ist nicht klar wie das gehen soll.
Gesehen habe ich das schon oft, das eben foo.bar/1 und nicht foo.bar/1/ oder foo.bar/index.php?id=1 da steht.

MfG

MuetzeOfficial 26.01.20 04:06

  1. mysql ist, wie der Name schon sagt für MySQL und außerdem gibt es in PHP schon Ewigkeiten kein mysql mehr, sondern nur noch mysqli. (Am Besten die Quelle für diesen Code-Schnipsel unwiderruflich löschen)
  2. SQL ist eine Datenbanksprache & funktioniert mit MySQL, SQLlite usw. (soll heißen, die Syntax der Datenbank-Abfragen kann bleiben...)
  3. Nutze [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...], es ist nicht nur besser, sondern kann mit MySQL, SQLite und noch mehr umgehen (je nach dem welche Treiber für PDO auf dem Server installiert sind).
  4. Der abschließende PHP-Tag ?> ist nicht nötig, wenn daraufhin keine Zeichen mehr folgen


Zitat:

Zitat von RandomUser1111 (Beitrag 36342675)
(Der Acc der DB ist ausschließlich auf lesen, somit brauche ich mir um die bösen Hacker keine Gedanken machen.)

Das reicht um an alle Daten zu kommen.

RandomUser1111 26.01.20 07:51

Hast du den auch eine Version die du empfehlen kannst, auf basis des codes den ich bereits gepostet habe? Ansonsten ist das hier unnötige dissusion, da für mich unnütz und eigentlich auch Zeitverschwendung, so nützlich die Hinweise auch sein mögen.

Den, wie ich oben schon erwähnte:
Zitat:

Mein Level ist kurz nach absoluter Neuling und ich werde das Wissen nach der Aufgabe auch nicht weiter benötigen, daher habe ich nicht wirklich vor, mich durch das php manual zu lesen.
Und an welche Daten sollten sie kommen, wenn sie den einen Weg fänden?
Alle Textlinks? ;)

MuetzeOfficial 26.01.20 12:55

Von was eine Version? Bei PHP wäre es 7.2+ zu empfehlen. Bei SQLite ist Version 3 aktuell.

Edit: Ja. ID nutzen ist eigentlich fast immer sinnvoll. Gibt halt mehr Performance und Du triffst eine Zeile 100%.

Zitat:

Zitat von RandomUser1111 (Beitrag 36363426)
Und an welche Daten sollten sie kommen, wenn sie den einen Weg fänden?
Alle Textlinks? ;)

Alle Daten die in der Datenbank, die gespeichert sind und zusätzlich kann man auch das Passwort ändern und die Datenbank "übernehmen".
Aber, wenn Du mit PDO Dein GET-Reuqest bindest, hast Du eh schon ein Inject-Schutz....

MuetzeOfficial 26.01.20 13:44

Beispiel
 
Ich habe jetzt folgende Tabelle mit dem Namen test in der Datenbank dbname erstellt (Namen klein geschrieben...):
Code:

CREATE TABLE `dbname`.`test` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , `text` TEXT NOT NULL , `link` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`));
Dazu habe ich ein Beispiel erstellt...
file.php listet alle Einträge auf.
file.php?id=1 zeigt Eintrag mit ID 1
Und wenn der Eintrag nicht vorhanden ist, kommt ein entsprechend eine Meldung...
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

RandomUser1111 26.01.20 15:24

Zitat:

Zitat von MuetzeOfficial (Beitrag 36365241)
Ich habe jetzt folgende Tabelle mit dem Namen test in der Datenbank dbname erstellt (Namen klein geschrieben...):
Code:

CREATE TABLE `dbname`.`test` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , `text` TEXT NOT NULL , `link` VARCHAR(255) NOT NULL , PRIMARY KEY (`id`));
Dazu habe ich ein Beispiel erstellt...
file.php listet alle Einträge auf.
file.php?id=1 zeigt Eintrag mit ID 1
Und wenn der Eintrag nicht vorhanden ist, kommt ein entsprechend eine Meldung...
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Ok, allein schon deswegen weil du dir soviel Mühe gemacht hast, werde ich mal versuchen die Tage mir das Wissen anzueignen, was du mir da mühevoll zusammengestellt hast. Vielen Dank!

Was mir nur aufgefallen ist, ist das alle Ausgaben doppelt ausgegeben werden. ^^

Kannst du mir vielleicht zusätzlich noch sagen,
wie foo.bar/foo umgesetzt wird? Ich habe das letztens gesehen und war verwirrt wie das funktionieren kann, so ganz ohne id, / und ähnlichem. Hier genauso: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Übrigens eine sehr tolle Webseite! Ich habe soetwas ähnliches.

P.S: Bei News fehlen alle Bilder.

MuetzeOfficial 26.01.20 16:11

Kommt darauf an, was Du mit foo & bar meinst. Foo & Bar wird nur gerne als Beispielnamen für Funktionen, Kassen usw. genommen. Eine Funktion oder der gleichen ist beides nicht.

Die News ziehe per RSS von foruncut. Kann sein, dass die da was geändert haben. Muss ich mal schauen, so mal sich die Seite eh nicht wirklich lohnt, von den Besucherzahlen her.

Der Link kommt aus der Datenbank. Ich schreibe per HTACCESS & Mod Rewrite die URLs um:
Code:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?include=$1 [L]

Damit bekomme ich ja immer ein GET-Request (GET include) und damit kann ich ja quasi schauen, ob dafür ein passender Eintrag in der Datenbank ist oder eine andere Seite aufgerufen wird, wie Impressum usw. und damit weiter arbeiten und wenn Nichts trifft halt ein 404 Error ausgeben.

RandomUser1111 26.01.20 16:31

Zitat:

Zitat von MuetzeOfficial (Beitrag 36366079)
Kommt darauf an, was Du mit foo & bar meinst. Foo & Bar wird nur gerne als Beispielnamen für Funktionen, Kassen usw. genommen. Eine Funktion oder der gleichen ist beides nicht.

Die News ziehe per RSS von foruncut. Kann sein, dass die da was geändert haben. Muss ich mal schauen, so mal sich die Seite eh nicht wirklich lohnt, von den Besucherzahlen her.

Der Link kommt aus der Datenbank. Ich schreibe per HTACCESS & Mod Rewrite die URLs um:
Code:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?include=$1 [L]

Damit bekomme ich ja immer ein GET-Request (GET include) und damit kann ich ja quasi schauen, ob dafür ein passender Eintrag in der Datenbank ist oder eine andere Seite aufgerufen wird, wie Impressum usw. und damit weiter arbeiten und wenn Nichts trifft halt ein 404 Error ausgeben.

Achja, ist ja interessant! Dankeschn für die Aufklärung! :)
Habe das mit der htaccess gleich mal ausprobiert und es hat auf anhieb geklappt!

Die Links werden übrigens nur als Text und nicht als Link behandelt.
Also
Zitat:

<a href="1">1</a>
bleibt genau das. Kein Link, nur Text.

Das doppelte taucht nur bei der Ausgabe von allen Einträgen auf.

P.S: Soll ich deine URL mal zensieren? Datenschutz und so. Ist vielleicht in diesem Forum besser.


EDIT: Die Links tauchen jetzt auf, habe es mit
Zitat:

. $row["link"] .
ersetzt, dann ging es.

MuetzeOfficial 26.01.20 17:19

Möglich, ich habe das schnell in 5 Minuten getippt ohne zu kontrollieren.
Im HREF solltest Du nur [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] statt [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] verwenden.

RandomUser1111 26.01.20 17:28

Zitat:

Zitat von MuetzeOfficial (Beitrag 36366602)
Möglich, ich habe das schnell in 5 Minuten getippt ohne zu kontrollieren.
Im HREF solltest Du nur [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] statt [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] verwenden.

Ich bin hier etwas überfordert... es taucht kein Linktext auf...

Zitat:

echo '<td>Link: </td><td><a href=' . $row["link1"] . '>rawurlencode('$row['linktext2'])'')</a></td><tr>';

echo '<td>Link: </td><td><a href=' . $row["link2"] . '>' . $row["linktext2"] . '</a></td>';
habe ich versucht. Grrr!

MuetzeOfficial 26.01.20 17:54

Die Zahlen müssen weg. Wenn die Spalten link & linktext heißen. Dann muss es so aussehen (Groß- & Kleinschreibung, wie in der Datenbank):

PHP-Code:

echo '<td>Link: </td><td><a href='.rawurlencode($row['link']).'>'.htmlspecialchars($row['linktext']).'</a></td><tr>'

Der oberste sieht auch recht falsch aus. Wenn Du eine gute IDE, wie PHPStorm oder so nutzt, zeigt Dir diese, die Fehler auch an....

RandomUser1111 26.01.20 18:11

Zitat:

Zitat von MuetzeOfficial (Beitrag 36366820)
Die Zahlen müssen weg. Wenn die Spalten link & linktext heißen. Dann muss es so aussehen (Groß- & Kleinschreibung, wie in der Datenbank):

PHP-Code:

echo '<td>Link: </td><td><a href='.rawurlencode($row['link']).'>'.htmlspecialchars($row['linktext']).'</a></td><tr>'

Der oberste sieht auch recht falsch aus. Wenn Du eine gute IDE, wie PHPStorm oder so nutzt, zeigt Dir diese, die Fehler auch an....

Dankeschön! :)
Vielleicht sollte ich mir doch, wenigstens die Grundlagen aneignen...

Nun noch eine letzte Frage, dann gebe ich endlich Ruhe:
Warum wird es doppelt angezeigt, wenn alle Einträge aufgelistet werden sollen?

Zitat:

} else {
$stmt = $pdo->prepare('SELECT text FROM test');
$stmt->execute();
while ($row = $stmt->fetch()) {
echo '<tr>';
echo '<td colspan="4">Willkommen!</td>';
echo '</tr>';
}
}

?>
Zeigt:

Willkommen!
Willkommen!

an. Also doppelt.

MuetzeOfficial 26.01.20 18:24

Du durchläufst da ja eine [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]-Schleife. Und die ist ja dafür da, jeden Datenbank-Eintrag einzeln auszugeben. Und wenn 2 Einträge vorhanden sind, dann kommt auch 2 mal eine Ausgabe.

RandomUser1111 26.01.20 18:34

Zitat:

Zitat von MuetzeOfficial (Beitrag 36366981)
Du durchläufst da ja eine [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]-Schleife. Und die ist ja dafür da, jeden Datenbank-Eintrag einzeln auszugeben. Und wenn 2 Einträge vorhanden sind, dann kommt auch 2 mal eine Ausgabe.

Ah ich verstehe. Und wenn ich jetzt nur den text ausgeben lassen müsste (wie in meinem falle) hätte ich es nur löschen müssen.

Warum
Zitat:

echo '<td colspan="4">Willkommen!<tr><a href="/1">Starte das Spiel</a></td>';
jetzt

Zitat:

Starte das Spiel
Willkommen!
und nicht

Zitat:

Willkommen!
Starte das Spiel
anzeigt bleibt aber noch ein Rätsel.

Übrigens:

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
Das hier ist nur dank dir und deiner Hilfe möglich gewesen! :)

MuetzeOfficial 26.01.20 18:57

Du bringst irgendwie immer die HTML-Tags durch einander....
colspan
Wenn Du in einer Zeile 4 Spalten hast, aber in der nächsten Zeile nur eine Spalte, dann verbindest Du 4 Spalten mit colspan="4"

Dazwischen ist bei Dir ein <tr>...

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

___

Fehler im HTML-Text kannst Du Dir mit dem [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] anzeigen lassen.

RandomUser1111 26.01.20 21:34

Zitat:

Zitat von MuetzeOfficial (Beitrag 36367148)
Du bringst irgendwie immer die HTML-Tags durch einander....
colspan
Wenn Du in einer Zeile 4 Spalten hast, aber in der nächsten Zeile nur eine Spalte, dann verbindest Du 4 Spalten mit colspan="4"

Dazwischen ist bei Dir ein <tr>...

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

___

Fehler im HTML-Text kannst Du Dir mit dem [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] anzeigen lassen.

Ich werde versuchen es mir zu merken, Dankeschön! :)
Ja, wir verstehen alle nicht warum wir mit programmierung beschäftigt werden. Es ist ja im Prinzip nützlich für die Zukunft, aber das sollte man vielleicht überdenken, wenn die Klasse aus Zeichnern besteht...

EDIT: Falls es jemanden der das mal ließt, interessiert:
Heute haben sich mehrere an unseren Lehrer gewandt um den Grund für diese Aufgabe zu erfahren:
Der Grund der Aufgabe, war einerseits sich mit alten aber doch modernen Mitteln der Kunst auseinanderzusetzen und ein Bewusstsein dafür zu schaffen, welche Arbeit in diesem steckt.
Darum sollte auch kein Programm zum erstellen (Inform, TADS, Quest) genutzt werden.
Unter diesen Gesichtspunkten ist die Aufgabe durchaus als lehrreich von uns eingestuft worden.
Es wäre nur wesentlich motivierender gewesen, das vorher gesagt bekommen zu haben.
Wir sind übrigens auf einer Kunsthochschule, keiner "normalen". Just for information.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.