Webdesign in Siegen

Login-Tut & Newsscript

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Login-Tut & Newsscript

Beitragvon kwd am 01.05.2008, 15:42

Huhu,

möchte ja nicht aufmüpfig wirken :mrgreen: aber sind die Tuts so alt oder läuft da beim Einbau in die Tut-Seiten was schief? (Erinnere mich da an einen "Hochlade-Fehler" beim Gästebuch Tut, bei dem dann die \ weg waren) :oops: Nachdem Gästebuch-Fehlersuchen (bzw. die Lösung dazu) bin ich nun beim Login-Script..

Hier

Code: Alles auswählen
CREATE TABLE `login` (
  `id` int(11) NOT NULL auto_increment,
  `name` text NOT NULL,
  `pwd` text NOT NULL,
  PRIMARY KEY  (`id`)
)
INSERT INTO `login` VALUES (1, 'admin', 'login');


fing es bereits an, da hier und da etwas fehlte, mit dem Originalcode bekam ich erstmal einen Fehler.. ist gelöst, wollte es nur für andere Anfänger wie mich erwähnen :wink: Ist nur minimal:
Code: Alles auswählen
CREATE TABLE `login` (
  `id` int(11) NOT NULL auto_increment,
  `name` text NOT NULL,
  `pwd` text NOT NULL,
  PRIMARY KEY  (`id`)
);
INSERT INTO `login` VALUES ('1', 'admin', 'login');


Nun stecke ich im "headers already sent" Problem fest, auch beim Originalcode.. leider habe ich noch nicht das Wissen um das "mal eben" zu korrigieren.. der Fehler:

Code: Alles auswählen
Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/xxx/web/login.php:5) in /www/htdocs/xxx/web/login.php on line 8


line 8
Code: Alles auswählen
    header('Location: login-index.php');


Link zum Tutorial mit komplettem Code: http://www.der-webdesigner.net/tutorial ... login.html

Das zum Original - ich hoffe dies wird nicht als "Gemecker" verstanden, bin dankbar für diese Tutorials.. gut, man könnte nun auch sagen durch die Fehlerbehebung lernt mans besser :wink:

Zu Veränderungen habe ich eine Frage:
Wenn ich nun noch ein html-Gerüst drumpacke wirds ganz kriminell :mrgreen: - ich weiß, das es daran liegt das vor session start keine Ausgabe erfolgen darf.. habe sie dann dementsprechend ganz nach oben gepackt, der Fehler war dann auch weg.. nun habe ich noch ein paar zeilen aus dem Original, die Probleme machen (headers already sent):
25-32:
Code: Alles auswählen
          header('Status: 303 See Other');
        }
        else {
          header('HTTP/1.1 303 See Other');
        }
      }

      header('Location: login-index.php');


Ohne mein HTML-Gerüst sind sie natürlich nicht da, also wird es hier auch mit der Ausgabe davor zusammenhängen nehme ich an? Die Frage wäre dann, wie kann ich so etwas dann Alternativ lösen? Ich hätte den Login/das Formular schon gerne ins Design eingebunden..

Wäre super, wenn mir da jemand helfen könnte :) (falls mich jemand verstanden hat :roll: :wink: ) Könnte sich ein Profi evtl. ml den Original Code aus dem tut angucken und sagen, wie die Datei eigentlich aussehen müsste/könnte, ohne diese Fehler? Wie wichtig sind diese Statusangaben (in einem Admin-Bereich)?
Zuletzt geändert von kwd am 02.05.2008, 10:19, insgesamt 1-mal geändert.
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut

Beitragvon .wired am 01.05.2008, 15:54

Also, ich versteh jetzt nicht ganz, was du sonst so mit dem HTML meinst und habe mir das Tutorial jetzt auch nicht nochmal angeschaut, aber bezogen auf deinen header-Fehler:

1. Solltest du darauf achten, dass du, bevor du einen Header einbaust, keine Ausgaben erzeugst
2. Bedeutet der Fehler, dass in dem Script bereits vorher ein Header aufgerufen wurde. In einem Script kann nämlich nur jeweils ein header vom PHP-Interpreter verarbeitet werden. Das heißt, du solltest nochmal schauen, dass bei bestimmten Bedingungen dein Script nicht in mehrere Headerschleifen reinkommt...

MfG .wired
Bild Bild
Benutzeravatar
.wired
Mitglied
 
Beiträge: 332
Registriert: 24.06.2007
Wohnort: Diekholzen

Re: Login-Tut

Beitragvon kwd am 01.05.2008, 16:21

Huhu,

ja, das weiß ich (mit den vorherigen Ausgaben, die nicht sein dürfen) :) Das schrieb ich ja auch zuletzt...

Ich habe die Lösung inzwischen.. es war mal wieder so einfach, das ich im nachhinein denke ich hätte noch 5 Minuten vor dem Posten weiterprobieren sollen :roll: :oops:

Danke trotzdem! :)
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut

Beitragvon kwd am 02.05.2008, 10:16

Huhu

und schon kommt die nächste Frage :roll:

Ich habe nun mein "erstes eigenes" Newsscript (sogar funktionierend :mrgreen: ) mit Login-Bereich.. nun würde ich gerne die Möglichkeit zum löschen und editieren einbauen.. ich weiß, das es irgendwie mit UPDATE und DELETE realisiert werden muss.. aber wie..? Ich habe jetzt eine neue datei edit-news.php angelegt, in der ich wieder das Formular/den Editor (WYSIWYG) habe.. klicke ich in der news.php auf edit leitet er weiter zur edit-news und übergibt die ID
Code: Alles auswählen
<a href=\"/web/edit-news.php?id=$row[0]\">edit</a>


aber ist das so richtig? Müsste ich dann nicht theoretisch über diesen Link auch den Eintrag einzeln aufrufen können? Das geht nämlich nicht.. auch "überträgt" er den Beitrag so nicht ins edit-Formular. Ich habe die spalte id (Tabelle 'news' ) als auto_increment und als Primary.. wie es mit dieser Variante gelöst wird hat Tante Google nicht ausgespuckt. (restliche Tabellen: title, news_inhalt, datum)
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut & Newsscript

Beitragvon Avedo am 02.05.2008, 10:25

Hallo Mona.
Hört sich doch alles schon ganz gut an. Ich würde dir empfehlen mir mal das Tutorial zu diesem Thema auf http://tut.php-quake.net/ anzusehen. Ist so oder so immer ein guter Tipp, um sich Ideen zu holen. Da wird zum Beispiel auch der Aufbau eines Newsscripts mit Loginbereich erklärt.
MfG, Andy

//EDIT: Nur eine kurze zwischenfrage. Arbeitest du mit Mysql oder der neuen PHP Erweiterung MySqli? Ich kann dir Mysqli nur empfehlen, da es besser und auch einfacher in der Bedienung ist.
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 553
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Login-Tut & Newsscript

Beitragvon kwd am 02.05.2008, 14:59

Huhu,

mit MySQL, da ich hier zumindest vorkenntnisse habe, sprich - überhaupt eine Einstiegsmöglichkeit :wink: MySQLi höre ich grad zum erstenmal - heißt das, wieder alles neu lernen? :o0:

Bin nun gerade dabei, eine editier-funktion einzubauen.. wenn ich auf "edit" klicke, leitet er mich auf die edit-news.php weiter, die ID ist ebenfalls in der url (web/edit-news.php?id=29) , ich bekomme allerdings alle Beiträge samt Inhalt angezeigt.. dabei möchte ich ja nur den jeweiligen einzelnen.. wahrscheinlich ists wieder nur eine Kleinigkeit :oops: , würdest du mal schauen?



news.php
Code: Alles auswählen
<?php
error_reporting(E_ALL);
require_once ("web/dbconnect.php");
require_once ("web/page.php");

$sql = "SELECT id, title, news_inhalt, datum FROM news ORDER BY id DESC LIMIT ".$start.",".$eintraege_pro_seite."";
$result2 = mysql_query ($sql) OR die(mysql_error());

if (mysql_num_rows($result2))
   {
   while ( $row = mysql_fetch_row ( $result2 ) )
      {
      echo "<table border=\"0\" width=\"650\" height=\"100%\">
      <tr bgcolor=\"#D9CDDC\"><td align=\"center\" height=\"25\"><b>".$row[1]."</b></td><td align=\"right\" width=\"15\">
      <b>".$row[3]."</b></td></tr><tr bgcolor=\"#EAEAEA\"><td>".$row[2]."</td><td align=\"right\" width=\"15\"><a href=\"/web/edit-news.php?id=$row[0]\">edit</a></td></tr></table><br><br>";
      }
   echo ''.$link_string.'';

   }
else {
   echo 'Derzeit keine News<br />';
   }
?>

edit-news.php
Code: Alles auswählen
<?php
error_reporting(E_ALL);
require_once ('web/dbconnect.php');

$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
$sql = "SELECT id, title, news_inhalt, datum FROM news ORDER BY id";
$result2 = mysql_query ($sql) OR die(mysql_error());

