Kann dieser Code funktionieren?

Ich habe mal einen Kollegen gefragt der mir nen kleine php-script gebastelt hat.
Er ist sich nicht sicher ob das funktioniert, da er sich mit den Befehlen und dem Syntax unter PgSQL nicht ganz so vertraut ist.
Kann der Code funktinieren und wenn nein, wie müsste es richtig heißen?!

einen Fehler haben wir schon, der Syntax in LINE 7 ist nicht richtig

[php]<?php
require_once( “DB.php”);
$dbconn = pg_connect(“host=xxx.xxx.xxx.xxx dbname=‘foo’ user=postgres password= bla”)
or die('Verbindungsaufbau fehlgeschlagen: ’ . pg_last_error());

$query = (‘SELECT “German”.“User”.“UserID” FROM “German”.“User” WHERE “German”.“User”.“UserName” =’?’ AND “German”.“User”.“PWT”=’?’’ ,array( $POST[‘user’],$_POST[‘pass’] ) );
$res = pg_query($query) or die('Abfrage fehlgeschlagen: ’ . pg_last_error());
$row = array( null );
if ( $res != null )
$res->fetchInto( $row );

if ( $row[0] != null )
{
session_start();
$_SESSION[‘user’] = $row[0]:
header( “Location: hereinspaziert.php” ); //Hier Adresse bei erfolgreichem Login
}
else
{
header( “Location: 22.php?bad=1” ); //Schriftzug in 22.php
}
?>[/php]

Ihr habt ein PHP-Problem, keines mit PG. Wie wäre es, wenn ihr mal schaut, was da als String für Dein $query rauskommt?

Andreas

Auch wenn ich jetzt gegen ne wand laufe…

Aber kann ich ja nicht weil ich da schon nen fehler drinne habe.

ich weis nicht , mit welchem Zeichen ich den befehl “array” von der Sql abweisung trenne.

Okay.

<?php


$user=$_GET["user"];
$pass=$_GET["pass"];

$query = 'SELECT "German"."User"."UserID" FROM "German"."User" WHERE "German"."User"."UserName" =\'' . $user . '\'  AND "German"."User"."PWT"=\'' . $pass . '\'' ;

echo $query;

?>

Das ist mit GET und nicht POST. (hier einfacher zum zeigen) Speichere das und rufe es wie folgt auf:

… php?user=andreas&pass=geheim

(was latürnich bei Passwörtern komplett dumm ist)

Die Ausgabe sollte sein:

SELECT “German”.“User”.“UserID” FROM “German”.“User” WHERE “German”.“User”.“UserName” =‘andreas’ AND “German”.“User”.“PWT”=‘geheim’

Es gibt auch Dinge wie sprintf() und auch Funktionsübersicht / Übersicht Funktionsreferenz.

Andreas

Die SQL-anfrage einfach so komplett mit Nutzereingaben zusammenstöpseln ist recht gefährlich, man stelle sich nur vor jemand verwende ein Passwort der Form

egal’ OR usertabelle.username=‘admin’

Wahrscheinlich wollte Hudrator (mehr oder weniger bewusst) die Anfrage als prepared statement absetzen. Ob pg_query() das auch tut siehe PHP-Doku…

Hallo,
offen gestanden verstehe ich sinn und zweck der gesamten Übung nicht so recht, außer dass ein Benutzer angemeldet werden soll, insofern schließe ich mich meinem Vorkommentator an, Ihr habt ein php-problem…

einige Anmerkungen im Vorfeld:
1.) Ich verwende im Normalfall adodb, du glaube ich PEAR DB, da ist die Syntax etwas anders, aber ich denke, die nachfolgenden Schnipsel sollten trotzdem weiterhelfen.
2.) was ist das für ne Abfrage? Das soll das mit “German”.“User” … usw?? Ich würde für die SQL-Abfrage etwas in der Art erwarten:

[php]
$user=$_POST[‘user’];
$pass=$_POST[‘pass’]; // POST, nicht GET

$query=“Select pkey,username,password from table_users where ((username=”.$user.")) order by pkey"; //oder wie auch immer

$res = pg_query($query));

$row=array(); // deine Löung mit array(null) bedeutet meines erachtens, dass der Array bereits ein Element mit dem Wert NULL enthalten soll

// ab hier ist die Syntax auf deinen DB-Abstraction-Layer anzupassen

if($res!==false)
{
// es gibt datensätze in diesr Query

// zum ersten Datensatz gehen (es sollte auch nur einen Datensatz geben, da deine Benutzer-ID’s hoffentlich eindeutig sein werden)
$res->MoveFirst();

// aus deinem Code übernommen
$res->fetchInto( $row );

// md5 verschlüsselte passwörter auf übereinstimmung prüfen
if(md5($pass)== $row[‘password’])
{
// Passwörter stimmen überein
// Wir setzen die userid in die Session variable als indikator für einen angemeldeten User
$_SESSION[‘registered_user’]=$row[‘pkey’];
}
else
{
// Registered user auf null setzen (kein angemeldeter Benutzer)
$_SESSION[‘registered_user’]=0;
}
}
else
{
// kein Benutzer mit diesem Namen gefunden
$_SESSION[‘registered_user’]=0;
}
[/php]3.) Session-Start
Starte die Session in der ersten Zeile deines Codes, es ist unschädlich Sessions auch für unangemeldete User zu initialisieren (und teilweise sogar notwendig)
4.) header(herinspaziert.php) und konsorten
so löst man das nciht

Wenn ich als unangemeldeter User in meinen Browser die url von hereinspaziert.php eingebe bin ich im System (vollkommen egal, ob angemeldet, oder nicht)

Desweiteren würde ich mt mit dem einsatz der ‘header-funktion’ vorsichtig umgehen. Macht schnell gravierende Probleme wenn man nicht so recht weiss was man tut :slight_smile:

Einer von etwa 1000 richtigen Ansätzen könnte wiefolgt aussehen:

[php]
… htmlcode seiner seite

<?php if($_SESSION['registered_user']>0) // registrierter Benutzer { echo("hier wird der code für angemeldete benutzer geschrieben"); } else { echo("hier wird der code für NICHT angemeldete benutzer geschrieben"); } [/php] \ \ Hoffe das hilft, es sei jedoch gesagt, dass es hunderte von Pages im internet gibt, die alternative Methoden für dieses Problem vorschlagen. insofern, good luck Jochen