2009-04-20 5 views
1

Ich habe eine Seite Benutzerinformationen zu bearbeiten, und ich möchte die aktuellen Informationen zeigen und für die weitere Bearbeitung zu ermöglichen, vorhandene Informationen zu vermeiden, zu überschreiben.bevölkert einen Textbereich/Gebiet mit vorhandenen Daten

Im Moment bin ich die Daten zu holen und es in einem Textbereich wie so dargestellt:

$usernameQuery = "select username, firstname from USERS where username = '" . $con->escape_string($username) . "'";  

$xblah = $con->query($usernameQuery); 
    while ($row = mysqli_fetch_assoc($xblah)) 
    { 
    $checkUsername = $row['username']; 
    $checkFirstName = $row['firstname']; 
    } 


echo "<form name=\"userForm\"> 
<h1>Editing information for: ".$username."</h1> 
<p> 
First name: 
<textarea rows=\"1\" id=\"firstname\">".$checkFirstName."</textarea> 
<br /> 
</form>" 

Dieser Textbereich nicht richtig in firefox, aufgrund einer bug der Anzeige von zwei Zeilen, wenn man nicht angezeigt angegeben. Gibt es eine Möglichkeit, das Gleiche mit Input Type = Text zu tun?

Auch derzeit, wird der Inhalt von Vornamen in der Datenbank john für meinen Testrecord, aber var_dump ($ checkFirstName) zeigt nur s. Was muss ich tun, um den tatsächlichen Inhalt des Feldes zu erhalten?

Antwort

2

Gibt es eine Möglichkeit, die gleiche Sache mit input type = text zu tun?

<input type="text" name="firstname" value="<?= $checkFirstName ?>" /> 

Was Ihre andere Frage, ist es ein anderer Benutzer, der einen ersten Namen ‚s‘ hat, sondern hat auch den gleichen Benutzernamen wie der Benutzer mit dem Vornamen ‚John‘? Der Grund, warum ich das sage, ist, dass Sie eine while-Schleife verwenden, um Ihre Daten abzurufen. Wenn also mehrere Übereinstimmungen vorhanden sind, bleibt die letzte Zeile übrig, die Ihrer Abfrage entspricht.

Mögliche Wege, dieses Problem zu lösen, schließen die Verwendung einer while-Schleife ein (was bedeutet, dass Sie mehrere Datenzeilen abrufen/verarbeiten müssen) und sicherstellen, dass alle Benutzernamen eindeutig sind.

Other than that, ich sehe nicht, warum der Wert geholt von 'firstname' würde nicht dem entsprechen, was in der Datenbank ist.

0

Verwenden Sie den ‚Wert‘ Attribut des Eingangs-Tag.

First name: <input type=\"text\" name=\"name\" value=\"$checkFirstName\"/><br /> 
0

Wenn Sie den Eingabetyp = Texteingabe verwenden, wird standardmäßig alles angezeigt, was Sie in das value-Attribut eingeben.

echo '<input type="text" value="' . $checkFirstName . '">'; 

Natürlich, werden Sie sicherstellen möchten Sie tun etwas sanitären Einrichtungen auf $ checkFirstName, bevor es in diesem Bereich, nur für den Fall ausgibt.

Wie für die Werte des Feldes bekommen, versuchen var_dumping $ row vor Ihrer while-Schleife, und sehen Sie, wenn Sie herausfinden können, was mit dem falsch läuft. Wenn es nichts hilfreiches zeigt, vielleicht var_dump in Ihrer while-Schleife mit einer netten < hr> zwischen jeder Iteration? Dadurch erhalten Sie eine vollständige Übersicht darüber, was genau von Ihrer Abfrage zurückgegeben wird. Auch wenn Var_dump ein bisschen zu viele Informationen für Sie, Check-out:

print_r($var) 

print_r documentation

0

Textbereiche sind dafür gedacht, mit Zeilenumbrüchen mehrzeiligen Text angezeigt werden soll.benutzer- und Vornamen sind in der Regel nicht das, so besser nutzen das input Element

<?php 
    echo '<input type="text" name="name" value="' . htmlentities($checkFirstName) . '">'; 
?> 

nicht vergessen htmlentities oder htmlspecialchars (abhängig von der Codierung enthalten sollen - wenn Ihre Codierung Unicode ist, sollte ausreichend sein, htmlspecialchars , sonst seine Vorzüge). Verwenden Sie htmlentities nicht nur für Formularfelder, sondern immer dann, wenn Sie vom Benutzer bereitgestellte Daten drucken. Normalerweise geschieht dies, wenn Sie denken, dass Sie gerade arbeiten: sonst jemand, indem ein Benutzername wie

<script type="text/javascript">execute_evil_code();</script> 

als für die Anzeige nur ein Zeichen anstelle eines vollständigen Zeichenfolge xss (cross site scripting) Angriffe oder zumindest erzeugen fehlerhafte HTML injizieren könnte mit einem Array und stattdessen eine Zeichenfolge. Verwenden Sie var_dump($variable);, um den Typ Ihrer Variablen zu sehen.

auch, wie htw sagte, überprüfen Sie, ob $username wirklich einzigartig ist und Sie bekommen die richtige Zeile. Führen Sie die resultierende Abfrage (echo $usernameQuery;) in phpmyadmin (oder dem von Ihnen verwendeten Werkzeug) aus. Wenn mehr als eine Zeile zurückgegeben wird, ist Ihr Benutzername nicht eindeutig (wahrscheinlich ein Fehler an sich) und die Zeile, die Sie erhalten, ist nicht die erste, sondern die letzte. es ist komisch, weil 's' nicht Teil von, john 'ist, vielleicht ist die mysql-Ergebnismenge etwas völlig anderes. debuggen auf einer höheren Ebene und var_dump die ganze $ Zeile.

0

Versuchen Sie hier alle Ihre PHP-Code setzen:

<textarea id="firstname" rows="1"> 
     <?php 
       //connect to database 
       //Select data 
      if(mysql_num_rows($sql)) { 
       $row = mysql_fetch_row($sql); 
        echo nl2br($row['0']); 
      } 
     ?> 
    </textarea> 
Verwandte Themen