Avatar billede fancy Mester
17. februar 2019 - 18:47 Der er 11 kommentarer

Field 'aar' doesn't have a default value

Efter jeg har opdateret min PHP version til 7.2 på one.com, kommer denne fejl når jeg vil skrive til min DB

Field 'XXX' doesn't have a default value

Nogen der ved hvad set skyldes, og evt hvad jeg kan gøre ved det?
Avatar billede Slater Ekspert
17. februar 2019 - 18:49 #1
Normalt betyder det at du kører en INSERT query, men du ikke sætter alle de kolonner ind der kræver en værdi.

Det lyder dog meget underligt at det skulle ske efter en opdatering, så vi må nok se noget kode.
Avatar billede fancy Mester
17. februar 2019 - 20:05 #2
Her erden kode jeg bruger til skrive poster i DB
<?php
include "connect.php";
if(isset($_GET['button']));
$anavn = $_POST['anavn'];
$dag = $_POST['dag'];
$adag = $_POST['adag'];
$afra = $_POST['afra'];
$atil = $_POST['atil'];
$maa = $_POST['maa'];
$aar = $_POST['aar'];
$atildelt = $_POST['atildelt'];
$dato = mktime(0,0,0,$maa,$dag,$aar);
$asted = $_POST['asted'];
$abesk = $_POST['abesk'];
$pladser = $_POST['pladser'];
if($anavn!=''&&$asted!=''&&$abesk!=''&&$pladser!='')
include "connect.php";
mysql_query("INSERT INTO xxxx
(anavn, adag, afra, atil, asted, atildelt, dato, abesk, pladser, tilmeldt) VALUES('$anavn', '$adag' ,'$afra', '$atil', '$asted', '$atildelt', '$dato', '$abesk', '$pladser', '0' ) ")
or die(mysql_error()); 
echo "<br><br><br><br>";
echo "<center>";
echo 'Vagten er nu oprettet!';
echo '<meta http-equiv="refresh" content="1;url=http:add_arr.php">';
?>
<body>
</body>
</html>
<?php
Avatar billede Slater Ekspert
17. februar 2019 - 20:11 #3
Ja, problemet er åbenlyst - og der er dusinvis af andre spørgsmål om det samme, bare her på denne side.

Du bruger mysql_* funktionerne. De eksisterer ikke længere i PHP 7. Du er nødt til at opgradere koden til at bruge mysqli eller PDO i stedet.

Men hvorfor det giver dén fejl i stedet for "funktionen findes ikke" som den burde, det ved jeg ikke.

- Rent bortset fra det, så er det en meget farlig kode der er pivåben for SQL injections. Det bør du nok kigge på i samme omgang.
Avatar billede arne_v Ekspert
17. februar 2019 - 20:25 #4
Ja.

Mne derudover saa er der 12 variable men kun 10 felter i baade field list og value list.

Saa hvis der er 12 felter i databasem, saa giver fejlen vel mening.
Avatar billede arne_v Ekspert
17. februar 2019 - 20:27 #5
Maaske inkluderer connect.php det der grimme hack som definerer mysql funktionder der kalder mysqli, som der er postet link til nogle gange her.
Avatar billede Slater Ekspert
17. februar 2019 - 20:59 #6
Ja, det ville forklare lidt, men så er der pludselig spørgsmålet om hvorfor det skulle være opstået efter en opdatering igen.

Vi skal nok vide lidt mere, hvis ikke opretter kan rette problemet ud fra dette.
Avatar billede fancy Mester
17. februar 2019 - 23:24 #7
Jeg bruger dette i min connect.php

<?php
include_once('mysql2i.class.php');
include_once('mysql2i.func.php');

Det virker også fint så længe jeg kun læser fra db, min ikke hvis jeg skal skive
Avatar billede Slater Ekspert
18. februar 2019 - 08:05 #8
Ja, så gættede Arne ret. Det er ikke en optimal løsning, men det burde virke.

Arne har til gengæld også ret i, at du henter 12 variable men kun forsøger at indsætte 10 af dem i databasen. Og en af dem du ikke sætter ind er $aar, som også er den fejlen klager over.

Det er ikke til at sige 100% uden at se din databasestruktur, men det tyder meget på at du simpelthen har glemt at give to kolonner værdi i din INSERT query, præcis som fejlen også siger.

Men igen, hvorfor den fejl ikke er kommet før, det er underligt.
Avatar billede olsensweb.dk Ekspert
18. februar 2019 - 08:34 #9
>$aar = $_POST['aar'];
>$atildelt = $_POST['atildelt'];
>$dato = mktime(0,0,0,$maa,$dag,$aar);

får din $aar fra $_POST['aar']; ??
har du lavet nogle ændringer i din HTML ??
får du alle dine værdier i $_POST

>if($anavn!=''&&$asted!=''&&$abesk!=''&&$pladser!='') include "connect.php";
hvad er meningen med dette ??
du har jo includeret connect.php allerede !!
Avatar billede fancy Mester
18. februar 2019 - 22:30 #10
Tak for de gode råd men det er desværre uden vikning, jeg forsøgt at skrive min kode om så den nu ser sådan ud, jeg har nu ingen fejl meldinger, jeg har tjekket om der er værdi på variablerne, det er der, men der kommer ingen data i databasen, det fatter jeg bare ikke

<?php
include "connect.php";
if(isset($_GET['button']));
$anavn = $_POST['anavn'];
$dag = $_POST['dag'];
$adag = $_POST['adag'];
$afra = $_POST['afra'];
$atil = $_POST['atil'];
$maa = $_POST['maa'];
$aar = $_POST['aar'];
$atildelt = $_POST['atildelt'];
$dato = mktime(0,0,0,$maa,$dag,$aar);
$asted = $_POST['asted'];
$abesk = $_POST['abesk'];
$pladser = $_POST['pladser'];
$sql = "INSERT INTO db_xxxx(anavn,asted,dato,adag,afra,atil,abesk,tilmeldt,pladser,atildelt,aar)VALUES ('".$_POST["anavn"]."','".$_POST["asted"]."','".$_POST["dato"]."','".$_POST["adag"]."','".$_POST["afra"]."','".$_POST["atil"]."','".$_POST["abesk"]."','".$_POST["tilmeldt"]."','".$_POST["pladser"]."','".$_POST["atildelt"]."','".$_POST["aar"]."')";
echo "<br><br><br><br>";
echo "<center>";
echo "<br>";
echo "$anavn";
echo "<br>";
echo "$asted";
echo "<br>";
echo "$dato";
echo "<br>";
echo "$adag";
echo "<br>";
echo "$afra";
echo "<br>";
echo "$atil";
echo "<br>";
echo "$abesk";
echo "<br>";
echo "$tilmeldt";
echo "<br>";
echo "$pladser";
echo "<br>";
echo "$atildelt";
echo "<br>";
echo "$aar";
echo "<br>";

echo 'Vagten er nu oprettet!';
echo '<meta http-equiv="refresh" content="10;url=http:add_arr.php">';
?>
Avatar billede Slater Ekspert
18. februar 2019 - 22:45 #11
Det ser ikke ud til at du nogensinde udfører din SQL sætning nu, du sætter den bare i en variabel og glemmer den igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester