unexpected $end in

Alles, was PHP betrifft, kann hier besprochen werden.

Postby Xardas der Dunkle » 14. August 2008 18:43

Ich weiß aber immer noch nicht, wie ich über einen Klick auf JA die ID übergebe.

Tust du doch bereits da, ...
Code: Select all
echo '<p><a href="' . $_SERVER['PHP_SELF'] .
'?deleteauthor='.$id.'>Ja! </a><a href="authors.php">Zurück zur Liste der Autoren</a></p>';


//Alle Witze die zum Autor gehören zusammen mit dem Autor selbst löschen.
if (isset($_GET[$id])) {

Nur ist das mit dem $_GET[$id] doch quak xD, sorry ... es müsste natürlich: $_GET['deleteauthor'] heißen. Und ich sehe immer noch kein intval =(
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby I-c-H » 14. August 2008 21:14

Ein intval wollte ich noch nicht festlegen - immer eins nach dem anderen, sonst wirds zuviel auf einmal.

Okay, über ein _GET wäre es zwar möglich, doch knoble ich gerade nach einer Möglichkeit dieses "Ja" in einen Link zu packen - dieser Link soll dann einen Wert X auf meinetwegen 1 setzen und WENN X=1 ist, dann soll der Eintrag gelöscht werden - ganz ohne das etwas in der Adressleiste geschieht. Hast du eine Ahnung wie ich das realisieren kann?
I-c-H
 
Posts: 24
Joined: 20. July 2008 16:20

Postby Xardas der Dunkle » 14. August 2008 21:46

Geht nicht.
Könntest höchstens mit Ajax arbeiten und darüber anstatt GET eben POST nehmen.
Aber imo etwas aufwendig. Auch wenn der Wert nicht in der URL übergeben wurde, sollte man ihn immer noch abfangen ...
Daher ist es also total wurscht ob du ihn nun per GET oder per POST versendet besonders wenn er nur 1 oder 0 sein kann :P.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby I-c-H » 14. August 2008 21:47

POST geht doch nur via Formular?
EDIT: Ohne Ajax mein ich.
I-c-H
 
Posts: 24
Joined: 20. July 2008 16:20

Postby Xardas der Dunkle » 14. August 2008 22:19

Mit AJAX geht es, aber auch ohne Formular. Aber imho ein zu hoher Aufwand für 1% mehr Sicherheit.
Benutzereingaben musst du so oder so abfangen ...
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby glitzi85 » 15. August 2008 13:09

Das, was in der Adresszeile steht nennt sich URI = Uniform Ressource Identifier. Er identifiziert die Resource. Wie willst du zwei verschiedene Ressourcen (die es ja sind, da sie ja offensichtlich unterschiedliche Dinge vollbringen) unter der gleichen URI verfügbar machen?

Entweder du übergibst die Parameter in der URI oder als Datenstrom an den Server, und das ist entweder über POST oder über Ajax möglich.

Wieso wollen alle eigentlich immer das nichts in der Addresszeile steht? Und was für Probleme haben alle mit Formularen? Du kannst jeden bescheuerten Button wie einen Link und jeden Link wie einen Button aussehen lassen, optisch macht das absolut keinen Unterschied.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Postby I-c-H » 15. August 2008 13:24

So, ich habe mich jetzt mal mit deinen Links etwas näher beschäftigt bezüglich der Sicherheit meines Scriptes - in meinem Buch wird darauf nämlich (nach oberflächlichem nachsehen) nicht weiter eingegangen.

Folgender Code ist authors.php
Code: Select all
<html>
<?php
$dbcnx = @mysql_connect('localhost', 'root', '');
if (!$dbcnx) {
   exit('<p> Verbindungsaufbau zum Datenbankserver' .
   ' zurzeit nicht möglich. </p>');}
if (!@mysql_select_db('Jokes')) {
   exit('<p> Auswahl der Witzedatenbank zurzeit nicht möglich.</p>');
}
$authors = @mysql_query('SELECT ID, Name FROM autoren');
if (!$authors) {
   exit('<p>Fehler beim Abruf der Autoren aus der Datenbank!<br />'.
   'Error: ' . mysql_error() . '</p>');
}
while ($author = mysql_fetch_array($authors)){
   $id = $author['ID'];
   $name = htmlspecialchars($author['Name']);
   echo "<li>$name "
   ."<a href='editauthor.php?id=$id'>Bearbeiten</a> "
   ."<a href='deleteauthor.php?id=$id'>Löschen</a></li>";
}
?>


Nachdem man ausgewählt hat, dass man den Autoren löschen will, gelangt man zu deleteauthor.php:

Code: Select all
<?php
//Alle Witze die zum Autor gehören zusammen mit dem Autor selbst löschen.
if (isset($_GET['deleteauthor'])) {
 $id1 = $_GET['deleteauthor'];
 
 $dbcnx = @mysql_connect('localhost', 'root', '');
if (!$dbcnx) {
   exit('<p>Verbindung zur Datenbank zur Zeit nicht möglich</p>.');
}
if (!@mysql_select_db('Jokes')){
   exit('<p>Auswahl der Witzedatenbank zurzeit nicht möglich</p>');
}
 
$ok1 = mysql_query("DELETE FROM Jokes WHERE AID='$id1'");
$ok2 = mysql_query("DELETE FROM autoren WHERE ID='$id1'");

if ($ok1 and $ok2) {
   echo'<p>Autor wurde erfolgreich gelöscht!<br />'
   ."<a href='authors.php'>Zurück zur Startseite</a>";
   } else {
      echo'<p>Fehler beim Löschen des Autors aus der Datenbank!<br />'
      . 'Fehler: ' . mysql_error() . '<br />'
      ."<a href='authors.php'>Zurück zur Startseite</a></p>";
   }
   }
   
else {

$dbcnx = @mysql_connect('localhost', 'root', '');
if (!$dbcnx) {
   exit('<p>Verbindung zur Datenbank zur Zeit nicht möglich</p>.');
}
if (!@mysql_select_db('Jokes')){
   exit('<p>Auswahl der Witzedatenbank zurzeit nicht möglich</p>');
}


$id = $_GET['id'];
echo'<p>Wollen Sie den Autor:<strong> ' . mysql_query("SELECT FROM autoren WHERE ID='$id'") .'</strong> wirklich löschen?';
echo'<a href="'.$_SERVER['PHP_SELF'].'?deleteauthor='.$id.'">'
.'<p>Ja! </a>'
."<a href='authors.php'>Zurück zur Startseite</a>";
}
?>


Nun meine Frage: Bietet sich bei deleteauthor nicht eher ein escapen an, als ein intval? Ich wüsste nämlich nicht, was mir intval bringen würde? Damit konvertier ich doch nur etwas in einen andern Wert?

Um ehrlich zu sein; Ich habe noch überhaupt kein Verständnis für diese Sicherheitskiste entwickelt.

Eigentlich müsste ich doch, um das Kindchen sicher an Land zu bringen, ein Formular erstellen, dass die ID per GET empfängt und nach der Sicherheitsabfrage per POST übergibt, oder nicht?

EDIT:
Ich hab kein Problem mit Formularen, ich frag mich nur, warum mein Lehrbuch es mir so erklären will...
Weißt du, wenn ich zuviel auf einmal mache, versteh ich nachher nur noch "Zug da, Bahnhof abgefahren".
Lerne ich es aber von Anfang an schon unsicher, ist es vielleicht schwierig sich das abzugewöhnen.
I-c-H
 
Posts: 24
Joined: 20. July 2008 16:20

Previous

Return to PHP

Who is online

Users browsing this forum: No registered users and 18 guests