php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.04.2008, 15:37  
Erfahrener Benutzer
 
Registriert seit: 03.03.2008
Beiträge: 117
Black-Devil befindet sich auf einem aufstrebenden Ast
Black-Devil eine Nachricht über ICQ schicken
Standard Einfaches Newssystem mit Mysql

Hallo,

Hier ist mal ein kleines newssystem^^

Tabelle `news`
Code:
    CREATE  TABLE `news` ( `id` INT( 11  )  NOT  NULL  AUTO_INCREMENT ,
 `autor` VARCHAR( 50  )  NOT  NULL ,
 `title` VARCHAR( 50  )  NOT  NULL ,
 `beitrag` TEXT NOT  NULL ,
 PRIMARY  KEY (  `id`  ) ,
 INDEX (  `id`  ) 
) ENGINE  =  MYISAM
Diesen code einfach bei PHPMYADMIN als SQL befehl ausführen.

Das Formular (add_news.php)
Code:
<form method="post" action="add_news.php">
<table>
    <tr>
        <td>Autor</td>
        <td><input type="text" name="autor"></td>
    </tr>
    <tr>
        <td>Titel</td>
        <td><input type="text" name="title"></td>
    </tr>
    <tr>
        <td>Beitrag</td>
        <td><textarea name="beitrag"></textarea></td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" name="news" value="News Posten"></td>
    </tr>
</table>
</form>
Das ist das formular zum hinzufügen von neuen news...

Fehlt aber noch die Funktion^^

PHP script mit in die add_news.php einfügen
PHP-Code:
<?php
$autor 
mysql_real_escape_string($_POST['autor']);
$title mysql_real_escape_string($_POST['title']);
$beitrag mysql_real_escape_string($_POST['beitrag']);

if(isset(
$_POST['news']))
{
$insert "INSERT INTO news SET autor = '$autor', title = '$title', beitrag = '$beitrag'";
mysql_query($insert);
}
?>
Dies alles dient zum einfügen der news in die Tabelle "news"

nun zum anzeigen der News

Dazu muss man erst einmal die tabelle ausählen: (news.php)
PHP-Code:
$row mysql_fetch_array(mysql_query("select * from news")); 
und die Tabelle zum anzeigen (news.php):
PHP-Code:
<table>
    <tr>
        <td><?php echo htmlentities($row['title']) ?></td>
        <td> geschrieben von <?php echo htmlentities($row['autor']) ?></td>
    </tr>
    <tr>
        <td colspan="2"><?php echo htmlentities($row['beitrag']) ?></td>
    </tr>
</table>
es kann sein das es nicht Funktioniert, ich habe es nämlich nicht getestet

Geändert von Black-Devil (27.04.2008 um 16:42 Uhr).
Black-Devil ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.04.2008, 16:33  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

mysql_real_escape_string() fehlt bei der Eingabe.
Wenn man zum Beispiel das war's dann wohl in den Beitrag schreibt, stimmt das genau: Es gibt eine Fehlermeldung von MySQL.
htmlentities() oder ähnliches fehlt bei der Ausgabe. Bisher können Sachen wie <script type="text/javascript>document.href = 'http://www.welcometomyrealm.bizbizbiz'</script> eingetragen und ausgeführt werden.

Geändert von David (27.04.2008 um 16:35 Uhr).
David ist offline   Mit Zitat antworten
Alt 27.04.2008, 16:40  
Erfahrener Benutzer
 
Registriert seit: 03.03.2008
Beiträge: 117
Black-Devil befindet sich auf einem aufstrebenden Ast
Black-Devil eine Nachricht über ICQ schicken
Standard

sry, aber ich bin noch ned soweit in php ^^

edit: isses so besser

Geändert von Black-Devil (27.04.2008 um 16:42 Uhr).
Black-Devil ist offline   Mit Zitat antworten
Alt 27.04.2008, 19:46  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Black-Devil Beitrag anzeigen
sry, aber ich bin noch ned soweit in php ^^

edit: isses so besser
Hallo!

Dann solltest du aber bitte auch kein Tutorial schreiben. Bitte nicht böse auffassen aber ist so. Denn wo zeigst du hier einem User wie er ein Datenbankanbindung schreiben muss und wie die Tabellen festgelegt werden das er überhaupt nachvollziehen kann wo die herkommen etc.

Auserdem ist dein Code so was von unsicher. Seid mir alle jetut bitte nicht böse oder so aber ich hoffe es nimmt sich niemand ein Beispiel an diesem Script!

mfg der Litter!
litterauspirna ist offline   Mit Zitat antworten
Alt 27.04.2008, 20:45  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Habe das ganze mal in einem Anfall von Langeweile optimiert.

