WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 10.12.2006, 12:43   #1
Blauer Kuckuck
Veteran
 
Registriert seit: 21.02.2006
Beiträge: 321


Standard 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
Blauer Kuckuck ist offline   Mit Zitat antworten
Alt 10.12.2006, 12:55   #2
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

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
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 10.12.2006, 13:03   #3
Philipp
verXENt
 
Benutzerbild von Philipp
 
Registriert seit: 01.08.1999
Beiträge: 7.084

Mein Computer

Standard

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"
Philipp ist offline   Mit Zitat antworten
Alt 10.12.2006, 13:12   #4
Blauer Kuckuck
Veteran
 
Registriert seit: 21.02.2006
Beiträge: 321


Standard

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
Blauer Kuckuck ist offline   Mit Zitat antworten
Alt 10.12.2006, 18:55   #5
delphirocks
bitte Mailadresse prüfen!
 
Registriert seit: 17.03.2002
Beiträge: 198


Standard

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.
delphirocks ist offline   Mit Zitat antworten
Alt 10.12.2006, 19:05   #6
xpla
Elite
 
Registriert seit: 19.12.2003
Beiträge: 1.210


Standard

Ok, und wie soll er jetzt die Abfrage mit Parameter machen?
xpla ist offline   Mit Zitat antworten
Alt 11.12.2006, 16:01   #7
Blauer Kuckuck
Veteran
 
Registriert seit: 21.02.2006
Beiträge: 321


Standard

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
Blauer Kuckuck ist offline   Mit Zitat antworten
Alt 11.12.2006, 16:51   #8
void
Hero
 
Benutzerbild von void
 
Registriert seit: 26.07.2001
Ort: Wien
Beiträge: 811


Standard

mich würde jetzt aber auch die "sichere" methode interessieren...
____________________________________
nobody is perfect
void ist offline   Mit Zitat antworten
Alt 11.12.2006, 18:58   #9
iG0r
Gesperrt
 
Registriert seit: 14.08.2003
Alter: 47
Beiträge: 915


Standard

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";
iG0r ist offline   Mit Zitat antworten
Alt 11.12.2006, 19:43   #10
void
Hero
 
Benutzerbild von void
 
Registriert seit: 26.07.2001
Ort: Wien
Beiträge: 811


Standard

sry, bitte noch einmal, habe jetzt überhaupt nichts verstanden, außer dass $upid auf nummerischen inhalt überprüft werden sollte...
____________________________________
nobody is perfect
void ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:16 Uhr.


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