kostenloser Webspace werbefrei: lima-city


value-Ausgabe verkürzt

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Liebe Gemeinde,
    ich hab da mal eine, wohl typisch Anfängerfrage.

    Ich hab mir ein Affenref="/tag/formular">formular gebastelt, in dem man Einträge verändern kann.
    1. Datenbank wird abgefragt, der zu verändernde Datensatz mit Value in das "Inputfeld" eingefügt.
    2. ich kann dann die Aufgabe abschicke, wird alles neu eingetragen und der neue Datensatz wieder in der Tabelle angezeigt.

    Funktioniert wunderbar, alles gut nur:
    Es wird immer nur in dem Value-Feld der String bis zum ersten Leerzeichen angezeigt. Obwohl er im String ist. Das hab ich in einer zweiten Tabelle ausgelesen und angezeigt.

    <td>PLZ<input type='text'  name='plz' value=".$plz."></td>
                    <td>Stadt<input type='text'  name='stadt' value=".$stadt."></td>
                    <td>Strasse/Hausn.:<input type='text'  name='str' value=".$strassehn."></td>


    ich denke es fehlt ein Zusatz beim Input, aber welcher???

    <td>Einrichtung : </br>".$name."</td>
                    <td>Arbeitsgr.:</br>".$ag."</td>
                    <td>PLZ :</br>".$plz."</td>
                    <td>Stadt :</br>".$stadt."</td>
                    <td>Strasse/Hausn.:</br>".$strassehn."</td>


    in dieser Tabelle erscheint dann der komplette Text/String

    Vielleicht kann jemand helfen, wäre sehr nett.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    0) Wie werden die Daten aus der Datenbank gelesen bzw in diese geschrieben?
    1) Wie werden die Variablen zusammengesetzt (PHP-Code)? Wird
    htmlspecialchars()
    angewandt, und dabei mit dem Parameter, dass
    "
    zu
    &quot;
    convertiert wird?
    2) Wo genau tritt dieses Problem auf (bzw: was ist da ein »Value-Feld«)?
    3) Warum überhaupt so ausgeben wie du es tust, und nicht z.B. so:
    echo(<<<ETX
    <td>PLZ: <input type="text" name="plz" value="$plz"/></td>
    <td>…</td>
    ETX
    );
    Das macht es im Normalfall jedenfalls lesbarer …
  4. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Gebe hier mal das Bild dazu aus:

    https://www.dropbox.com/s/9yp6e2w4l8dwvv6/Screenshot%202015-05-28%2013.45.22.png?dl=0

    Deutlich beim Namen, nach dem Komma ist ein Leerzeichen, und da ist Schluss.
    Das unterste Feld macht es auch deutlich.

    0 werden mit update eingeschrieben.
    1 htmlspecialchars() wird nicht verwendet

    3- die Art der Ausgabe ist mir neu :thumb::biggrin: , aber eine hilfreiche Idee.
  5. Ich sehe den Fehler nur bei "Stammhausmeister"
    wie soll man Dir helfen, wenn Du Dein Affenformular nicht vollständig als Sourcecode zur Verfügung stellst?
  6. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Sorry, wollte euch nicht zutexten, weil ich glaube dass es nur an dem "input" hackelt, hier mal das Ganze.

    <?php
    session_start();
    
    if (($_SESSION['passw']==$_SESSION['passwort'])or
        ($_SESSION['passw']=="Rasty" ))
    
    {
    
        // Wenn auf 'Eintragen' geklickt wurde, verarbeite das Formular
        if(isset($_POST['name']))
        {
    
      $pid = $_POST['id'];
      $pname = $_POST['name'];
      $pag = $_POST['ag'];
      $pplz = $_POST['plz'];
      $pstadt = $_POST['stadt'];
      $pstrassehn = $_POST['str'];
      $ptelefon = $_POST['telefon'];
      $pfax = $_POST['fax'];
      $psl = $_POST['sl'];
      $psek = $_POST['sek'];
      $pnotiz = $_POST['notiz'];
      $pstammhm = $_POST['sthm'];
      $phmtelefon = $_POST['hmt'];
      $pgv = $_POST['gv'];
      $pgvt = $_POST['gvt'];
    
        include 'host.php' ;
        $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
        mysqli_select_db($con,$_db_datenbank) ;
        $sql = "UPDATE zhd_einrichtung SET name='$pname', agruppe='$pag', notiz='$pnotiz' WHERE id='$pid'" ;
        mysqli_query($con,$sql );
        mysqli_close($con);
    
        echo $_SESSION['einrichtung'] ;
    
    //Beginn der Tabellenabfrage für Einrichtung arry
    
    $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
    mysqli_select_db($con,$_db_datenbank) ;
    $sql = "SELECT * FROM zhd_einrichtung" ;
    $res = mysqli_query( $con, $sql )OR die("Error: $res <br>".mysql_error());
    $num = mysqli_num_rows($res);
    
    $z=0 ;
    if ($num >0)
    {
     while ($zeile = mysqli_fetch_array( $res))
    {
    if  ($_SESSION['einrichtung']== $zeile['name'])
    {
      $id = $zeile['id'];
      $name = $zeile['name'];
      $ag = $zeile['agruppe'];
      $plz = $zeile['plz'];
      $stadt = $zeile['stadt'];
      $strassehn = $zeile['strassehn'];
      $telefon = $zeile['telefon'];
      $fax = $zeile['fax'];
      $sl = $zeile['sl'];
      $sek = $zeile['sek'];
      $notiz = $zeile['notiz'];
      $stammhm = $zeile['stammhm'];
      $hmtelefon = $zeile['hmtelefon'];
      $gv = $zeile['gvverwalter'];
      $gvt = $zeile['gvtelefon'];
    
    } //klammer von if name name
        } //Klammer von while
        }  //Klammer nach if $num
    mysqli_free_result( $res );
    mysqli_close($con);
    //ende Tabelle Einrichtung arry
    
    
        }
        // Ansonsten, z.B. wenn der User das Formular zum 1. Mal aufruft, wird das Formular angezeigt
    
    include 'host.php' ;
    echo $_SESSION['einrichtung'] ;
    
    //Beginn der Tabellenabfrage für Einrichtung arry
    
    $con = mysqli_connect ($_db_host,$_db_username,$_db_passwort);
    mysqli_select_db($con,$_db_datenbank) ;
    $sql = "SELECT * FROM zhd_einrichtung" ;
    $res = mysqli_query( $con, $sql )OR die("Error: $res <br>".mysql_error());
    $num = mysqli_num_rows($res);
    
    $z=0 ;
    if ($num >0)
    {
     while ($zeile = mysqli_fetch_array( $res))
    {
    if  ($_SESSION['einrichtung']== $zeile['name'])
    {
      $id = $zeile['id'];
      $name = $zeile['name'];
      $ag = $zeile['agruppe'];
      $plz = $zeile['plz'];
      $stadt = $zeile['stadt'];
      $strassehn = $zeile['strassehn'];
      $telefon = $zeile['telefon'];
      $fax = $zeile['fax'];
      $sl = $zeile['sl'];
      $sek = $zeile['sek'];
      $notiz = $zeile['notiz'];
      $stammhm = $zeile['stammhm'];
      $hmtelefon = $zeile['hmtelefon'];
      $gv = $zeile['gvverwalter'];
      $gvt = $zeile['gvtelefon'];
    
    } //klammer von if name name
        } //Klammer von while
        }  //Klammer nach if $num
    mysqli_free_result( $res );
    mysqli_close($con);
    //ende Tabelle Einrichtung arry
    
    
    
    
    ?>
    
    <!DOCTYPE html>
    <html>
    
    <head>
        <title>ZHD-Hausmeister</title>
    
        <meta charset="windows 1252"/>
        <meta name="description" content=""/>
        <meta name="author" content=""/>
        <meta name="keywords" content=""/>
        <meta name="generator" content="Webocton - Scriptly (www.scriptly.de)"/>
    
        <link href="style.css" type="text/css" rel="stylesheet">
    </head>
    
    <body bgcolor="#f0f0f0"  >
    
    
    <h1 align="center" style="background: #008000;">ZHD Einrichtungskompass </h1>
    
    <p align="center">
    <table border="0" style="float:center;" bgcolor="#C5C586" cellpadding="2" cellspacing="3" summary="" width="100%" style="font-size:100%">
        <tr>
            <td  align="center" valign="middle" ><a href="zhdStartb.php">Startseite</a></td>
    
         </tr>
         </table>
    
    <h2 align="center" style="background: #008040;"> Einrichtungsdaten</h2>
    
     <form action="zhd_mitarbeiterEinrichtungbearbeiten.php" method="post">
    
     <?php
    
                       // Tabellenbeginn Einrichtung
         echo "<table border='3' cellpadding='3'  width='100%'>";
    
         echo "     <tr bgcolor='#cccccc'>
    
                    <td>Einrichtung :<input type='text' name='name' value=".$name."></td>
                    <td>Arbeitsgr.:<input type='text'  name='ag' value=".$ag."></td>
                    <td>PLZ<input type='text'  name='plz' value=".$plz."></td>
    
                    <td>Stadt<input type='text'  name='stadt' value=".$stadt."></td>
                    <td>Strasse/Hausn.:<input type='text'  name='str' value=".$strassehn."></td>
                    <td>Telefon :<input type='text'  name='telefon' value=".$telefon."></td>
                    <td>Fax :<input type='text'  name='fax'  value=".$fax."></td>
                     </tr>
                    <tr bgcolor='#cccccc'>
                    <td>Schulleiter :<input type='text'  name='sl' value=".$sl."></td>
                    <td>Sekret&auml;rin :<input type='text'  name='sek' value=".$sek."></td>
    
                     <td>Stammhausmeister<input type='text'  name='sthm' value=".$stammhm."></td>
                     <td>HM-Telefon :<input type='text'  name='hmt' value=".$hmtelefon."></td>
                     <td>Grundst&uuml;cksverwalter :<input type='text'  name='gv' value=".$gv."></td>
                     <td>GV-Telefon : :<input type='text'  name='gvt' value=".$gvt."></td>
                     <td><input name='id' value=".$id."></td>
    </tr>
                    <tr>
                    <td colspan='5'><input name='notiz' size='100px'   value=".$notiz."></td>
                    </tr>";
    
       echo "</table>"  ;
    
      ?>
    
      <input type="submit" value="absenden" />
        </form>
    
    
    
    <?php
            echo "<h2> Der aktuelle Wert der Tabelle</h2>";
            echo "  <table width='100%'>   <tr bgcolor='#cccccc'>
    
                    <td>Einrichtung : </br>".$name."</td>
                    <td>Arbeitsgr.:</br>".$ag."</td>
                    <td>PLZ :</br>".$plz."</td>
                    <td>Stadt :</br>".$stadt."</td>
                    <td>Strasse/Hausn.:</br>".$strassehn."</td>
                    <td>Telefon :</br>".$telefon."</td>
                    <td>Fax :</br>".$fax."</td>
                     </tr>
                    <tr bgcolor='#cccccc'>
                    <td>Schulleiter :</br>".$sl."</td>
                    <td>Sekret&auml;rin :</br>".$sek."</td>
    
                     <td>Stammhausmeister :</br>".$stammhm."</td>
                     <td>HM-Telefon :</br>".$hmtelefon."</td>
                     <td>Grundst&uuml;cksverwalter :</br>".$gv."</td>
                     <td>GV-Telefon : :</br>".$gvt."</td>
    
    </tr>
                    <tr>
                    <td colspan='5'>".$notiz."</td>
                    </tr>";
    
       echo "</table>"  ;
    
    //ende der Sicherheitsabfrage
    }
     ?>


    Wie gesagt, die Eingaben, das Auslesen, in die Datenbank funktioniert alles gut und richtig,
    nur das Anzeigen spielt so nicht mit.
    hab auch noch nicht alle Variablen in dem $sql = "UPDATE zhd_einrichtung SET name='$pname', agruppe='$pag', notiz='$pnotiz' WHERE id='$pid'" eingefügt, weil mir erst mal der Ausgabefehler aufgefallen ist. Auch an der "$strassehn" sieht man, nach der Leerstelle kommt dann keine Hausnummer mehr mit an, obwohl sie im String drin ist.

    Sorry noch mal,..

    Beitrag zuletzt geändert: 28.5.2015 15:45:37 von zhd-dresden
  7. versuche bitte mal statt
    <td>Stammhausmeister<input type='text'  name='sthm' value=".$stammhm."></td>

    folgendes zu verwenden:
    <td>Stammhausmeister<input type='text'  name='sthm' value='$stammhm'></td>

    klappt es dann?
  8. @hackyourlife:

    übersichtlicher wird es dadurch auch nicht, und ist in manchen Editoren sogar noch schlechter, deine Schreibweise.


    @dunkeltuten:

    Sollte keinen Unterschied machen.



    Kommen wir jetzt mal zu den Codezeilen:
    von der Syntax her ist kein Fehler zu erkennen.

    Du musst nicht für jede Abfrage die Datenbankverbindung schliessen und wieder neu aufbauen. Das Close für die Datenbank kannst du ganz am Ende rein setzen.

    Dann kann deine Abfrage auch mit der While Schleife nur einen einzigen und zwar nur den letzten Datensatz anzeigen. Damit dir wirklich alles angezeigt werden kann, muss die while Schleife an den Ort, wo deine Ausgabe im Script kommt.

    Es wäre ganz interessant zu wissen, wieviele Zeichen, du für Strasse und Hausnummer eingibst. Und dann noch dazu die Struktur dieses Feldes, ob varchar ist und wieviele Zeichen dort eingetragen werden dürfen.

    Dein Script wirst du sicherlich noch gegen SQL Injektion absichern?
  9. Autor dieses Themas

    zhd-dresden

    zhd-dresden hat kostenlosen Webspace.

    Hallo dunkeltuten,

    // Tabellenbeginn Einrichtung
         echo "<table border='3' cellpadding='3'  width='100%'>";
    
         echo "     <tr bgcolor='#cccccc'>
    
                    <td>Einrichtung :       <input type='text' name='name' value='$name'></td>
                    <td>Arbeitsgr.:         <input type='text'  name='ag' value='$ag'></td>
                    <td>PLZ                 <input type='text'  name='plz' value='$plz'></td>
    
                    <td>Stadt               <input type='text'  name='stadt' value='$stadt'></td>
                    <td>Strasse/Hausn.:     <input type='text'  name='str' value='$strassehn'></td>
                    <td>Telefon :           <input type='text'  name='telefon' value='$telefon'></td>
                    <td>Fax :               <input type='text'  name='fax'  value='$fax'></td>
                     </tr>
                    <tr bgcolor='#cccccc'>
                    <td>Schulleiter :       <input type='text'  name='sl' value='$sl'></td>
                    <td>Sekret&auml;rin :   <input type='text'  name='sek' value='$sek'></td>
    
                     <td>Stammhausmeister   <input type='text'  name='sthm' value='$stammhm'></td>
                     <td>HM-Telefon :       <input type='text'  name='hmt' value='$hmtelefon'></td>
                     <td>Grundst&uuml;cksverwalter :<input type='text'  name='gv' value='$gv'></td>
                     <td>GV-Telefon : :     <input type='text'  name='gvt' value='$gvt'></td>
                     <td>                   <input name='id' value='$id'></td>
                    </tr>
                    <tr>
                    <td colspan='5'>        <input name='notiz' size='100px'   value='$notiz'></td>
                    </tr>";
    
       echo "</table>"  ;


    du bist mein Held, habe es so umgeschrieben. Ja genauso kommt es jetzt richtig hinten raus. Obwohl es eigentlich nicht sein dürfte. Ich danke euch herzlichst. ich werde natürlich versuchen meine Eingaben gegen Injektion zu schützen. ist auch Neuland für mich.
    Also noch mal herlichsten Dank
  10. zhd-dresden schrieb:
    Obwohl es eigentlich nicht sein dürfte.
    Doch, muss so sein. Mit einem Blick in den generierten Code wäre es auch klar geworden.
    In Deiner 1. Variante
    ...  value=".$stammhm."> ...
    wird der Wert des Attributs nicht in Anführungszeichen gesetzt. Also ist für den Browser der Wert nach dem 1. Leerzeichen zuende und es folgt irgendetwas nicht-html-konformes. In dunkeltutens Variante steht der Wert in Anführunszeichen.
  11. noch ein weiterer Tip: Stellt um auf Unicode (UTF-8)!

    Dann kannst Du stattt:
    <td>Grundst&uuml;cksverwalter :<input type='text'  name='gv' value='$gv'></td>

    Auch normale Umlaute in den Sourcecode schreiben
    <td>Grundstücksverwalter :<input type='text'  name='gv' value='$gv'></td>

    Macht das Ganze dann deutlich leichter beim Lesen und Tippen
    :spammer:

    Gruss Dunkeltuten

    Beitrag zuletzt geändert: 29.5.2015 8:40:55 von dunkeltuten
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!