Avatar billede phillipvarsted Nybegynder
25. december 2012 - 23:46 Der er 10 kommentarer og
1 løsning

PHP MySQL bindestreg driller

Hej eksperter.

Jeg har et problem som jeg håber at I kan hjælpe mig med. Jeg har en mysql_query der indsætter dataen fra mit tekstfelt ind i min database. I dette tilfælde ville jeg gerne indsætte et faktura nummer. Faktura nummeret hedder i dette tilfælde 2012-120. Hvis jeg skriver dette ind i tekstfeltet og submitter min form, så indsætter den dataen korrekt til databasen, men i stedet for at vise 2012-120, så viser den i stedet resultatet af 2012 minus 120.

Det vil sige, at den minusser mine tal, i stedet for at skrive dem. Er der noget man kan gøre for at den forbliver på 2012-120 og ikke resultatet af et minus stykke? Måske ændrer MySQL celle datatypen?

Datatypen på min celle, er: text. Har også prøvet varchar og int, og de giver samme resultat.

Håber I kan hjælpe! Tak på forhånd :)
Avatar billede olebole Juniormester
26. december 2012 - 00:50 #1
<ole>

Denne kode fungerer fint:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<?php
if (!empty($_POST)) {
    $db = new mysqli('localhost', 'root', '', 'foobar');
   
    // Opret tabellen 'bar', hvis den ikke eksisterer
    $db->query('CREATE TABLE IF NOT EXISTS `bar` (`felt` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci');
   
    // Indsæt tal
    $stmt = $db->prepare('INSERT INTO `bar` (`felt`) VALUES (?)');
    $stmt->bind_param('s', $_POST['my_number']);
    $stmt->execute();
    $stmt->close();
   
    // Hent al data fra tabellen
    $html = array();
    $res = $db->query('SELECT `felt` FROM `bar`');
    while ($row=$res->fetch_array(MYSQLI_ASSOC)) {
        $html[] = '<div>'.$row['felt'].'</div>';
    }
    $res->free();
    $db->close();
   
    // Udskriv resultat
    echo implode('', $html);
}
?>

<form action="" method="post">
    <label>Tal: <input name="my_number" type="text"></label>
    <p><button type="submit">Opret</button></p>
</form>

</body>
</html>

Uden at se, hvad du gør, er det svært at sige, hvad du gør galt  =)

/mvh
</bole>
Avatar billede phillipvarsted Nybegynder
26. december 2012 - 01:03 #2
Dette er min kode:


<?
   
    $faknr = addslashes($_POST[faknr]);
   
    // Tjekker om submit knappen er trykket
    if (isset($_POST["submit"]) && $_POST["submit"]!= ""){
   
        mysql_query("INSERT INTO `faktura_kunder` (`fak_nr`) VALUES ($faknr)");
        mysql_query("INSERT INTO `faktura_beskrivelse` (`fak_nr`) VALUES ($faknr)");
        mysql_query("INSERT INTO `faktura_priser` (`fak_nr`) VALUES ($faknr)");
       
    }
   
    ?>
   
    <form action="" method="POST">
    <table id="fak_nr">
        <tr><td><p4>Faktura nr.:</p4></td><td><input type="text" name="faknr" size="30"></td></tr>
    </table>
        <br><tr><td><input class="submit" type="submit" name="submit" value="Opret faktura nr."></td></tr>
    </form>


Som sagt, så virker det som om, at den regner det ud, i stedet for bare at skrive teksten. :)
Avatar billede olebole Juniormester
26. december 2012 - 01:15 #3
Hvad får du ud af:

$faknr = addslashes($_POST['faknr']);
echo $faknr;
Avatar billede arne_v Ekspert
26. december 2012 - 01:52 #4
Du indsaetter vaerdier uden '' omkring.

2012-120 er et tal (1892)

'2012-120' er en streng og det er det som du vil
Avatar billede arne_v Ekspert
26. december 2012 - 01:53 #5
Ole opnaar samme effekt ved at bruge prepared statement og angive 's'.
Avatar billede arne_v Ekspert
26. december 2012 - 01:55 #6
Og husk at sikkerhedsmaessigt saa er raekkefoelgen bedst-daarligst:

1) mysqli og prepared statement
2) mysql og mysql_real_escape_string *med* connection
3) mysql og mysql_real_escape_string *uden* connection
4) mysql og addslashed

saa maaske skulle du vaelge Oles loesning!
Avatar billede olebole Juniormester
26. december 2012 - 03:07 #7
Dooohhhh ... den så jeg ikke, Arne! Selvfølgelig vil variablen blive parsed som et tal. Godt, nogen har øjne i hovedet  =)
Avatar billede phillipvarsted Nybegynder
26. december 2012 - 11:15 #8
Hvor kan jeg angive i min kode, at det er en streng, der skal sendes til databasen?
Tak for rådet forresten! Jeg kigger på Oles guide.

Når jeg poster noget kode på eksperten.dk, hvordan er det så smartest at gøre? Nogen siger at man skal lave en [pre] rundt om.
Avatar billede arne_v Ekspert
26. december 2012 - 13:55 #9
mysql_query("INSERT INTO faktura_kunder (fak_nr) VALUES ($faknr)");

vs

mysql_query("INSERT INTO faktura_kunder (fak_nr) VALUES ('$faknr')");
Avatar billede phillipvarsted Nybegynder
27. december 2012 - 09:46 #10
Tusind tak arne_v! Det hjalp :)
Avatar billede arne_v Ekspert
27. december 2012 - 15:14 #11
saa smider jeg et svar
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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