03. juni 2007 - 20:18Der er
48 kommentarer og 1 løsning
PHP - formular indsætter ikke
Hejsa
Jeg har prøvet at lave et script hvor der via en formular skal blive indsat nogle oplysninger i min database. Men jeg får denne fejlbesked: Parse error: parse error, unexpected $ in /home/www/klage.dk/form.klage.php on line 13"
Hvorfor dette og hvordan fixes det?
Min database hedder "klage" i MySQL, hvor der er felterne id, ip, name, city, email.
form.klage.php ----->
<?php include('inc.config.php');
if ($_POST['referer'] == 'klage') { if (empty($_POST['name']) && empty($_POST['email'])) { echo '<font color="red">Alle felter er ikke udfyldt!</font>'; } else { $_POST['email'] = preg_match("/^[\w\.\-_]+@([\w\-_]+\.)+\w+$/i",$_POST['email']) ? $_POST['email'] : ''; mysql_query("INSERT INTO klage VALUES ('','".$_POST['ip']."','".$_POST['name']."','".$_POST['city']."',now(),'".$_POST['email']."')") or die(mysql_error()); header("Location: http://www.klage.dk/index.php; } } ?>
Antallet af parameret i SQL sætningen (values i INSERT) passer ikke med antallet af kolonner i din database..
Passer disse?:
mysql_query("INSERT INTO klage VALUES ('','".$_POST['ip']."','".$_POST['name']."','".$_POST['city']."',now(),'".$_POST['email']."')") or die(mysql_error());
Hvis du har sat '', fordi ID er autonummerering, skal du fjerne '' igen:
mysql_query("INSERT INTO klage VALUES ('".$_POST['ip']."','".$_POST['name']."','".$_POST['city']."',now(),'".$_POST['email']."')") or die(mysql_error());
Prøv med hvis du kun har de 5 felter som du har listet: mysql_query("INSERT INTO klage VALUES ('', '$_POST['ip']', '$_POST['name']', '$_POST['city']', '$_POST['email']' ) ") or die(mysql_error());
Grunden til 83 er sikkert at din ip starter med 83.xxx.xxx.xxx, og den tager det som din ID selv som den er at til auto.
Ahh, fundet noget af fejlen.. Bruger ,now(),'". et sted, når jeg spørg om datoen, men har intet datafelt i databasen. Har jeg nu tilføjet, så nu ser det sådan her ud:
Databasen (felter): - id (primary og auto_increment) - ip (text) - date (datetime - name (text) - city (text) - email (text)
form.klage.php (kun det omtalte af dokumentet) ----->
mysql_query("INSERT INTO klage VALUES ('".$_POST['ip']."',now(),'".$_POST['name']."','".$_POST['city']."','".$_POST['email']."')") or die(mysql_error()); header("Location: http://www.klage.dk");
Får en fejl som hedder Column count doesn't match value count at row 1. Går udfra det er fordi datofeltet ikke stemmer overens eller?
$sql = "INSERT INTO klage VALUES ('".$_POST['ip']."',now(),'".$_POST['name']."','".$_POST['city']."','".$_POST['email']."')"
echo "<hr>SQL: " . $sql . "<hr>"; exit(); // stop afvikling af scriptet her
mysql_query("INSERT INTO klage VALUES ('".$_POST['ip']."',now(),'".$_POST['name']."','".$_POST['city']."','".$_POST['email']."')") or die(mysql_error());
Bare til en anden gang, så er det altid en god idé at skrive hvor hvad skal indsättes. Så undgår man mange unövendige fejl: INSERT INTO tabel (felt1, felt2...) VALUES(värdi1, värdi2...)
Det behøver du heller ikke hvis du gør som michael siger, men hvis du ikke skriver hvilke felter du vil indsætte data ind i, så bliver du da nød til at skrive alle felter. Ellers får du netop den fejl som Column count doesn't match value count at row 1.
I bunden af samtligt af dine sider, gemmes siden url (adressen på siden) i en session (ikke en cookie!). Når du vil aflæse referer, aflæser du bare sessionen.
Grunden til at det ikke skal være en cookie, er at brugeren kan redigere cookien.
SQL: INSERT INTO klage (ip, date, name, city, email) VALUES ('83.91.246.18',now(),'navnet','byen','min-mail-adresse') -------------------------------------------------------------------------------- Column count doesn't match value count at row 1
Filen/scriptet ser således ud:
<?php include('inc.config.php');
if ($_POST['referer'] == 'klage') { if (empty($_POST['name']) && empty($_POST['email'])) { echo '<font color="red">Alle felter er ikke udfyldt!</font>'; } else { $_POST['email'] = preg_match("/^[\w\.\-_]+@([\w\-_]+\.)+\w+$/i",$_POST['email']) ? $_POST['email'] : ''; $sql = "INSERT INTO klage (ip, date, name, city, email) VALUES ('".$_POST['ip']."',now(),'".$_POST['name']."','".$_POST['city']."','".$_POST['email']."')";
echo "<hr>SQL: " . $sql . "<hr>"; //exit(); // stop afvikling af scriptet her
mysql_query("INSERT INTO klage VALUES ('".$_POST['ip']."',now(),'".$_POST['name']."','".$_POST['city']."','".$_POST['email']."')") or die(mysql_error()); header("Location: http://www.klage.dk"); } } ?>
Jeg synes nu jeg copy/paste det du skriver, men det virker ikke?
Det vil hjælpe hvis du gør det i den SQL-sætning du udfører, og ikke i den du udskriver. Nu skulle der nok ikke have været to i første omgang, så hvad med denne kreation:
<?php include('inc.config.php');
if ($_POST['referer'] == 'klage') { if (empty($_POST['name']) && empty($_POST['email'])) { echo '<font color="red">Alle felter er ikke udfyldt!</font>'; } else { $_POST['email'] = preg_match("/^[\w\.\-_]+@([\w\-_]+\.)+\w+$/i",$_POST['email']) ? $_POST['email'] : ''; $sql = "INSERT INTO klage (ip, date, name, city, email) VALUES ('".$_POST['ip']."',now(),'".$_POST['name']."','".$_POST['city']."','".$_POST['email']."')";
echo "<hr>SQL: " . $sql . "<hr>"; //exit(); // stop afvikling af scriptet her
mysql_query($sql) or die(mysql_error()); header("Location: http://www.klage.dk"); } } ?>
SQL: INSERT INTO klage (ip, date, name, city, email) VALUES ('87.60.236.122',now(),'mit-navn','min-by','klagen@klage.dk')
Warning: Cannot modify header information - headers already sent by (output started at /home/www/klage.dk/form.klage.php:11) in /home/www/klage.dk/form.klage.php on line 15
erikjacobsen tager ikke imod points, efter eget ønske.
Så hvis du vil af med pointsne, skal du lige kigget indlæggene igennem, og se hvem der hjalp der "anden mest".. dvs, hvis erikjacobsen ikke havde været med, hvem skulle så have pointsne.. Hvis du ikke kan finde en passende modtager af pointsne, smider du selv et svar, markerer dit navn i boksen til venstre, og til sidst klikker på Accepter-knappen.
Du skal være noget bedre til at følge instruktioner.
Det tog dig hele 4 indlæg/henvisninger, før du overhovedet fik kolonnerne med i din SQL-sætning. Det er 3 indlæg/henvisninger for meget, hvilket betyder at man spilder en masse tid, på et "problem" der ikke burde være der.
Derfor: Læs HELE indlægget igennem, gerne flere gang så du forstår det, inden du overhovedet foretager dig noget som helst. Det kan være at den første del af indlægget, afhænger af noget i den sidste del af indlægget.
Vi kan ikke alle sammen være super gode "PHPére", så det må vel forventes, på et sted som eksperten.dk, at der er brugere som kræver en ekstra indsats/hjælp. Under spørgsmålet, oplevede jeg at erikjacobsen var den, som tog sig tid til mine spørgsmål omkring emnet, hvilket også er årsagen til, at jeg gerne vil give ham point.
Hvis han vælger ikke at tage imod dem, så må det jo være sådan..
super-mann> Jeg er ikke af de der >>super gode "PHPére"<<.. faktisk er jeg overhovedet ikke "PHPére".. :-)
Det er ikke dine PHP-egenskaber jeg henviser til.. Det er dine menneskelige egenskaber.
Det hjælper ikke noget at prøve på at hjælpe en person, hvis vedkommende ikke følger instruktionerne, som jo er hjælpen..
Du fik at vide hvad du skulle gøre, men gjorde det ikke alligevel..
Hvordan ville du have det, hvis du prøvede på at hjælpe en person med et eller andet, som f.eks. lektier eller ligende, og vedkommende ikke fulgte dine instruktioner? Så kommer du ikke langt, vel?
Det er nøjagtig samme situation vi har her: - Vi tilbyder hjælpen via instruktioner - Du følger ikke instruktionerne
Her er endnu et bevis på, at du ikke følge mine instruktioner:
Jeg skrev: --- Så hvis du vil af med pointsne, skal du lige kigget indlæggene igennem, og se hvem der hjalp der "anden mest".. dvs, hvis erikjacobsen ikke havde været med, hvem skulle så have pointsne.. Hvis du ikke kan finde en passende modtager af pointsne, smider du selv et svar, markerer dit navn i boksen til venstre, og til sidst klikker på Accepter-knappen. ---
Og hvad gør du? Du skriver bare: --- Hvis han vælger ikke at tage imod dem, så må det jo være sådan.. ---
Din korrekte handling burde have været: At smide et svar, markere dit navn i boksen til venstre, og til sidst klikke på Accepter-knappen.
Hvis du vil, kan du også vente på at erikjacobsen skriver "Jeg samler ikke på points. Snup dem selv."
Hvis du ikke tror på mig, er du velkommen til at kigge spørgsmålene igennem, hvor erikjacobsen er brugeren der løser problemet.. de skulle være nemme at finde, da det er de fleste spørgsmål han deltager i.. :-)
thesurfer --> Umiddelbart, kan jeg ikke finde noget sted på eksperten.dk hvor der står, jeg skal følge din anvisning mht. at jeg skal smide et svar i dette spørgsmål. Jeg smider et svar i det øjeblik, at brugeren jeg ønsker skal havde point, i dette tilfælde erikjacobsen, skriver at han ikke ønsker point. Indtil da er det stadig hans point.
Lad mig tage bruge dit eksempel. Jeg hjælper nogen med at lave lektier, men de forstår ikke hvad jeg mener. Så er der kun et at gøre, forklare det igen eller, som jeg foretrækker, prøve at forklare det på en anden måde. Det følte jeg at erikjacobsen gjore i dette spørgsmål.
Hvis jeg har været uopmærksom et øjeblik mht. at skrive det rigtige beklager jeg. Men jeg følger nu anvisningerne, når jeg får hjælp herinde, så vidt muligt. Gør jeg ikke, så er det vel fordi brugeren i den anden ende, ikke forstår svaret?
Nej, gider ikke sidde og diskutere dette - så vil stoppe her. God torsdag!
Kan tilføje, at jeg normalt venter i 14 dage fra jeg har skrevet og spurgt efter et svar, indtil jeg selv lukker spørgsmålet, så det ikke bliver åbent/ubesvaret for evigt. Så det bliver lukket før eller siden ;-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.