Frage wieso der Code nicht funktioniert ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
code
datei
datum
fehler
fehlermeldung
feld
funktion
geschlecht
header
http
info
roman
strang
syntax
url
verwenden
wende
zeichen
zeile
-
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>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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! -
nilsbierwirth1 schrieb:
wenn man schon danach fragt, dann sollte man tunlichst danach trachten, hier die komplette fehlerausgabe von php anzugeben.
Wieso funktioniert dieser Code nicht ...
strange schrieb:
dass es so nicht geht, liegt auf der hand! gut dass du kein roman geschrieben hast ;) ich empfehle dir das hier zu verinnerlichen.
QueryCode war falsch... will jetzt keinen Roman schreiben, wirst schon sehen was ich geändert habe.mysql_query('INSERT INTO `info` VALUES ('', '.$_SESSION['user_id'].', UNIX_TIMESTAMP(), '.$info_name.', '.$info_sex.', '.$info_age.')');
Und gewöhne Dir entweder SingleQoutes oder DoubleQoutes an, nicht beides!
als hausaufgabe kannst du auch nach backstick und singlequote in punkto mysql googlen. wird dir auch helfen (hoffentlich).
nilsbierwirth1 schrieb:
ja da hat sich strange 'verquotet' ;)
... nur jetzt steht dort: 'Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING'Und ich werde mir angewöhnen SingöeQoutes zu verwenden
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.
limaspezifisch gehört dazu noch eine .htaccess datei in dem geeigneten ordner. 'php_flag display_errors on' muss drin stehen!<?php error_reporting(E_ALL | E_STRICT);
2.
jede funktion liefert irgend etwas zurück! auch mysql_query, sogar auch in dem fall, wo mysql selbst NICHTS zurückgibt!
daher:
undzwar genau so in 'heredoc syntax' (grund sehe da)!$q = <<< EOT INSERT INTO info VALUES ('', '{$_SESSION['user_id']}', UNIX_TIMESTAMP(), '$info_name', '$info_sex', '$info_age') EOT;
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:
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 ;)$res = ($r = mysql_query($q)) ? $r: exit('<pre>'.print_r(array(mysql_errno(), mysql_error()), true));
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 -
Das ist ja alles schön und gut, nur weiß ich immer noch nicht wie ich jetzt den Fehler finden soll ?
-
nilsbierwirth1 schrieb:
"wie ich jetzt den Fehler finden soll ?"!!!! (aus den fehlermeldungen????)
Das ist ja alles schön und gut, nur weiß ich immer noch nicht wie ich jetzt den Fehler finden soll ?
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:
(da möchtest bitte nochmals die kommentare im quelltext sorgfältig lesen!)<?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;
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage