kostenloser Webspace werbefrei: lima-city


PHP und Browser

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    g*****g

    Hallo PHP/MySQL Freunde,
    ich bin relativ neu in dieser Sprache und habe eine kleine Datenbank erstellt, die über Checkboxen-Eingaben aktalisiert wird. Damit der User dann die aktualisierte Liste sieht, wird am Ende der Befehl
    [echo '<meta http-equiv="refresh" content="0; URL=aktuel.php">']
    ausgeführt. Soweit so gut, alles funktioniert problemlos sowohl lokal (xampp) wie auch online. MEISTENS ! Aber eben nicht immer !
    Bei manchen Usern passiert nach dem drücken des Submit-Buttons gar nichts! Die Daten werden nicht übermittelt und die Datenbank wird nicht aktualisiert. Es kommt auch keine Fehlermeldung und es wird auch nicht weitergeleitet.

    Bitte nicht verwechseln mit deaktivierter Refresh-Option im Browser !
    Diese würde zwar den User daran hindern, gleich die aktualisierte Liste zu sehen, seine Eingaben müssten aber in der Datenbank sein. Sind aber nicht.

    Ich könnte Euch den ganzen Code hier posten (mehrere Seiten) aber vielleicht hat jemand schon eine Lösung parat, warum es bei manchen funktioniert und bei manchen nicht.
    Ich habe bei mir mit Firefox und IE probiert. Es hat IMMER funktioniert.

    Danke
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Wenn du sagst bei manchen Leuten passiert gar nichts beim Button-Klick, tippe ich darauf, dass etwas mit dem "form" nicht stimmt. Poste doch mal die Stelle an der das Formular ist, welches abgesendet wird, und die stelle wo die Daten von PHP übernommen werden, also da wo in etwa sowas stehen könnte:
    if(isset($_POST['submit']))


    Ansonsten kannst du ja auch mal noch den Link zu der Seite posten.
  4. Autor dieses Themas

    g*****g

    @ alfr3d

    form code lautet:

    echo '<form name="" action="" method="POST" enctype="text/html">';
    echo '<tr><td> Liebe Freunde von</td></tr>';
    echo '<th><Font Size = "4">'.$zeile['vorname'];
    echo "  ";
    echo $zeile['name'].'</th></tr>';
    echo '<tr><td> Bitte beachten Sie folgendes:</td></tr>';
    echo '<tr><td> Ihre Angabe ist f&uuml;r alle sichtbar</td></tr>';
    echo '<tr><td> Sie k&ouml;nnen Ihre Angabe nachtr&auml;glich &auml;ndern</td></tr>';
    echo '<tr><td>&nbsp;</td></tr>';
    echo '<tr><td bgcolor=#CCFFCC> Bitte treffen Sie Ihre Wahl und klicken dann auf <br>[Speichern]';
    echo '<br><br>';
    echo '<tr><td>Ich komme allein<input type="Checkbox" name="check1" /></td></tr>'; 
    echo '<tr><td>Wir kommen beide<input type="Checkbox" name="check2" /></td></tr>'; 
    echo '<tr><td>Leider können wir nicht kommen <input type="Checkbox" name="check9" /></td></tr>';
    echo '<input type="hidden" name="blume[id]" value="';
    echo $zeile['id'];
    echo '" />';
    echo '<input type="hidden" name="vorgang" value="update" />';
    echo '<tr><td>&nbsp;</td></tr>';
    echo '<tr><td align="center"><input type="Submit" name="" value="Speichern" /></td></tr>';
    echo '</form>'
    ;


    und die Überprüfung der Daten auf Korrektheit:

    if (( $_POST['vorgang'] == 'update' ) AND (isset($_POST['check1'])) AND (isset($_POST['check2'])) AND (isset($_POST['check9'])))
    {
    echo '<b><font color="#ff0000">Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben !<br>';
    echo 'Sie haben widersprüchliche Angaben gemacht';
    anzeige_daten_zum_bearbeiten ( $_GET['id'] );
    }
    
    if (( $_POST['vorgang'] == 'update' ) AND (isset($_POST['check1'])) AND (!isset($_POST['check2'])) AND (isset($_POST['check9'])))
    {
    echo '<b><font color="#ff0000">Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben !<br>';
    echo 'Sie haben widersprüchliche Angaben gemacht';
    anzeige_daten_zum_bearbeiten ( $_GET['id'] );
    }
    
    if (( $_POST['vorgang'] == 'update' ) AND (isset($_POST['check2'])) AND (!isset($_POST['check1'])) AND (isset($_POST['check9'])))
    {
    echo '<b><font color="#ff0000">Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben !<br>';
    echo 'Sie haben widersprüchliche Angaben gemacht';
    anzeige_daten_zum_bearbeiten ( $_GET['id'] );
    }
    
    if (( $_POST['vorgang'] == 'update' ) AND (isset($_POST['check2'])) AND (isset($_POST['check1'])) AND (!isset($_POST['check9'])))
    {
    echo '<b><font color="#ff0000">Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben !<br>';
    echo 'Sie haben widersprüchliche Angaben gemacht';
    anzeige_daten_zum_bearbeiten ( $_GET['id'] );
    }
    
    if (( $_POST['vorgang'] == 'update' ) AND ((!isset($_POST['check1'])) and (!isset($_POST['check2'])) and (!isset($_POST['check3'])) and (!isset($_POST['check4'])) and (!isset($_POST['check5'])) and (!isset($_POST['check6']))) AND (!isset($_POST['check9'])))
    {
    echo '<b><font color="#ff0000">Sie haben keine Wahl getroffen !<br>';
    echo ' Bitte w&auml;hlwn Sie eine Option ';
    anzeige_daten_zum_bearbeiten ( $_GET['id'] );
    }
    if (( $_POST['vorgang'] == 'update' ) AND (isset($_POST['check1'])) and (!isset($_POST['check2'])) AND (!isset($_POST['check9'])))
    {
    update_daten ( $_POST['blume'] );
    }
    
    if (( $_POST['vorgang'] == 'update' ) AND (!isset($_POST['check1'])) and (isset($_POST['check2'])) AND (!isset($_POST['check9'])))
    {
    update_daten ( $_POST['blume'] );
    }
    
    if (( $_POST['vorgang'] == 'update' ) AND ((!isset($_POST['check1'])) AND (!isset($_POST['check2'])) AND (!isset($_POST['check3'])) AND (!isset($_POST['check4'])) AND (!isset($_POST['check5'])) AND (!isset($_POST['check6']))) AND (isset($_POST['check9'])))
    {
    update_daten ( $_POST['blume'] );
    }


    und das speichren in der Datenbank:

    function update_daten ( $blume )
    {
    if(isset($_POST['check1'])) {
    $chk1 = 1; 
    }
    else {
    $chk1 = 3;
    }
    if(isset($_POST['check2'])) {
    $chk1 = 2; 
    }
    $sql = "UPDATE db1 SET 
    `check1` = '$chk1',
    
    WHERE
    id = '". $blume['id'] ."'
    ";
    echo '<meta http-equiv="refresh" content="0; URL=aktuel.php">';
    $db_erg = mysql_query( $sql );
    if ( ! $db_erg )
    {
    die("Ungueltige Abfrage: $sql <hr />" . mysql_error());
    }
    }


    Damit ist fast der gesamte code hier

    mfg
  5. Enferne mal das hier beim Form:
    enctype="text/html"


    Ansonsten schau ich mir den Code jetzt noch einmal genau an, das war nur das erste was mir ins Auge gesprungen ist, und ich glaube ich habe schon einmal etwas gehört, dass es daran liegen könnte.

    Ich hoffe du hast jemand zum testen, bei dem es zuvor nicht funktioniert hat :biggrin:

    Beitrag zuletzt geändert: 16.11.2010 9:16:48 von alfr3d
  6. Autor dieses Themas

    g*****g

    @ alfr3d

    werde ich machen und...
    ja, ich habe jemanden zum ausprobieren:thumb:

    Danke
  7. Ok, dann poste ich hier einfach mal, dass du wieder antworten kannst wenn du es getestet hast, da es ja eine Doppelpost-Sperre gibt. Von mir aus kann der Beitrag auch danach gelöscht werden :biggrin:

    Beitrag zuletzt geändert: 16.11.2010 9:23:48 von alfr3d
  8. g****e

    es kann auch sein dass manche browser sich mit was ganz anderem schwer tun :-P
    echo '<form name="" action="" method="POST" enctype="text/html">';

    des form tag sollte folgende zwei dinge immer beinhalten: die method und die action! name und enctype ist irrelevant und nur bei speziellen aktionen notwendig.
    was bei dir aber offensichtlch ist: method ist gesetzt, und wo ist action? so kann es nämlich passieren, dass der ein oder andere browser eben nciht sagt "vermutlich an die gleiche seite", sondern sich sagt "ich hab kein ziel, dann mach ich auch nichts" also eine action immer angeben!!! kann nur helfen. action bezeichnet dabei die datei bzw die url zu der die datein geschickt werden sollen. sollen die daten an sich selbst geschickt werden sieht das dann so aus:
    echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST" enctype="text/html">';

    die 3 fachen anführungszeichen sind dabei ein doppeltes und ein einfaches anführungszeichen. mit den punkten verkette ich einfach die variable $_SERVER['PHP_SELF']. in dieser ist der datei name angegeben, wie deine datei heißt. du kannst auch einfach "action.php" reinschreiben.

    damit sollte es aber funktionieren. es ist einfach üblich diese beiden dinger auszufüllen. ein leeres action kann bewirken dass er sich denkt "ich soll die daten nirgendswo hinschicken, also mach ich nichts"
  9. oder einfach bei action den namen der aktuellen Datei einfügen.

    Nur so neben bei, hat es einen Grund warum du jede zeile in einem extra echo befehl machst? Ich finde das dadurch sehr unübersichtlich.
  10. Autor dieses Themas

    g*****g

    Hallo Freunde,

    zunächst eine positive Meldung:
    Durch den Hinweis von <alfr3d > und Entfernung des Eintrags [enctype="text/html"] hat sich das Problem tatsächlich gelöst.:thumb:

    Hier ein großes Dankeschön an alfr3d:prost:

    Dazu noch eine Bemerkung: Die User, die die Fehlfunktion hatten arbeiten mit MACs. Ob das eine Rolle spielte ?.

    @ thecity
    Das ist so ziemlich mein zweiter PHP-Code. Ich habe mir das Wissen in den letzten 4 Wochen angeeignet durch herumspielen mit Beispielen, die man in Tutorien findet. Das Beispiel war nun mit echo und ich habe den Stil beibehalten.
    Inzwischen frage ich mich auch warum ich es so tue.
    Allerdings ist die mit echos erzeugte html wesentlich kompakter und wird schneller übertragen.



  11. gegen das echo hab ich ja auch nichts, ich gebe html auch zu 99% per php/echo aus.

    ich meine nur ich finde das hier recht unübersichtlich

    echo '<form name="" action="" method="POST" enctype="text/html">';
    echo '<tr><td> Liebe Freunde von</td></tr>';
    echo '<th><Font Size = "4">'.$zeile['vorname'];
    echo "  ";
    echo $zeile['name'].'</th></tr>';
    echo '<tr><td> Bitte beachten Sie folgendes:</td></tr>';


    im vergleich zu

    echo '<form name="" action="" method="POST" >
    <tr><td> Liebe Freunde von</td></tr>
    <th><Font Size = "4">'.$zeile['vorname'].' 
    
    '.$zeile['name'].'</th></tr> 
    <tr><td> Bitte beachten Sie folgendes:</td></tr>';
    (ungetestet)

    Beitrag zuletzt geändert: 16.11.2010 22:08:15 von thecity
  12. Autor dieses Themas

    g*****g

    Hallo thecity,

    jetzt verstehe ich, was Du meinst.

    Dieser Stil mit zeilenweise echos kommt aus den ersten Tagen, wo ich die Beispielcodes auseinander nahm, um zu sehen welcher Befehl welche Auswirkung hat und wie ich diesen meinen Bedürfnissen anpassen konnte.

    In der Zwischenzeit habe ich mir ein kleines Programm geschrieben, das mir anhand von einigen wenigen Kriterien, die ich in eine Textdatei eingebe, automatisch die erforderliche PHP-Dateien samt Namen und Links erzeugt.

    Für dieses Programm ist der Stil mit zeilenweise echos übersichtlicher.

    Einmal richtig vorbereitet, werden mit diesem Trick meine PHP-Dateien immer fehlerfrei erzeugt.

    Viele Grüße
    LK
  13. 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!