if (mysql_num_rows($result2))
   {
      while ( $row = mysql_fetch_row ( $result2 ) )
      {
      echo "<h3>News - Editor</h3><br>

      <form method=\"post\" action=\"/web/edit-news.php\">
      Betreff/Titel:&nbsp;&nbsp;<input type=\"text\" size=\"55\" name=\"title\"><br><br>
      <textarea name=\"news_inhalt\" cols=\"85\" rows=\"15\" id=\"news_inhalt\">".$row[2]."</textarea>
        <input type=\"submit\" value=\"Abspeichern\" />
      </form><br>";
      }
   }
?>


Wie sage ich ihm nun, das er die mitgelieferte ID lesen und nur dessen Inhalt übernehmen soll?

Das Tutorial kann ich übrigens rückwärts pfeiffen, aber gegen das ab-und-zu-Brett-vorm-Kopf hilfts auch nicht :mrgreen: :wink:
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut & Newsscript

Beitragvon Eyecatcher am 02.05.2008, 15:05

Code: Alles auswählen
$newsid = $_GET['id'];
$sql = "SELECT id, title, news_inhalt, datum FROM news WHERE ID = '".$newsid."'";
“Freude an der Arbeit läßt das Werk trefflich geraten”
» Aristoteles
Benutzeravatar
Eyecatcher
Mitglied
 
Beiträge: 286
Registriert: 01.03.2008
Wohnort: Espelkamp

Re: Login-Tut & Newsscript

Beitragvon Basti am 02.05.2008, 15:09

Da war ich wohl wieder zu langsam (hätte das etwas ausführlicher gemacht mit Erklärung) ;)

Jedenfalls musst du über eine WHERE Angabe Einschränkungen für die Abfrage machen, in dem Fall soll ja nur der Eintrag mit der passenden ID abgerufen werden.

Das id im Query muss übrigens klein geschrieben werden, da die Spalte in deiner Tabelle ja anscheinend auch klein geschrieben wird. Ansonsten stimmt das aber so.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1889
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Re: Login-Tut & Newsscript

Beitragvon kwd am 02.05.2008, 15:18

Huhu,

danke euch :)

Jetzt ist wieder das Problem aufgetaucht, was ich schon mehrfach hatte:
Code: Alles auswählen
Notice: Undefined variable: row in /www/htdocs/xxx/web/vorschau.php on line 77

Notice: Undefined index: in /www/htdocs/xxx/web/vorschau.php on line 77


komischerweise geht nämlich genau das nicht.. _GET und _POST konnte/kann ich nicht anwenden und für z.B. $row[0] kann ich auch keine Variable definieren.. dann kommt immer diese Meldung. "id" ist in der DB klein geschrieben..

Ich habe z.B.

news.php

Code: Alles auswählen
<?php
require_once ("web/dbconnect.php");
require_once ("web/page.php");

$sql = "SELECT * FROM news ORDER BY id DESC LIMIT ".$start.",".$eintraege_pro_seite."";
$result2 = mysql_query ($sql) OR die(mysql_error());
if (mysql_num_rows($result2))
   {
   while ( $row = mysql_fetch_row ( $result2 ) )
      {
   echo "<table border=\"0\" width=\"650\" height=\"100%\">
   <tr bgcolor=\"#D9CDDC\"><td align=\"center\" height=\"25\"><b>".$row[1]."</b></td><td align=\"right\" width=\"15\">
   <b>".$row[3]."</b></td></tr><tr bgcolor=\"#EAEAEA\"><td>".$row[2]."</td><td align=\"right\" width=\"15\"></td></tr></table><br><br>";
      }
   echo ''.$link_string.'';
   }
else {
   echo 'Derzeit keine News<br />';
   }
?>


Um nicht durcheinanderzukommen, wollte ich:

Code: Alles auswählen
$row[0] = $id;
$row[1] = $title;
$row[2] = $news_inhalt;
$row[3] = $datum;
?>


..um dann unten diese ganzen rows zu ersetzen. Aber wenn ich es so mache, kommt immer o.g. Meldung. Was übersehe/vergesse ich? :?

Gebe ich echo $row[0]; ein, wird mir der Inhalt angezeigt. Gebe ich dann echo $id; ein, o.g. Meldung..
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut & Newsscript

Beitragvon Avedo am 02.05.2008, 16:47

Machs einfach so.
Code: Alles auswählen
  <?php
  $id = $_GET[<'id'];

  $sql= "SELECT * FROM  news WHERE id = $id";
  $reply = mysql_query($sql);
  while($row = mysql_fetch_object($reply))
  {
    echo $row->url;
  }
  ?>


