WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   PHP / MySQL (http://www.wcm.at/forum/showthread.php?t=205361)

Blauer Kuckuck 10.12.2006 12:43

PHP / MySQL
 
Hi,

ich bin dabei, ein Newsscript zu programmieren.

Update.php

PHP-Code:

<?php
  
  
  
include "config.php";
  
  @
mysql_connect (MYSQL_HOSTMYSQL_USERMYSQL_PASS) or die (mysql_error());
  
mysql_select_db(MYSQL_DATABASE) or die (mysql_error());
  
  
$upid $_POST["upID"];
  
$select_inhalt "SELECT Inhalt, Autor, Datum, Titel FROM news WHERE id = ".$upid;
  
  
  
  
  
$result mysql_query($select_inhalt) OR die (mysql_error());
  

    

  If(
mysql_num_rows($result)) {
      while(
$row mysql_fetch_assoc($result)) {
          echo 
"
                <html><head><title>News ändern</title></head><body><form action=\"updater.php\" method=\"POST\">
                <input disabled name=\"upid\" type=\"text\" size=\"5\" value=\""
.$upid."\">

                <input name=\"autor\" type=\"text\" size=\"20\" value=\""
.$row['Autor']."\">

                <input name=\"titel\" type=\"text\" size=\"20\" value=\""
.$row['Titel']."\">

                <textarea name=\"inhalt\" cols=\"40\" rows=\"20\">"
.$row['Inhalt']."</textarea>


                <input type=\"submit\" value=\"OK\">
                </form></body></html>"
;
    }
  } else {
    echo 
"Falsche ID!";
  }
?>

Datei updater.php

PHP-Code:

<?php
  
  
include "config.php";
  
  
  
$autor $_POST["autor"];
  
$inhalt $_POST["inhalt"];
  
$titel $_POST["titel"];
  
$upid $_POST["upid"];
  
  @
mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die (mysql_error());
  
mysql_select_db(MYSQL_DATABASE) OR die (mysql_error());
  

  
  
  
$update "UPDATE
               `news`
             SET
               `Autor` = '"
.$autor."',
               `Datum` = NOW(),
               `Inhalt` = '"
.$inhalt."',
               `Titel` = '"
.$titel."'
             WHERE
               `ID` = "
.$upid." LIMIT 1";
  
  
$result mysql_query($update);
  
  If (!
$result) {
      die(
mysql_error());
  } else {
      echo 
"Done.";
  }
  
?>

Datei config.php

PHP-Code:

<?php
  define
('MYSQL_HOST''localhost');
  
define('MYSQL_USER''mein richtiger benutzername');
  
define('MYSQL_PASS''mein richtiges passwort');
  
define('MYSQL_DATABASE''news');
?>

Die beiden Dateien sind dafür da, einen bestehenden Newseintrag zu bearbeiten.

Kleiner Hinweis: $upid steht für updateid.

Ich fülle die erste Datei aus, komme zur zweiten:

Zitat:

Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen (diese kann für verschiedene Server-Versionen unterschiedlich sein) bei 'LIMIT 1' in Zeile 9
Was hab ich falsch gemacht?

THX im Voraus,

Kuckuck

pong 10.12.2006 12:55

Zitat:

Was hab ich falsch gemacht?
Zitat:

Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen (diese kann für verschiedene Server-Versionen unterschiedlich sein) bei 'LIMIT 1' in Zeile
verstehst du "in Handbuch nachschlagen" oder "Fehler in SQL-Syntax" nicht?

pong

Philipp 10.12.2006 13:03

Ich würde folgendes ändern:

PHP-Code:

$select_inhalt "SELECT Inhalt, Autor, Datum, Titel FROM news WHERE id = '".intval($upid)."'"

und

PHP-Code:

$update "UPDATE 
               `news` 
             SET 
               `Autor` = '"
.addslashes($autor)."', 
               `Datum` = NOW(), 
               `Inhalt` = '"
.addslashes($inhalt)."', 
               `Titel` = '"
.addslashes($titel)."' 
             WHERE 
               `ID` = '"
.intval($upid)."' LIMIT 1"


Blauer Kuckuck 10.12.2006 13:12

Hi,

du bist ja toll, pong. Ganz lustig. Ich bin aber sicher, dass jeder deuschsprechende meine Fragestellung trotzdem verstehen würde --> siehe Philipp.

@Philipp:

Danke.

Die Fehlermeldung ist zwar weg (Er gibt 'Done.' aus, aber der Eintrag hat sich nicht so geändert, wie ichs angegeben hab.

Kann mir einer weiterhelfen und eine Problemlösung darstellen?

P.S.: Ich hoffe, diese Fragestellung passt auch pong...

Kuckuck

delphirocks 10.12.2006 18:55

Zitat:

$select_inhalt = "SELECT Inhalt, Autor, Datum, Titel FROM news WHERE id = ".$upid;
Eine Anweisung wie diese solltest du vermeiden, da du sonst eine SQL-Injection riskierst. Wenn z.B. jemand für $updid "1; delete from news where 1=1" eingibt, dann löscht er dir eine Datenbanktabelle. Deswegen sollte man bei Abfragen immer Parameter verwenden und nie die Where Klausel per String-Verkettung anfügen.

xpla 10.12.2006 19:05

Ok, und wie soll er jetzt die Abfrage mit Parameter machen?

Blauer Kuckuck 11.12.2006 16:01

Den Thread von

Zitat:

delphirocks
Eine Anweisung wie diese solltest du vermeiden, da du sonst eine SQL-Injection riskierst. Wenn z.B. jemand für $updid "1; delete from news where 1=1" eingibt, dann löscht er dir eine Datenbanktabelle. Deswegen sollte man bei Abfragen immer Parameter verwenden und nie die Where Klausel per String-Verkettung anfügen.
hab ich höchstens zur Hälfte verstanden...

Aber wenn ich die eine Hälfte verstanden hat, rät delphirocks mir aus Sicherheitsgründen von dieser Methode ab.
Vorerst ist das Script eh nur für mich da- Passwortgeschützter Bereich.

Kuckuck

void 11.12.2006 16:51

mich würde jetzt aber auch die "sichere" methode interessieren...

iG0r 11.12.2006 18:58

beim update sql query einfach das NOW() durch ".time()." ersetzen. die backticks sind übringens unnötig.

die $upid variable kannst du, da es sich nur um numerische werte handeln dürfte, mit einer kleinen is_numeric($upid) abfrage "sicherer" machen - und nicht am ende mit ".$upid; anhängen, sondern einfach in den query mit reinschreiben "... $upid";

void 11.12.2006 19:43

sry, bitte noch einmal, habe jetzt überhaupt nichts verstanden, außer dass $upid auf nummerischen inhalt überprüft werden sollte...


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag