kostenloser Webspace werbefrei: lima-city


Frage wieso der Code nicht funktioniert ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n************1

    Wieso funktioniert dieser Code nicht wenn ich die Daten abschicke lädt sich die Seite neu und keine daten wurden in der tabelle gespeichert ?
    Danke im Voraus

    Externe php Datei die natürlich miteinander verbunden sind was man hier aber nicht sehen kann :)

    <?php
    function create_info($info_name, $info_sex, $info_age) {
        $info_name = mysql_real_escape_string(htmlentities($info_name));
        $info_sex = mysql_real_escape_string(htmlentities($info_sex));
        $info_age = mysql_real_escape_string(htmlentities($info_age));
        
        mysql_query("INSERT INTO `info` VALUES ('', '".$_SESSION['user_id']."', UNIX_TIMESTAMP(), '$info_name', '$info_sex', '$info_age')");
    
    }
    ?>



    <?php
    
    
    if (isset($_POST['info_name'], $_POST['info_sex'], $_POST['info_age'])) {
        $info_name = $_POST['info_name'];
        $info_sex = $_POST['info_sex'];
        $info_age = $_POST['info_age'];
        
        
        $errors = array();
        
        if (empty($info_name)) {
            $errors[] = 'Name benötigt';
        } else {
     
        if (strlen($info_name) > 100 || strlen($info_sex) > 10 || strlen($info_age) > 5) {
            $error[] = 'Ein Feld oder mehr enthalten zu viele Zeichen';
        
            }    
                    
        }
        
        if (!empty($errors)) {
            foreach ($errors as $error) {
                echo $error, '<br />';
            }
            } else {
                create_info($info_name, $info_sex, $info_age);
                header('Location: info.php');
                exit();
        }
    }
        
    ?>
    
    <form action="" method="post">
        <p><input type="text" placeholder="Name" name="info_name" maxlenght="100" /></p>
        <p>
        	<select name="info_sex">
        		<option>Geschlecht auswählen:</option>
    			<option value="Weiblich">Weiblich</option>
    			<option value="Männlich">Männlich</option>
    		</select>
    	</p>
        <p><select id="year" name="info_age"></select></p>
    
        <p><input type="submit" value="Create" /></p>
        </form>
    
    	<script>
    		var select = document.getElementById('year'),
    		  year = new Date().getFullYear(),
    		  html = '<option></option>';
    	
    		for(i = year; i >= year-106; i--) {
    		  html += '<option value="' + i + '">' + i + '</option>';
    		}
    	
    		select.innerHTML = html;
    	</script>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Hi

    Setze deinen query einmal in eine Variable und lasse sie ausgeben.

    Denn bin ich da jetzt falsch oder kommt nach "INSERT INTO info" nicht die Felderliste in Klammern und erst danach die VALUES?

    Grüsse
  4. Nein die Spaltennamen müssen nicht zwingend erwähnt werden.

    Der Fehler liegt glaub ich bei UNIX_TIMESTAMP - man darf es auch wenn es eine Zahl ist glaub ich nicht ohne Klammer schreiben.
    mysql_query("INSERT INTO `info` VALUES ('', '".$_SESSION['user_id']."', 'UNIX_TIMESTAMP()', '$info_name', '$info_sex', '$info_age')");

    Falls ich da mist erzählt habe einfach mal in phpmyadmin eintippen und den Fehler anzeigen lassen / Spaltenanzahl prüfen etc.
    Falls dasnicht richtig ist uns nicht geht weiß ich soweit nicht weiter^^ - im Code hab ich nichts falsches gesehn.

    Beitrag zuletzt geändert: 8.11.2011 17:49:52 von l-jenzen
  5. mysql_query('INSERT INTO `info` VALUES ('', '.$_SESSION['user_id'].', UNIX_TIMESTAMP(), '.$info_name.', '.$info_sex.', '.$info_age.')');


    QueryCode war falsch... will jetzt keinen Roman schreiben, wirst schon sehen was ich geändert habe.

    Und gewöhne Dir entweder SingleQoutes oder DoubleQoutes an, nicht beides!
  6. Autor dieses Themas

    n************1

    Ich hab jetzt den Query Code geändert, nur jetzt steht dort:

    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

    Und ich werde mir angewöhnen SingöeQoutes zu verwenden :wink:
  7. nilsbierwirth1 schrieb:
    Wieso funktioniert dieser Code nicht ...
    wenn man schon danach fragt, dann sollte man tunlichst danach trachten, hier die komplette fehlerausgabe von php anzugeben.

    strange schrieb:
    mysql_query('INSERT INTO `info` VALUES ('', '.$_SESSION['user_id'].', UNIX_TIMESTAMP(), '.$info_name.', '.$info_sex.', '.$info_age.')');
    QueryCode war falsch... will jetzt keinen Roman schreiben, wirst schon sehen was ich geändert habe.
    Und gewöhne Dir entweder SingleQoutes oder DoubleQoutes an, nicht beides!
    dass es so nicht geht, liegt auf der hand! gut dass du kein roman geschrieben hast ;) ich empfehle dir das hier zu verinnerlichen.

    als hausaufgabe kannst du auch nach backstick und singlequote in punkto mysql googlen. wird dir auch helfen (hoffentlich).


    nilsbierwirth1 schrieb:
    ... nur jetzt steht dort: 'Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING'
    ja da hat sich strange 'verquotet' ;)
    Und ich werde mir angewöhnen SingöeQoutes zu verwenden :wink:
    tu das tunlichst nicht! lerne das richtige quoten ;) [dein query ist syntaktisch richtig, kann aber andere fehler haben]

    meine bescheidenen ratschläge, für eine bessere error-handling:
    1.
    <?php
    error_reporting(E_ALL | E_STRICT);
    limaspezifisch gehört dazu noch eine .htaccess datei in dem geeigneten ordner. 'php_flag display_errors on' muss drin stehen!


    2.
    jede funktion liefert irgend etwas zurück! auch mysql_query, sogar auch in dem fall, wo mysql selbst NICHTS zurückgibt!
    daher:
    $q = <<< EOT
    INSERT INTO info
      VALUES ('', '{$_SESSION['user_id']}', UNIX_TIMESTAMP(), '$info_name', '$info_sex', '$info_age')
    EOT;
    undzwar genau so in 'heredoc syntax' (grund sehe da)!
    sql kann man auch formatieren (wie man sieht). nützlich ist das aus dem grund, weil dann bei fehlermeldungen auch die zeilennummer angezeigt wird. schreibst deine abfrage in eine wurscht, steht dort 'in zeile 1' und die zeile ist 500-zeichen lang. na dann gute suche!
    die abfrage (für die entwicklungs und testfase) passiert dann so:
    $res = ($r = mysql_query($q)) ?
      $r:
      exit('<pre>'.print_r(array(mysql_errno(), mysql_error()), true));
    in diesem fall steht in $res ein mysql-resource oder true (für den fall, wenn von mysql nichts zurückgegeben wird und kein fehler aufgetreten ist). wenn aber dir dein query um die ohren fliegt, kommst zu exit mit der standard fehlermeldung - schön lesbar ;)

    statt exit-zeile kannst dir auch eine eigene error-handling machen. (sicher eleganter ;)

    Beitrag zuletzt geändert: 11.11.2011 0:21:35 von hemiolos
  8. Autor dieses Themas

    n************1

    Das ist ja alles schön und gut, nur weiß ich immer noch nicht wie ich jetzt den Fehler finden soll ?
  9. nilsbierwirth1 schrieb:
    Das ist ja alles schön und gut, nur weiß ich immer noch nicht wie ich jetzt den Fehler finden soll ?
    "wie ich jetzt den Fehler finden soll ?"!!!! (aus den fehlermeldungen????)

    ja willst du uns alle veräppeln!?
    weißt du was selbständiges arbeiten heißt!?
    hat man dich von der php/mysql-muttermilcht schon entwöhnt!?

    das hier wird dir jetzt diverse biersorten kosten!

    die funktion sieht so aus (wo das genau hinkommt, weißt nur du, du verräts uns ja nichts!):
    <?php
    function create_info($info_name, $info_sex, $info_age) {
    
      $info_name = mysql_real_escape_string(htmlentities($info_name));
      $info_sex = mysql_real_escape_string(htmlentities($info_sex));
      $info_age = mysql_real_escape_string(htmlentities($info_age));
    
      $q = <<< EOT
    INSERT INTO test.info
      VALUES ('', '{$_SESSION['user_id']}', UNIX_TIMESTAMP(), '$info_name', '$info_sex', '$info_age')
    EOT;
    
      $res = ($r = mysql_query($q)) ?
        $r:
        exit('<hr /><pre>'.print_r(array(mysql_errno(), mysql_error()), true));
    }

    und der rest des codes so:
    <?php
    
    error_reporting(E_ALL | E_STRICT);
    // um auf lima-city 'error_reporting' zu ermöglichen, muss die datei
    // /home/webpages/lima-city/nilsbierwirth1/html/.htaccess vorhanden sein und(!)
    // eine zeile mit 'php_flag display_errors on' beinhalten!!!!
    // '.htaccess' dateien sollten die rechte (chmod) 0644 haben!!!!
    
    session_start();
    // test only session data ----
    if(empty($_SESSION['user_id'])) {
      $_SESSION['user_id'] = 1;
    }
    // ----
    
    
    if (isset($_POST['info_name'], $_POST['info_sex'], $_POST['info_age'])) {
      $info_name = $_POST['info_name'];
      $info_sex  = $_POST['info_sex'];
      $info_age  = $_POST['info_age'];
    
    
      $errors = array();
    
      if (empty($info_name)) {
        $errors[] = 'Name benötigt';
      } else {
        if (strlen($info_name) > 100 || strlen($info_sex) > 10 || strlen($info_age) > 5) {
          $error[] = 'Ein Feld oder mehr enthalten zu viele Zeichen';
        }    
      }
    
      if (!empty($errors)) {
        foreach ($errors as $error) {
          echo $error, '<br />';
        }
      } else {
        create_info($info_name, $info_sex, $info_age);
        header('Location: info.php');
        exit();
      }
    }
    
    
    echo <<< EOT
    
    <form action="" method="post">
      <p><input type="text" placeholder="Name" name="info_name" maxlenght="100" /></p>
      <p>
      	<select name="info_sex">
      		<option>Geschlecht auswählen:</option>
    			<option value="Weiblich">Weiblich</option>
    			<option value="Männlich">Männlich</option>
    		</select>
    	</p>
      <p><select id="year" name="info_age"></select></p>
    
      <p><input type="submit" value="Create" /></p>
      </form>
    
    	<script>
    		var select = document.getElementById('year'),
    		  year = new Date().getFullYear(),
    		  html = '<option></option>';
    	
    		for(i = year; i >= year-106; i--) {
    		  html += '<option value="' + i + '">' + i + '</option>';
    		}
    	
    		select.innerHTML = html;
    	</script>
    
    EOT;
    (da möchtest bitte nochmals die kommentare im quelltext sorgfältig lesen!)


    und hier - auf hemiolos.lima-city.de - kannst du die wunderbare wirkung des ganzen sehen. (ich führe den code RAW aus (ohne connect / select db / &c.), dass man meldungen von php UND mysql bekommt.)
    wenn du sie alle (php/mysql) nicht deuten kannst ... ja dann ... (dann wende die diversen biersorten nach der kneipp-methode an ;)
    ...
    wenn doch ... dann kannst du deinen code schrittweise ver(schlimm)bessern!
    mehr kann man dazu nicht sagen, du hast uns bisher keinen einzigen anhaltspunk geliefert!

    Beitrag zuletzt geändert: 12.11.2011 1:06:54 von hemiolos
  10. 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!