Avatar billede silmarillion Juniormester
14. november 2010 - 14:06 Der er 9 kommentarer

Indsæt variabel i mysql database

Hej Eksperter,

Er det muligt, at indsætte en variabel der dynamisk bliver genereret på en php side, i en mysql database, og i så fald hvordan?

Jeg har en mysql indsert der ser ud som følger:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "newad")) {
  $insertSQL = sprintf("INSERT INTO mistet (brugerid, overskrift, tekst, billed1, kategori, aktiv, ip, fm) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
                      GetSQLValueString($_POST['brugerid'], "text"),
                      GetSQLValueString($_POST['overskrift'], "text"),
                      GetSQLValueString($_POST['tekst'], "text"),
                      GetSQLValueString(date("dmyHis").(".".$extension)),
                      GetSQLValueString($_POST['kategori'], "text"),
                      GetSQLValueString($_POST['aktiv'], "text"),
                      GetSQLValueString($_POST['ip'], "text"),
                      GetSQLValueString($_POST['fm'], "int"));


Variablen $extension bliver defineret længere nede på siden via en function der læser fil typen, og den del virker korrekt.

Når der bliver indsat værdier i databasen, er det kun den første del (date("dmyHis") af

GetSQLValueString(date("dmyHis").(".".$extension)),

der bliver indsat i databasen mens (".".$extension) ikke bliver indsat i databasen.

Hvordan får jeg dette til at virke?
Avatar billede tjens Nybegynder
14. november 2010 - 15:22 #1
Kan du lave lidt echo output for at debugge?

F.eks.:
echo "<div style='border:2px solid red'><p>date: " . date("dmyHis") . "</p><p>extention: $extension</p><p>SQL: $insertSQL </p></div>";
så du kan se om GetSQLValueString() kan behandle værdier med punktum som du forventer
Avatar billede silmarillion Juniormester
14. november 2010 - 15:55 #2
Det får jeg følgende ud af


date: 141110143738

extention: jpg

SQL: INSERT INTO mistet (brugerid, overskrift, tekst, billed1, kategori, aktiv, ip, fm) VALUES ('1', 'Test', 'Test', 141110143737., '5', '1', '87.72.27.101', 0)


Så både filnavn/date og extension er korrekt, og det ser ud til, at der er et punktum i VALUES 141110143737.

men i databasen står der 141110143737

billed1 er sat til varchar(255), så det skulle ikke være der problemet er.
Avatar billede mike1963 Nybegynder
14. november 2010 - 15:56 #3
Iflg PHP skal funktionen GetSQLValueString have op til 4 argumenter. De to første er krævet. Men du sætter jo kun et argument (mangler text/date) i
    GetSQLValueString(date("dmyHis").(".".$extension))

Så måske du skulle putte arg #2 på plads ;o)
Avatar billede silmarillion Juniormester
14. november 2010 - 16:50 #4
Jeg har prøvet at ændre til

GetSQLValueString(date("dmyHis").(".".$extension), "text"),

og nu skriver den punktummet med i databasen. Jeg får dog stadig ikke filtypens beskrivelse med fx. jpg fra $extension.

Er der nogle forslag til hvad der mangler/skal gøres anderledes?
Avatar billede tjens Nybegynder
14. november 2010 - 19:35 #5
Der er ikke apostroffer omkring filnavnet i #2: date returnerer altså noget numerisk.

Får du apostroffer på #4 forsøget?

Ellers prøv en tom string foran: GetSQLValueString("".date("dmyHis").(".".$extension), "text"),
Avatar billede tjens Nybegynder
14. november 2010 - 19:38 #6
Og drop den unødvendige parentes: GetSQLValueString("".date("dmyHis").".".$extension, "text"),
Avatar billede silmarillion Juniormester
14. november 2010 - 22:43 #7
Hej tjens,

Jeg har prøvet, at ændre til det du skriver, men jeg får stadig ikke filtypen med i databasen.


Resultatet i databasen ser ud som følger:

141110211900.


Når jeg laver en echo på outputtet får jeg følgende:

date: 141110213454

extention: jpg

SQL: INSERT INTO mistet (brugerid, overskrift, tekst, billed1, kategori, aktiv, ip, fm) VALUES ('1', 'asa asd asd asdaf yijufil', 'ngds', '141110213453.', '5', '1', '87.72.27.101', 0)
Avatar billede mike1963 Nybegynder
15. november 2010 - 11:22 #8
INSERT INTO `titles` (`id`, `title`, `URL`) VALUES (now(), '" . $targetNodes->item(0)->nodeValue . "', '" . $rssFeedName . "')");

Det er ikke din løsning, men læg mærke til de mærkelige apostroffer.

Her en en en anden der har mystiske fejl: http://news.php.net/php.general/308414

Og der er al for megen streng gymnastik i de funktioner( wrappers), så jeg ville gå tilbage til NATIVE SYNTAX som du ser øverst.

Her ser du et af mine eksempler, der både har node reference og $variabel, samt function i spil ;0)

Håber det hjælper, for jeg kan ikke se din nuværende trunkeringsfejl ...
Avatar billede tjens Nybegynder
15. november 2010 - 20:13 #9
Du må debugge videre:

Lav et nyt felt: $dateExt = "".date("dmyHis").".".$extension;

Og tilføj feltet i debug echo og brug det i $insertSQL = sprintf(... i stedet for det originale.
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