[PHP] Zeigt formular nicht an

zerberos

Well-known member
ID: 58651
L
30 Mai 2006
75
0
Hallo,

habe eine kleines Problem. Hab ne Seite wo der Benutzer seine Daten ändern kann.

Die Seite bkommt eine session id über folgenden link übergeben

PHP:
logged_in.php?sid='.session_id().'

Die Seite wird auch aufgerufen, aber der zeigt mir nur meinen Start link ganz unten an

PHP:
<?

session_start();
include 'sessionhelpers.inc.php';
include ("connect.php");

if (!logged_in())
    {
    echo 'nicht eingeloggt ';
    }

else

{

session_register(userid);
echo "<br>";


if (isset($senden))
{
mysql_query("UPDATE `users` SET `UserName`='$nickname', `UserMail`='$email' WHERE `UserId`='$userid'");
}

$result = mysql_query("SELECT * FROM `users` WHERE `userid`='$userid'");

while($row = mysql_fetch_array($result)){

echo "<form>";
echo "Benutzername <input type='Text' name='nickname' value='$row[UserName]'><br>";
echo "E-mail: <input type='Text' name='email' value='$row[UserMail]'><br>";
echo "<input type='submit' name='senden' value='Ändern'>";
echo "</form>";


if (isset($pwaendern))
{
mysql_query("UPDATE `users` SET `UserPass` = MD5('$password') WHERE `UserId`='$userid'");
}

echo "<form>";
echo "Password ändern";
echo "<br>";
echo "Password: <input type='Password' name='password' value='$row[UserPass]'><br>";
echo "<input type='submit' name='pwaendern' value='Ändern'>";
echo "</form>";

}

}

echo '<a href="login.php">Start</a>';

?>
 
Debugging ;) $userid wird wohl leer sein, dann geht er nicht in die Schleife.
Check das mal.

Tip: Vergiss session_register() und benutz besser $_SESSION[].
 
und wo kommt Userid her?

- session_register nicht mehr notwendig
- SELECT * nicht empfehlenswert
- while-Schleife, wenn nur ein Ergebnis erwartet wird?
 
theHacker schrieb:
Debugging ;) $userid wird wohl leer sein, dann geht er nicht in die Schleife.
Check das mal.

Tip: Vergiss session_register() und benutz besser $_SESSION[].


hab mal ne kurze abfrage gemacht

PHP:
if ($userid != "")
{
echo $userid;
}
else
{
echo "Fehler";
}

Und der sagt mir Fehler. Also muss ich jetzt mal kucken wo der Fehler ist :(
 
Probiere es mal mit

PHP:
$userid = isset($_SESSION["userid"]) ? $_SESSION["userid"] : 0;

Neue Versionen von PHP stellen die Variablen nicht global zur Verfügung (php.ini). Deswegen musst du die aus den globalen Array herauspicken.

siehe: $_GET, $_POST, etc...
 
ja. ich probier das mal von dir aus.

hab das jetzt irgendwie hinbekommen das der das formular anzeigt.

Aber das updaten klappt nicht. Also wenn ich was änder im formular klappt die datenbank änderung nicht. Aber die Verbindung klappt, da der die daten ausliest.


Find den Fehler momentan nicht

Hier die datei
https://www.sebastian-leppert.de/downloads/dateien.zip

formular ist in der logged_in.php
 
Sag uns doch erstmal, wo $userid überhautp herkommt. Würde nämlich auch stark vermuten, dass es daran liegt, was TDS beschrieben hat.

Mal nebenbei. Warum die ganzen echos für die Formulare? Ein echo würd auch reichen oder du machst es nach dem Muster:

PHP:
<?php if(bedingung) { ?>

Formular in normalem HTML

<?php } ?>
 
ja anzeigen tut der das ja jetzt.

die userid steht in der seite login.php zur verfügung. dort sollte sie in der session registriert werden. was aber irgendwie nicht klappt

an die seite logged_in.php wird dann die session id übergeben. und über die session id wollte ich dann wieder auf die user id zugreifen

aber da das nicht klappt arbeite ich momentan nur noch mit der session id. ich hole mir jetzt nur noch die daten wo die session id die ich in der logged_in.php hab gleich der session id in der datenbank ist. damit bekomme ich auch den datensatz den ich haben will. nur das updaten dieses datensatzen klappt irgendwie nicht
 
PHP:
mysql_query("UPDATE `users` SET `UserName`='".$nickname."', `UserMail`='".$email."' WHERE `UserId`=".(int)$userid);
das (int) muss nicht unbedingt

PHP:
mysql_query("UPDATE `users` SET `UserPass` = '".md5($password)."' WHERE `UserId`=".(int)$userid);

bearbeite das Feld email mit einem regexp und du solltest :!: sql injection beachten

Wieso suchst du in einem Int Feld mit einem String?? Und siehe weiter oben
SELECT * is :wall:

PHP:
$result = mysql_query("SELECT * FROM `users` WHERE `userid`='$userid'");
richtiger würde ich sagen :
PHP:
$result = mysql_query("SELECT Username, Passwort, SessionID,.... FROM `users` WHERE `userid`=".(int)$userid);

und und und...m *Zeigefinger heb*
Du codest als wenn du register_global on hättest
deswegen wird es warscheinlich auch net gehen mal abgesehen von den Query´s
PHP:
if (isset($senden))
{
in folgendes ändern:

PHP:
if (isset($_POST['senden']))
{

und noch was sowas sollte man schon einheitlich haben

PHP:
<?

session_start();
include 'sessionhelpers.inc.php';
include ("connect.php");
 
Zuletzt bearbeitet:
Hallo,

hab jetzt mal nen paar sachen geändert die ihr hier gesagt habt.

register_global war on. habs jetzt auf off gestellt

die anderen sachen die ihr mir gesagt habt, habe ich auch versucht etwas zu überarbeiten.

Aber das Update des Datensatzes klappt immer noch nicht. Also an der Verbindung zur Datenbank kanns nicht liegen, da ich mir ja die Datensätze im Formular anzeigen lassen kann.

Ich vermute das liegt irgendwie daran das ich auf die userid nicht zugreifen kann. in der login.php hab ich die noch. Aber ich komme in der logged_in.php da nicht mehr dran, sondern nur noch an die session, da ich die session id ja als parameter im link übergebe

Hier mein akueller Code:

logged_in.php

PHP:
<?
session_start();
include 'sessionhelpers.inc.php';
include 'connect.php';

// Prüfung ob man eingeloggt ist
if (!logged_in())
    {
    echo 'nicht eingeloggt ';
    }

else

{

// Wenn senden button gedrückt dann update des datensatzes
if (isset($_POST['senden']))
{
//mysql_query("UPDATE `users` SET `UserName`='$nickname', `UserMail`='$email' WHERE `UserSession`='".session_id()."'");
mysql_query("UPDATE `users` SET `UserName`='".$nickname."', `UserMail`='".$email."' WHERE `UserId`=".(int)$userid); 
}

// Abfrage des Datensatzes
$result = mysql_query("SELECT UserName, UserMail, UserPass FROM `users` WHERE `UserSession`='".session_id()."'");
while($row = mysql_fetch_array($result)){

// Formular Benutzerdaten ändern
echo '
<form>
  <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr> 
      <td width="13" rowspan="9" bgcolor="#999999"> </td>
      <td colspan="2" bgcolor="#999999"> </td>
      <td width="16" rowspan="9" bgcolor="#999999"> </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC">
<div align="center"><font size="5">Benutzerdaten ändern</font></div></td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr> 
      <td width="208" bgcolor="#CCCCCC">
<div align="right">Benutzername: </div></td>
      <td width="263" bgcolor="#CCCCCC"> ';
echo "<input type='Text' name='nickname' value='$row[UserName]' size='30'></td>";
echo '  </tr>
  <tr> 
      <td bgcolor="#CCCCCC">
<div align="right">E-Mail:</div></td>
      <td bgcolor="#CCCCCC"> ';
	  
echo "<input type='Text' name='email' value='$row[UserMail]' size='30'></td>";
echo '</tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC">';
echo "<div align='center'><input type='submit' name='senden' value='Ändern'></div></td>";
echo ' </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#999999"> </td>
  </tr>
</table>
</form>
';


// Update der Daten bei Password ändern
if (isset($_POST['pwaendern']))
{
//mysql_query("UPDATE `users` SET `UserPass` = MD5('$password') WHERE `UserSession`='".session_id()."'");
mysql_query("UPDATE `users` SET `UserPass` = '".md5($password)."' WHERE `UserId`=".(int)$userid); 
}

// Formular Password ändern
echo '
<br>
<br>
<form>
  <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr> 
      <td width="13" rowspan="9" bgcolor="#999999"> </td>
      <td colspan="2" bgcolor="#999999"> </td>
      <td width="16" rowspan="9" bgcolor="#999999"> </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC">
<div align="center"><font size="5">Password ändern</font></div></td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr> 
      <td width="208" bgcolor="#CCCCCC">
<div align="right">Password: </div></td>';
echo  "<td width='263' bgcolor='#CCCCCC'>  <input name='password' type='Password' value='$row[UserPass]' size='30'></td>";
echo ' </tr>
  <tr> 
      <td bgcolor="#CCCCCC">
<div align="right"></div></td>
      <td bgcolor="#CCCCCC">  </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC">';
echo "<div align='center'><input type='submit' name='pwaendern' value='Ändern'></div></td>";
echo ' </tr>
  <tr> 
      <td colspan="2" bgcolor="#CCCCCC"> </td>
  </tr>
  <tr> 
      <td colspan="2" bgcolor="#999999"> </td>
  </tr>
</table>
</form>
';

}

}
?>



login.php

PHP:
<?
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
    $userid=check_user($_POST['username'], $_POST['userpass']);
    if ($userid!=false)
        login($userid);
    else
        echo 'Ihre Anmeldedaten waren nicht korrekt!';
}
if (!logged_in())
    { 
// Hier ist das Formular zum einloggen drinnen
}
else
{
// Hier ist das Seitendesign bzw der aufbau
echo '<a href="logged_in.php?sid='.session_id().'" target="mainFrame"><font size="4">- Profil</a><br>'; // Link auf die logged_in
}
?>
 
1.) In deinem Update greifst du auf die Variablen $nickname und $email zu. Nachdem du register_globals auf off gesetzt hast (und diese Daten aus dem Formular kommen), entnimmst du diese Daten aus $_GET['variable'] oder $_POST['variable'].

2.) Ich nehme an, bei der Abfrage des Datensatzes sollte nur die Userdaten eines einzelnen Users angezeigt werden? Dann solltest du anstatt dem while ein if schreiben.

3.) Da du e immer mit den Spaltennamen von der DB arbeitest, kannst du eigentlich mysql_fetch_array() durch mysql_fetch_assoc() ersetzen.

4.) Wenn du im HTML-Code "<form>" verwendest und keine weiteren angaben schreibst, werden meines wissens nach die default werte hergenommen: sprich, schicke die daten an die selbe datei, die du gerade aufgerufen hast und sende die Daten per get-parameter mit.
4.1) Dieses "<form>" ist dafür verantwortlich, warum die "if (isset($_POST['senden']))" Zeile immer fehlschlägt, da wie unter punkt 4 gesagt, die daten per $_GET ankommen, wenn nichts weiter definiert ist.

D.h. verwende die zeile in etwa so: <form action="logged_in.php?sid=[hier session_id einfügen]" method="post">

5.) Das Zweite Update... hier kommt die Variable $userid ins spiel, die jedoch nirgends definiert wurde. kommt sie aus der session? dann mit $_SESSION['userid'] auf die Variable zugreifen.

6.) "<input name='password' type='Password' value='$row[UserPass]' size='30'>"
Du solltest nie das Passwort ausgeben. Das Passwort fragst du immer vom benutzer ab! (zudem ist das passwort md5 verschlüsselt, klickt man hier dann ohne die Daten zu ändern auf speichern, würdest du das md5 verschlüsselte passwort nochmals mit md5 verschlüsseln und der user kann sich nicht mehr einloggen ;))
D.h. hier das value leer lassen und vor dem update überprüfen, ob das passwort z.B. eine mindestlänge besitzt usw...


Dies sollte dich ein Stück weiterbringen.