SQL-Anfrage

Henrigo007

Mitglied
Hallo Leute,

ich habe ein script mit dem aus ein Formular-produkt erzeuge ich variante

bis jetzt lauft es so, was ein Administrateur oder ein User erstelle kann alle andere Users es sehen.
ich würde gern, dass alles was ein adminitrateur erstellt kann alle user sehen aber was ein User erstelle kann nur diese user und der Administrateur es sehen, aber nicht die andere User.

ich habe mir ein Sql Anfrage für diese Variante erstelle leider klappt es nicht so sieht mein statement aus
PHP:
$variants = 'select id, img_id, user_id, laeng_1, laeng_2, laeng_3, laeng_4,bem_1,bem_2,bem_3, a, b, c, d,e,al,be from variants join users using(user_id) where user_id = :current_user or user_id in( select user_id from users where role = "admin" ';

die tabelle sieht so aus:
User.sql
CREATE TABLE `users` (
`user_id` int(11) NOT NULL,
`login` varchar(250) NOT NULL,
`pass` varchar(250) NOT NULL,
`role` varchar(256) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

unter rolle versteht man admin oder user

variants.sql

CREATE TABLE `variants` (
`id` int(16) NOT NULL,
`img_id` int(16) NOT NULL,
`user_id` int(11) NOT NULL,
`pos_nr` varchar(256) NOT NULL,
`farbe` varchar(256) NOT NULL,
`laeng_1` varchar(256) NOT NULL,
`laeng_2` varchar(256) NOT NULL,
`laeng_3` varchar(256) NOT NULL,
`laeng_4` varchar(256) NOT NULL,
`bem_1` varchar(256) NOT NULL,
`bem_2` varchar(256) NOT NULL,
`bem_3` varchar(256) NOT NULL,
`a` int(11) DEFAULT '0',
`b` int(11) DEFAULT '0',
`c` int(11) DEFAULT '0',
`d` int(11) DEFAULT '0',
`e` int(11) DEFAULT '0',
`al` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

vielen Dank im Voraus für Eure Hilfe
 
Hi,

bekommst vom SQL Fehlermeldungen?

Grüsse,
BK
Ja, die Fehlermeldung lautet:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2031 ' in C:\xampp\htdocs\kant\variants.php:152 Stack trace: #0 C:\xampp\htdocs\kant\variants.php(152): PDO->query('select id, img_...') #1 C:\xampp\htdocs\kant\index.php(72): require_once('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\kant\variants.php on line 152

und die zeile 152 lautet : $req2 = $dbConnect->query($variants);
 
Wieder mal das übliche. Schreibt eure SQLs in lesbarer Form und an sieht den Fehler SOFORT!
SQL-Statement in PHP lesbar darstellen
Bei dir ist ein Fehler gaaaaanz am Schluss
SQL:
select
    id, 
    img_id,
    user_id,
    laeng_1,
    laeng_2,
    laeng_3,
    laeng_4,
    bem_1,
    bem_2,
    bem_3,
    a,
    b,
    c,
    d,
    e,
    al,
    be
from
    variants
    join users using(user_id)
where
    user_id = :current_user
    or user_id in(
         select user_id
         from users
         where role = "admin"
Ach ja. Ein weiteres Problem. Du musst den Feldern sagen, von welcher Quelle sie stammen
Also. Deine Fehler
1) Am Ende fehlt ein )
2) Den Feldern die Quelle mitgeben. zB. users.user_id
 
Wieder mal das übliche. Schreibt eure SQLs in lesbarer Form und an sieht den Fehler SOFORT!
SQL-Statement in PHP lesbar darstellen
Bei dir ist ein Fehler gaaaaanz am Schluss
SQL:
select
    id,
    img_id,
    user_id,
    laeng_1,
    laeng_2,
    laeng_3,
    laeng_4,
    bem_1,
    bem_2,
    bem_3,
    a,
    b,
    c,
    d,
    e,
    al,
    be
from
    variants
    join users using(user_id)
where
    user_id = :current_user
    or user_id in(
         select user_id
         from users
         where role = "admin"
Ach ja. Ein weiteres Problem. Du musst den Feldern sagen, von welcher Quelle sie stammen
Also. Deine Fehler
1) Am Ende fehlt ein )
2) Den Feldern die Quelle mitgeben. zB. users.user_id

so habe ich es in meinem Script gescrhieben

$variants = '
SELECT
id, img_id,
user_id,
laeng_1,
laeng_2,
laeng_3,
laeng_4,
bem_1,
bem_2,
bem_3,
a,
b,
c,
d,
e,
al,
be
FROM
variants
JOIN users USING(user_id)
WHERE
user_id = :CURRENT_USER
OR user_id IN(
SELECT user_id
FROM users
WHERE ROLE = 'admin');

leider immer eine Fehlermeldung mit 'admin' , was mache ich denn falsches ?
 
Zuletzt bearbeitet:
Hi,

PHP:
$variants = '
SELECT
    id, img_id,
    user_id,
    laeng_1,
    laeng_2,
    laeng_3,
    laeng_4,
    bem_1,
    bem_2,
    bem_3,
    a,
    b,
    c,
    d,
    e,
    al,
    be
FROM
    variants
    JOIN users USING(user_id)
WHERE
    user_id = :CURRENT_USER
    OR user_id IN(
         SELECT user_id
         FROM users
         WHERE ROLE = 'admin');

Die ' von 'admin' müssen escaped werden.

Grüsse,
BK
 
Hi

hier ist den Fehler Parse error: syntax error, unexpected 'admin' (T_STRING) in C:\xampp\htdocs\kant\variants.php on line 175
Sagt es doch schon:
Wie @Bratkartoffel schon sagte: PHP kann nicht wissen, was jetzt der String ist.
wo schliesst du die erste hochkomma?
Den Code hat er ja von dir...

PHP:
$variants = '
SELECT
   id, img_id,
   user_id,
   laeng_1,
   laeng_2,
   laeng_3,
   laeng_4,
   bem_1,
   bem_2,
   bem_3,
   a,
   b,
   c,
   d,
   e,
   al,
   be
FROM
   variants
   JOIN users USING(user_id)
WHERE
   user_id = :CURRENT_USER
   OR user_id IN(
        SELECT user_id
        FROM users
        WHERE ROLE = 'admin');'
ist falsch, da php den String beim ''' vor dem 'a' beendet. Also entweder
PHP:
$variants = '
SELECT
   id, img_id,
   user_id,
   laeng_1,
   laeng_2,
   laeng_3,
   laeng_4,
   bem_1,
   bem_2,
   bem_3,
   a,
   b,
   c,
   d,
   e,
   al,
   be
FROM
   variants
   JOIN users USING(user_id)
WHERE
   user_id = :CURRENT_USER
   OR user_id IN(
        SELECT user_id
        FROM users
        WHERE ROLE = \'admin\');'

oder

PHP:
$variants = "
SELECT
   id, img_id,
   user_id,
   laeng_1,
   laeng_2,
   laeng_3,
   laeng_4,
   bem_1,
   bem_2,
   bem_3,
   a,
   b,
   c,
   d,
   e,
   al,
   be
FROM
   variants
   JOIN users USING(user_id)
WHERE
   user_id = :CURRENT_USER
   OR user_id IN(
        SELECT user_id
        FROM users
        WHERE ROLE = 'admin');"

(Siehe auch Highlighting hier im Forum... -> Grund, Codetags [code=php] [/code] zu verwenden)

cwriter
 
Zurück