Tabelle:
Code:
CREATE TABLE `news` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `time` INT UNSIGNED NOT NULL,
  `author` VARCHAR(50) NOT NULL,
  `title` VARCHAR(50) NOT NULL,
  `news` TEXT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE = MYISAM;
Datei input.php:
PHP-Code:
<?php
if (isset($_POST['submit'])) {
    
mysql_connect("host""user""pass");
    
mysql_select_db("test_db");
    
    
$author trim(escape($_POST['author']));
    
$title  trim(escape($_POST['title']));
    
$news   trim(escape($_POST['news']));
    
    
$sql "INSERT INTO `news` (`time`, `author`, `title`, `news`)\n".
           
"VALUES (UNIX_TIMESTAMP(), '".$author."', '".$title."', '".$news."');";
    
mysql_query($sql) or exit("Konnte Eintrag nicht vornehmen!");
}


function 
escape($str) {
    if (!
get_magic_quotes_gpc()) {
        
$str addslashes($str);
    }
    
    return 
$str;
}
?>

<form method="post" action="">
<div id="news_add">
    <label for="author">Autor</label>
    <input type="text" name="author" id="author" size="40" /><br />
    
    <label for="title">Titel</label>
    <input type="text" name="title" id="title" size="40" /><br />
    
    <label for="news">Beitrag</label>
    <textarea name="news" id="news" cols="40" rows="10"></textarea><br />
    
    <input type="submit" name="submit" value="News speichern" />
</div>
</form>
Datei output.php:
PHP-Code:
<?php
mysql_connect
("host""user""pass");
mysql_select_db("test_db");

$sql "SELECT * FROM `news` ORDER BY `time` DESC;";
$result mysql_query($sql);

while (
$row mysql_fetch_assoc($result)) { ?>
    <div class="news">
        <h1><?php echo htmlentities($row['title']); ?></h1>
        <span>Geschrieben von <?php echo htmlentities($row['autor']); ?> am <?php echo date("d.m.Y, H:i"$row['time']); ?>.</span>
        <div><?php echo nl2br(htmlentities($row['beitrag'])); ?></div>
    </div>
<?php ?>
Dazu noch ein paar CSS:
Code:
#news_add label {
    display:block;
    width:100px;
    float:left;
}
#news_add input[type="submit"] {
    margin-left:100px;
}

.news {
    font-size:12px;
    border-bottom:1px solid #505050;
    padding:5px;
}
.news h1 {
    margin:10px 0 4px 0;
    font-size:14px;
}
.news span {
    font-size:11px;
    color:#707070;
    font-style:italic;
}
Wer hat noch Lust, zu spielen?

Geändert von Manko10 (27.04.2008 um 20:53 Uhr).
Manko10 ist offline   Mit Zitat antworten
Alt 27.04.2008, 23:15  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
function escape($str) {
if (!get_magic_quotes_gpc()) {
$str = addslashes($str);
}

return $str;
}
Auch Parameter, die nicht aus $_GET, $_POST usw. stammen, müssen auf die Benutzung in SQL vorbereitet werden.
Und addslashes() reicht unter Umständen nicht aus (und magic_quotes ignoriere ich hier einfach, weil sie ein großes Problem für sich allein sind).
mysql_real_escape_string() dagegen ist eine sichere Sache, wenn es um Daten für MySQL geht. Damit es optimal funktioniert, muss die Verbindungsresource mit angegeben werden.
PHP-Code:
<?php
if (!empty($_POST['author']) && !empty($_POST['title']) && !empty($_POST['news']))
{
    
$mysql mysql_connect("host""user""pass");
    if (
$mysql===false || mysql_select_db("test_db"$mysql)===false)
    {
        die(
mysql_error());
    }
        
    
$author mysql_real_escape_string($_POST['author'], $mysql);
    
$title mysql_real_escape_string($_POST['title'], $mysql);
    
$news mysql_real_escape_string($_POST['news'], $mysql);

    
$sql "
        INSERT INTO
            `news` (`time`, `author`, `title`, `news`)
        VALUES
            (UNIX_TIMESTAMP(), '$author', '$title', '$news')
    "
;
    
mysql_query($sql$mysql) or exit("Konnte Eintrag nicht vornehmen!");
    echo 
'<div>neuer Eintrag, id=' mysql_insert_id().'</div>';
}
else
{
    echo 
'
        <form method="post" action="">
            <div id="news_add">
                <label for="author">Autor</label>
                <input type="text" name="author" id="author" size="40" /><br />
            
                <label for="title">Titel</label>
                <input type="text" name="title" id="title" size="40" /><br />
            
                <label for="news">Beitrag</label>
                <textarea name="news" id="news" cols="40" rows="10"></textarea><br />
            
                <input type="submit" name="submit" value="News speichern" />
            </div>
        </form>
    '
;
}
?>
Als nächsten Schritt würde ich (wieder) eine bessere Überprüfung von author, title und news einbauen.
Und dann den Aufbau der Datenbankverbindung (samt Passwort usw) aus diesem Skript herausnehmen.