Zu MySQLi kann ich nur sagen, dass die SQL-Syntax, also hier $sql gleich bleibt. Allerdings sind die Kommandos für MySQLi etwas anders, aber oftmals sehr ähnlich. Durch seine sehr objektorientierte Syntax bietet MySQLi aber ein viel einfacheres und benutzerfreundliches Handling. Schau dir das Thema doch einfach mal im Manual an und wenn es Fragen gibt, sind wir ja wie immer gerne da.
MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 553
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Login-Tut & Newsscript

Beitragvon kwd am 02.05.2008, 17:28

Huhu,
*antwort zwischen Tür und Angel*

der < ist beabsichtigt nehm ich an?

Parse error: syntax error, unexpected '<', expecting ']' in /www/htdocs/xxx/web/vorschau.php on line 79


Ohne <;
Notice: Undefined index: id in /www/htdocs/xxx/web/vorschau.php on line 79

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /www/htdocs/xxx/web/vorschau.php on line 83


seufz.. MySQLi interessiert mich nun schon, allerdings fehlt ehrlich gesagt grad die Motivation das auszutesten, nachdem mit dem jetzigen schon wieder (fast) nichts hinhaut.. ich werds mir aber sicher noch angucken. Nach deiner Beschreibung würds eventuell damit dann ja eher hinhauen.. wär nur schon schön, wenn ich mich vorher erst mit MySQL vertrage :mrgreen:
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut & Newsscript

Beitragvon Avedo am 02.05.2008, 17:53

Nein das "<" gehört da nicht hin. Dir ist aber klar, dass du bevor du das so, wie ich es unten gepostet habe, machen kannst erst eine Verbindung zum MySQL-Server und dann zur DB herstellen musst? Und dass du eventuell den Rest noch für dich anpassen musst? $row->url kann ja für dich nicht wirklich stimmen.

Mit MySQLi sieht das ganze übrigens so aus:
Code: Alles auswählen
<?php
   //create handle
   @db = mysqli($host, $user, $password, $db);

   //test connection
   if(mysqli_connect_errno())
   {
      printf ("Connection failed: %s\n", mysqli_connect_error());
   }

   // prepare SQL-query
   $sql= "SELECT * FROM  news WHERE id = $id";

   // send sql-query
   $reply= $db->query($sql);

   // save reply to an object
   while( $data = $reply->fetch_object() )
   {
      // print out result
      echo "ID:".$data->id;
   }   

   // clear storage
   $reply->close();

   // close connection
   $db->close();
?>


MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 553
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Login-Tut & Newsscript

Beitragvon kwd am 02.05.2008, 18:47

Huhu,

ja, ist klar :wink: Und ohne Verbindung würde ich ja ganz andere Meldungen bekommen, das ist alles da :)
Da sich die Fehler hier grad häufen, spule ich nochmal zurück und fange ein Stück weiter vorne an, nun hab ich das totale Chaos :roll:

/edit; Übrigens, bzgl. $id = $_GET['id']; - das ist ja eins der oben geschilderten Probleme, er nimmts nicht an bzw gibt ausser Fehlermeldungen nichts aus.. ich kann meine Tabelleneinträge praktisch nur mit §row[] ausgeben, keine einzige Variable will, egal in welcher Form..
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen

Re: Login-Tut & Newsscript

Beitragvon Avedo am 02.05.2008, 18:55

$_GET['id'] hat doch nichts, aber auch wirklich garnichts mit der Datenbankausgabe zu tun. Damit ließt du nur die per URL überlieferten Variablen aus.
MfG, Andy
Ich bin zu Mimis Religion konvertiert!
I'm so tired of slitting the throats of people calling me a violent psychopath.
Benutzeravatar
Avedo
Mitglied
 
Beiträge: 553
Registriert: 09.12.2007
Wohnort: Göttingen

Re: Login-Tut & Newsscript

Beitragvon kwd am 02.05.2008, 19:08

Huhu,

aber mit $id = $_GET['id']; habe ich in fettgedrucktem dann doch die Variable $id die ich -theoretisch- dann verwenden könnte oder versteh ich grad etwas völlig falsch? :oops: *sichschonmalverkriechengeht*



/edit; geschafft!! :) :) :) :)

Mit

Code: Alles auswählen
if (isset($_GET['id']))
      {
         $query = "DELETE FROM news WHERE ID = ".$id."";
         $delete = mysql_query($query) OR die(mysql_error());
      }


hats geklappt! *freu* Löschfunktion ist drin :) Zurückspulen und neu anfangen hilft manchmal :wink:
LG

Mona
kwd
Mitglied
 
Beiträge: 36
Registriert: 24.03.2008
Wohnort: Niedersachsen


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast