65999
Goto Top

Probleme mit meinem sql code!

Hi.

Ich habe mich seit Anfang dieser Woche an die Materie php und mysql gewagt:

 
<?PHP
session_start();
$name = $_SESSION['username'];  
$EvendID = $_SESSION['EventID'];  
echo $Event;
echo $name;

    if( isset($_POST['Teilnahme']) && !empty($_POST['Teilnahme']) ) {  
        echo $_POST['Teilnahme'];  
    } else {
        echo 'Es wurde keine Option ausgewählt!';  
    }
 include("db.php");  

 $sql = 'SELECT MitgliederID FROM `Mitglieder` WHERE BenutzernameMitglieder='$name';  
 $sql = mysql_query($sql);

 while($sql = mysql_fetch_object($sql))
    {
    echo $sql->MitgliederID;
    }
?>

Und zwar stehe ich davor, dass mir die sql Abfrage in Zeile 16 kein Ergebnis liefert!

Wo ist der Fehler?

Content-Key: 103860

Url: https://administrator.de/contentid/103860

Ausgedruckt am: 19.03.2024 um 11:03 Uhr

Mitglied: dog
dog 11.12.2008 um 12:10:23 Uhr
Goto Top
Du hast hier einen Syntax Fehler drinne:

$sql = 'SELECT MitgliederID FROM `Mitglieder` WHERE BenutzernameMitglieder='$name';   
       ^                                                                   ^
       1                                                                   2

Bei 1 beginnt dein PHP-String, bei 2 endet er, alles danach ist syntaktisch falsch.
Du müsstest schreiben:

$sql = "SELECT MitgliederID FROM `Mitglieder` WHERE BenutzernameMitglieder='$name'";

Vorsicht! Auch wenn das so funktioniert, ist es ein enormes Sicherheitsrisiko und hat so nichts in der Praxis verloren.

Deine While-Schleife funktioniert übrigens so auch nicht: Nach dem ersten durchgang wird $sql überschrieben und sie kann kein zweites mal ausgeführt werden.

Grüße

Max
Mitglied: 65999
65999 11.12.2008, aktualisiert am 09.11.2016 um 09:13:11 Uhr
Goto Top
Das mit der while Schleife ist logisch, der Benutzername gibt es ja auch nur 1x und soll danach aufhören!
Mitglied: dog
dog 11.12.2008 um 12:31:06 Uhr
Goto Top
Das mit der while Schleife ist logisch, der Benutzername gibt es ja auch nur 1x und soll danach aufhören!

Nein ist es nicht.
Effektiv produzierst du einen PHP-Fehler und dadurch bricht die While-Schleife ab.
Wenn du wirklich nur eine Zeile holen willst brauchst du eben auch nur

$row = mysql_fetch_object($query);

schreiben.

Bitte füge an dein Script, während du es entwickelst ganz oben
error_reporting(E_ALL);
ini_set('display_errors','On');  
an, damit du die Fehlermeldungen von PHP auch siehst.

Was meinst du mit Vorsicht! Was meinst du mit Sicherheitsrisiko, wie wäre es richtig gewesen?

Dazu empfehle ich mal als Ausgangspunkt http://de.wikipedia.org/wiki/SQL-Injection
Mitglied: 68702
68702 11.12.2008 um 12:34:58 Uhr
Goto Top
Gelöscht, weil Anleitung zum Hacken...
Mitglied: 65999
65999 11.12.2008, aktualisiert am 09.11.2016 um 09:16:24 Uhr
Goto Top
Danke ...
Mitglied: 65999
65999 11.12.2008, aktualisiert am 09.11.2016 um 12:35:24 Uhr
Goto Top
noch eine Frage:

Und zwar ist mir aufgefallen, dass wenn ich mich anmelde und anschließend als Test Ja sage, dass er beim Ersten aufruf nie die Saison übernimmt. Erst wenn ich erneut im Browser die Site öffne, dann meinen Benuzternamen eintrage, dann ja auswähle, dann funktioniert es.

Woran könnte das liegen? Bei Bedarf poste ich mal den Quelltext.

Danke für eure Hilfe
Gruß
Mitglied: dog
dog 11.12.2008 um 15:55:19 Uhr
Goto Top
Bei Bedarf poste ich mal den Quelltext!

Raten ist immer blöd...
Mitglied: 65999
65999 12.12.2008, aktualisiert am 09.11.2016 um 09:24:49 Uhr
Goto Top
So, hier jetz mal mein Quelltext!


<html>
<head>
<meta http-equiv="refresh" content="3; URL=inlineframe.php">  
</head>
<body>
<?PHP
session_start();
$name = $_SESSION['username'];  
$EventNr = $_SESSION['Event'];  

    if( isset($_POST['TeilnahmeID']) && !empty($_POST['TeilnahmeID']) ) {  
        //echo $_POST['Teilnahme']; 
        $Teilnahme = $_POST['TeilnahmeID'];  
    } else {
       echo 'Es wurde keine Teilnahmeoption ausgew&auml;hlt!';  
    }

include("db.php");  

$result = mysql_query("SELECT MitgliederID FROM `Mitglieder` WHERE BenutzernameMitglieder='$name'");  
if (!$result) {
    echo 'Abfrage konnte nicht ausgeführt werden: ' . mysql_error();  
    exit;
}
$MitgliederID = mysql_fetch_row($result);
$insert = "INSERT INTO Eventzuordnung(Events_EventsID, Mitglieder_MitgliederID, Status) VALUES('$Event','$MitgliederID','$Teilnahme')";  
mysql_query($insert); mysql_close();

 ?>

</body>
</html>


danke für eure hilfe!
gruß
Mitglied: dog
Lösung dog 13.12.2008 um 05:39:42 Uhr
Goto Top
Hallo,

dein Problem liegt hier:

session_start();
$name = $_POST['name'];  

if(!isset($name))
   {
   $name = "Gast";  
   }
$_SESSION['username'] = $name;  

Gehen wir das mal Stück für Stück durch:

1. session_start() - soweit OK (Generell empfiehlt sich diese Funktion als allererstes auf einer Seite aufzurufen, sonst könntest du auf manchen Servern Probleme kriegen)

2. $name = $_POST['name']; - Wenn das POST-Feld name gesetzt ist wird es $name zugewiesen, ist es nicht gesetzt wird PHP $name den Wert false zuweisen.

3. isset($name) prüft ob eine Variable vorhanden ist. Dies muss hier immer der Fall sein, weil du in Schritt 2 auch immer eine Zuweisung hast.

Ich hoffe das hilft dir weiter face-smile

Grüße

Max