Geändert von David (27.04.2008 um 23:17 Uhr).
David ist offline   Mit Zitat antworten
Alt 28.04.2008, 11:04  
Erfahrener Benutzer
 
Registriert seit: 03.03.2008
Beiträge: 117
Black-Devil befindet sich auf einem aufstrebenden Ast
Black-Devil eine Nachricht über ICQ schicken
Standard

naja okay, für den ersten versuch eines tutorials wars doch eig. gut^^
Black-Devil ist offline   Mit Zitat antworten
Alt 28.04.2008, 11:56  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Black-Devil Beitrag anzeigen
naja okay, für den ersten versuch eines tutorials wars doch eig. gut^^
Hallo!

Du bist dabei genau wie ich das zu lernen und da ist das Tutorial ebend nicht gut. Was ist der sinn eines Tutorials? Es sollen User die die Sprache etc. lernen sich ein Beispiel nehmen können und ein Tut als eventuellen Leitfaden sehen können und das ist bei dir nicht gegeben weil es an allen Ecken und Enden hapert. Wie du siehst wurde es umgecodet so das sich User ein Beispiel nehmen können. Das jeder anders vor und ran geht ist da nicht von Bedeutung denn viele Wege führen bekanntlich nach Rom,aber es muss sicher sein und richtig!

mfg der Litter
litterauspirna ist offline   Mit Zitat antworten
Alt 28.04.2008, 15:12  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

@David: addslashes() reicht im Grunde sogar, nur escapet mysql_real_escape_string() noch das Zeichen \1xa.
Dass man die Verbindung angeben muss, stimmt nicht. Wenn keine Angegeben wird, wird einfach die zuletzt geöffnete verwendet. Wird keine gefunden, so gibt es eine Warnung.
Will man diesen Zwang nicht haben, könnte man theoretisch addcslashes() benutzen. Aber gut, an solchen Funktionen soll man nicht herumspielen.

MagicQuotes zu ignorieren ist schlecht, sehr schlecht. Es sei denn, es ist beabsichtigt, statt \' dann schließlich \\\' zu haben.
Manko10 ist offline   Mit Zitat antworten
Alt 28.04.2008, 16:57  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Es gibt Beispiele zu bestimmten Zeichensätzen, bei denen addslashes() nicht ausreicht.
Da sich der Zeichensatz bei mehreren Verbindungen unterscheiden kann und weil eben bei nicht vorhandener oder nicht mehr gültigen (kann schnell mal passieren, "server gone") Verbindung nicht sofort eine Warnung ausgegeben wird sondern erst versucht wird eine Default-Verbindung zu MySQL herzustellen, ist die Angabe des Verbindungsobjekt mehr als nur ratsam.
Zitat:
Zitat von Manko10 Beitrag anzeigen
MagicQuotes zu ignorieren ist schlecht, sehr schlecht. Es sei denn, es ist beabsichtigt, statt \' dann schließlich \\\' zu haben.
Magic_quotes ist ein Problem, das ich gesondert behandle, nicht erst bei der Datenbankanbindung.
Meiner Meinung nach ist die adäquate Maßnahme dafür
PHP-Code:
if(get_magic_quotes_gpc())
{
  exit(
'Das Skript wird wegen einer Fehlkonfiguration des Servers (magic_quotes_gpc=On) abgebrochen.');


Geändert von David (29.04.2008 um 10:43 Uhr).
David ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
Einfaches MySQL Connect-Problem.. cebe PHP Tipps 2005-2 11 10.08.2005 12:56
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
[Erledigt] IP Sperre für Kommentare in Newssystem über MYSQL PHP Tipps 2005 5 16.03.2005 01:13
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
einfaches auslesen von einer mySQL Datenbank PHP Tipps 2004-2 2 10.11.2004 05:58
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
einfaches newssystem, einfaches newssystem php, php einfaches newssystem, newssystem php, einfaches php news-system, mysql newssystem, php news system, newssystem mysql, simples newssystem, mysql text htmlentities fehlt, einfaches newssystem mysql, einfaches news system php, einfaches news system tutorial, einfaches php news system, einfaches newssystem tutorial, einfaches newssystem für webseite, kleines newssystem mit mysql, ein einfaches newssystem für eine seite, einfaches newssystem homepage, einfaches newssystem mit datenbank

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum