• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Warum ist $email nicht gesetzt? :(

Nick

Mitglied
Hallo :)

Ich habe eine Tabelle, mit mehreren Zeilen, wo alle User aufgelistet werden.
Jeder User hat eine Email, Password, Vorname, Nachname, Freigeschaltet (entweder 1 oder 0), Gesamt Logins, und Letzter Login.

In dem Feld von Freigeschaltet (das in der Datenbank "okey" heißt), ist ein Formular Feld, wo je nachdem eine 1 oder 0 drinnen steht. Nun möchte ich wenn da eine 1 drinnen steht, und ich eine 0 rein schreibe, das das Feld in der Datenbank geupdaited wird. Als das nicht funktionierte habe ich mir die Abfrage ausgeben lassen, und hab da gesehen das $email nicht gesetzt ist, und er somit kein Feld findet.

Hier ist erst mal mein Code:

PHP:
<?php
$db_link = mysql_connect ( **, **,  **); 
$db_sel = mysql_select_db( Martin )   or die("Auswahl der Datenbank fehlgeschlagen");
$sql = "SELECT * FROM authorized_users"; 
$db_erg = mysql_query( $sql );
if ( ! $db_erg ){  
  die('Ungültige Abfrage: ' . mysql_error());
}

echo '
 <table border="1">
 <thead>
 <tr>
 <td> <b>Email-Adresse</b></td>
 <td> <b>Password </b></td>
 <td> <b>Vorname </b></td>
 <td> <b>Nachname </b></td>
 <td> <b>Freigeschaltet </b></td>
 <td> <b>Gesamt-Logins </b></td>
 <td> <b>Letzter Login </b></td>
 </tr></thead>';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC)){ 
   echo
   "<tr>";  
   echo "<td>". $zeile['email'] . "</td>"; 
   echo "<td>". $zeile['password'] . "</td>";  
   echo "<td>". $zeile['vorname'] . "</td>"; 
   echo "<td>". $zeile['nachname'] . "</td>"; 
   if ($zeile['okey'] == 1 )  {  
     echo '<td><form><input name="frei" value="1" type="text" size="20" maxlength="30"></p></form></td>';  
   }  
   elseif ($zeile['okey'] == 0 )  {  
     echo '<td><form><input name="gesperrt" value="0" type="text" size="20" maxlength="30"></p></form></td>'; 
   } 
     echo "<td>". $zeile['Logins'] . "</td>";  
     echo "<td>". $zeile['lastlogin'] . "</td>";  
     echo "</tr>";}echo "</table>"; 
     mysql_free_result( $db_erg );
?>

<?php
$email = $zeile['email'];
$frei = $_POST['frei'];
$gesperrt = $_POST['gesperrt'];
if ($frei == 0){  
  $db_conn = new mysqli('localhost', '**', '**', '**');
  if (mysqli_connect_errno()) {  
    echo 'Verbindungsaufbau zur Datenbank fehlgeschlagen:'.mysqli_connect_error();  
    exit(); 
  }
 $lastlogin = "UPDATE authorized_users SET okey = '0' WHERE email='$email'";  
 echo $lastlogin;  $result = $db_conn->query($lastlogin) || die("SQL-Fehler: ".$lastlogin); 
}
if ($gesperrt == 1){
    $db_conn = new mysqli('localhost', '**', '**', '**');
    if (mysqli_connect_errno()) {  
    echo 'Verbindungsaufbau zur Datenbank fehlgeschlagen:'.mysqli_connect_error();   
    exit();  
    }
   $lastlogin = "UPDATE authorized_users SET okey = '1' WHERE email='$email''";
   echo $lastlogin;$result = $db_conn->query($lastlogin) || die("SQL-Fehler: ".$lastlogin);
 }
?>

Naja und jetzt würde ich halt gerne wissen, wie ich es schaffe das $email gesetzt ist, egal welche Zeile ich änder. Also das wenn ich die zweite Zeile änder, das er auch die Email von der zweiten Zeile hat ;)

MfG und danke und nen schönen Feiertag ^^
 
Zuletzt bearbeitet:
Deine Script-Struktur ist furchtbar,.. Man kann kaum erkennen wo if,else,while endet.

Es ist so schwer dir weiterzuhelfen.

Grüße
 
Zu deinem oben genannten Problem, kann ich auf anhieb keinen wirklichen Fehler erkennen.

Ist schon besser aber noch ein paar Tips unten:

Ganz wichtig!: Wenn du eine Schnelle Seite haben willst dann berücksichtige:

"echos" sollten immer so aus sehen --> echo 'Text';
nicht so --> echo "Text";

Der unterschied liegt dabei das wenn du " " verwendest wird die ausgabe auf Variablen durchsucht, und dies kostet zeit! Das sind zwar nur milli sekunden, aber um so mehr es sind, um so langsamer wird die seite!

Also immer so verwenden

PHP:
echo 'Ein sinnloser Text mit VAriable am enden ' . $variable . '';

Hier mal konkrete Beispiele für eine Nahezu "perfekte" Struktur:

If - ...
PHP:
if (a < b) {
    echo 'Irgent ein Text';
} else {
    echo 'Irgent ein Text';
}

PHP:
while (a < 100) {
    echo 'Irgent ein Text';
  $a = a + 1;
}

ich hoffe das war hilfreich.

Grüße
 
hm danke schon mal ^^
Hilfreich war das auf jeden Fall, allerdings bringt es mich auf meiner Seite nicht so wirklich weiter :/
Hoffentlich hat noch jemand anders Ratschläge. ;)

MfG
 
Kannst sein, dass keine Verbindung zur Datenbank aufgebaut werden kann ?
Bekommst du irgentwelche Wert aus der Datenbank ?
 
Doch also eine Verbindung ist aufgebaut.
Wenn ich anstatt

PHP:
$lastlogin = "UPDATE authorized_users SET okey = '1' WHERE email='$email''";
PHP:
$lastlogin = "UPDATE authorized_users SET okey = '1' WHERE email='[email protected]'";

eingebe (also [email protected] ist ein Wert in der Tabelle ) klappt es. Er schafft es nur nicht $email zu setzen. Vermutlich weil es wenn es 3Zeilen gibt 3Mal $email gibt :/
Aber ich hab keine Ahnung wie ich das beheben kann.
 
Gib mal diese Zeile weg und probiers nochmal.

PHP:
mysql_free_result( $db_erg );

möglicher weise gibt dies den "besetzten" speicher der variable frei.

Grüße
 
Wird hier

PHP:
echo "<td>". $zeile['email'] . "</td>";

Die jeweilige Email ausgegeben ? Oder erscheint ein error ?
 
Schreib außerdem mal statt

PHP:
$lastlogin = "UPDATE authorized_users SET okey = '0' WHERE email='$email'";

das so

PHP:
$lastlogin = "UPDATE authorized_users SET okey = '0' WHERE email='".mysql_escape_string($email)."'";
 
Und: Kannst Du das Statement mit dem Update inkl. E-Mail-Adresse überhaupt per phpmyadmin ausführen?
 
Ja Threadi's klappt leider auch nicht :(

Ja das Statement kann ich ausführen. Ich kann ja sogar wenn ich bei
PHP:
UPDATE authorized_users SET okey = '0' WHERE email='".mysql_escape_string($email).

$email durch eine Email Adresse ersetzte die in der Datenbank steht, geht es ja. Nur halt nicht mit der Variable :/
 
Was mir gerade auch noch auffällt. Du vermischst die PHP-MySQL- mit den PHP-MySQLi-Funktionen. Oben die Tabelle lädst Du direkt mit PHP-MySQL. Alles darunter führst Du per PHP-MySQLi aus, öffnest dafür sogar eine zweite Datenbankverbindung. Das ist grundsätzlich technisch zwar möglich, aber schlechter Stil und auch nicht performant. Meine Vermutung jetzt ist, dass die Programmierung dabei durcheinander kommt, vlt. wird $db_conn nicht richtig gesetzt, weil mysql_connect() vorher schon lief.

Daher mein Tipp:
Überdenke nochmal den Aufbau deiner MySQL-Verbindungen und damit verbundener Funktionsaufrufe. Für einen Einsteiger sollte es einfacher, weil übersichtlicher sein, nur PHP-MySQL-Funktionen zu nutzen und auf mysqli-Funktionen zu verzichten.
 
Zurück
Oben