Hilfe

Kolibri814

Mitglied
Heute hab ich gleich mehrere Fragen, die mir meine Bücher nicht beantworten.

Zum einen, warum bekomm ich die Fehlermeldung in der login.php Datei nicht ausgegeben?


Die authentifizierung.php Datei von welcher aus die Fehlermeldung weitergegeben wird, wenn "nick" und/oder "pwd" falsch eingegeben werden:
PHP:
session_start();

$nick = $_POST['nick'];
$pwd = $_POST['pwd'];
if (isset($nick))
{
$sql = "select
         id
         from
         anmeldung
         where
         nick='$nick'
         and
         pwd='$pwd'";

$result = mysql_query($sql) or die(mysql_error());

if (!($row = mysql_fetch_row($result)))
{
header("Location: http://".$_SERVER['HTTP_HOST']
         ."/login.php?meldung=Anmeldung konnte nicht erfolgen");
         }
else
         {
         $_SESSION['angemeldet']="ja";
         }
}
else if($_SESSION['angemeldet']!="ja")
{
header("Location: http://".$_SERVER['HTTP_HOST']
 ."/anmeldung.php");
}


Auszug aus der login.php Datei:
PHP:
if (isset($meldung))
{
print "<font color='red'>Fehler: $meldung</font>";


Zum anderen erhalte ich die Fehlermeldung:

"Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei '' in Zeile 6"
Nach einer korekten Anmeldung.

Bisher landet man dann auf der profil.php die so aussieht:
PHP:
include("dbconnect.inc.php");
include("authentifizierung.php");
include("userausgabe.php");

Natürlich fehlt dann noch die userausgabe.php Datei.
Die sieht so aus:

PHP:
$sql = "select
        admin      <---------- Zeile 6 
       from
         user
       where
         id=$id";


$result = mysql_query($sql) or die(mysql_error());

if ($row = mysql_fetch_object($result))
         {
         print "<p class='admin'><img src='' alt='' border='0' width='' height=''>a</p>";
         }
   else
         {
          $sql = "select
         moderator
       from
         user
       where
         id=$id";

$result = mysql_query($sql) or die(mysql_error());

if ($row = mysql_fetch_row($result))
           {
           print "<p class='mod'><img src='' alt='' border='0' width='' height=''>m</p>";
           }
           }

   $sql = "select

         profilbild,
         profiltext,
         familienstand,
         land,
         region,
         stadt,
         plz,
         haarfarbe,
         augenfarbe,
         figur,
         größe,
         tabus,
         motto,
         homepage,
         gewerblich,
         tabak,
         alkohol
       from
         user
       where
         id=$id";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);


print "<p class='profilbild'>".$row['profilbild']."</p>";
print "<p class='profiltext'>".$row['profiltext']."</p>";
print "<p class='familienstand'>".$row['familienstand']."</p>";
print "<p class='land'>".$row['land']."</p>";
print "<p class='region'>".$row['region']."</p>";
print "<p class='stadt'>".$row['stadt']."</p>";
print "<p class='plz'>".$row['plz']."</p>";
print "<p class='haarfarbe'>".$row['haarfarbe']."</p>";
print "<p class='figur'>".$row['figur']."</p>";
print "<p class='größe'>".$row['größe']."</p>";
print "<p class='tabus'>".$row['tabus']."</p>";
print "<p class='motto'>".$row['motto']."</p>";
print "<p class='homepage'>".$row['homepage']."</p>";
print "<p class='gewerblich'>".$row['gewerblich']."</p>";
print "<p class='tabak'>".$row['tabak']."</p>";
print "<p class='alkohol'>".$row['alkohol']."</p>";

Kann mir jemand weiterhelfen?


Vielen Dank
 
Also zum ersten Problem:

PHP:
if(isset($_GET['meldung']))

zu deinem Anderen Problem:
Gewöhn dir bitte ein richtig lesbare Syntax an.
PHP:
$sql = "SELECT `admin` FROM `user` WHERE `id`= ".$id;
 
1. Meldung willst du als String übergeben. Strings solltest du quotieren. Also: *.php?meldung='Ich bin eine Meldung' (Vor allem wenn Leerschläge enthalten sind).

2. Wenn du nicht eine prähistorische PHP-Version benutzt, dann schlag mal in der Doku nach, wie man mit den Superglobalen hantiert. Je nach Einstellungen deines Servers kannst du so nicht auf die, im Link mitgesendeten Variablen zugreifen.

Schreib mal in ein Script index.php nur folgende Zeilen und schau was ausgegeben wird wenn du index.php?meldung='Ich bin eine Meldung'
PHP:
echo "1. Echo {$meldung} <br />";
echo "2. Echo {$HTTP_GET_VARS['meldung']} <br />";
echo "3. Echo {$_GET['meldung']}<br />"; // Empfohlene Variante
 
Vielen Dank für deine schnelle Antwort.
Ich werde mir in Zukunft mehr Mühe bei der Schreibweise geben.
Ausprobiert habe ich es auch schon.
Leider gibt es nicht den gewünschten Erfolg.

Zu erstens:
Ich bekomm jetzt immerhin schon "Fehler:" rot ausgegeben aber die Meldung fehlt noch :(

und bei zweitens:

wenn ich es so abändere dann meckert er schon in Zeile eins aber das ist ja nur das öffnende php Tag?
 
Dann versuchs mal mit systematisch Debuggen. Setz echo-Ausgaben in den verschiedenen Abfrageblöcken und kontrolliere so, welche Blöcke er ausführt und wo er abbricht obwohl die Bedingungen deiner Meinung nach gegeben wären.

Ausserdem solltest du dich mal über SQL-Injections schlau machen. So wie dein Code jetzt aussieht, kann ein User locker, von dir nicht gewollte, SQL-Statements in deinem Code absetzen.

Versuch das Problem noch einmal zu analysieren und schreib noch einmal sauber strukturiert, was genau das Problem ist. Mit den Fehlermeldungen und den relevanten (nur den relevanten) Codestellen.
 
Das mit der Meldung funktioniert jetzt.

Vielen Dank.

Bei dem anderen Script versteh ich leider gar nichts mehr.
Alles was bisher funktioniet hat, funktioniert jetzt nicht mehr.

Bei dieser Abfrage, aber auch bei meiner ursprünglichen meckert der Server wegen den schließenden zweiten Anführungszeichen. Das versteh ich nicht.
PHP:
$sql = "SELECT `admin` FROM `user` WHERE `id`= ".$id;

Kann es sein, dass einfach die id nicht weitergegeben wird?
Ich dachte dass die authentifizierung.php Datei die id zur Verfügung stellen würde.

Ist das nicht so?
 
Wenn du nicht noch irgendwo Code liegen hast, den wir hier nicht sehen, der mit dem betreffenden Problem zu tun hat, dann nein.

PHP:
header("Location: http://".$_SERVER['HTTP_HOST']."/anmeldung.php"

Woher soll denn das nächste Script die Variable $id nehmen?

1. Selbiges Kapitel wie vorher: Hol dir die Werte per globalem $_GET und $_POST - Array
2. Der Wert für $id muss irgendwie übergeben werden

PHP:
header("Location: http://".$_SERVER['HTTP_HOST']."/anmeldung.php?id=".$what_so_ever);

//Zugriff im andern Script dann mit
if(is_numeric($_GET['id'])) $id = $_GET['id'];

Ausserdem sei noch einmal auf SQL-Injections verwiesen. Maskiere kritische Zeichen. Schau dir mal mysql_real_escape_string() und intval() an. Oder schau dir mal die mysqli-Extention an.
 
Stopp,
die beiden header-Anweisungen sollen keine "id" übermitteln.
Die "id" soll aus einer Tabelle Namens "anmeldung" ausgelesen werden und zwar genau die "id" die zu "nick" und "pwd" gehört.

Dieser Teil:
PHP:
if (!($row = mysql_fetch_row($result)))
{
header("Location: http://".$_SERVER['HTTP_HOST']
         ."/login.php?meldung=Anmeldung konnte nicht erfolgen");
         }

und dieser Teil:
PHP:
else if($_SESSION['angemeldet']!="ja")
{
header("Location: http://".$_SERVER['HTTP_HOST']
 ."/anmeldung.php");
}
sind die Abbruchmöglichkeiten. Nocheinmal zum login oder ganz zur Registrierungsseite.

Der Teil der weiterführt ist:
PHP:
else
         {
         $_SESSION['angemeldet']="ja";
         }

Nur der bringt dich auf die profil.php Datei wo dann die "id" benötigt wird.
Das Auslesen funktioniert aber schon nicht, wie ich gerade festgestellt habe.
 
Zuletzt bearbeitet:
Zurück