Avatar billede chris0905 Nybegynder
19. juni 2011 - 13:55 Der er 20 kommentarer og
1 løsning

Problem med at oprette linje i MySQL fra PHP

Hej Eksperter!

Jeg har et problem med at min kode ikke vil oprette en linje i min MySQL tabel...

Koden er kopieret fra min anden side og derfor er der bare ændret lidt... (tabelnavn, og hvilke oplysninger der skal afsted...)

Håber der er nogen der kan hjælpe mig... ;)

På forhånd tak!

Mvh

Christoffer



Kode:


<?php
include('connect.php');
include('info.php');
include('head.php');
if($_GET['do'] == "opret")
{
    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM lejemaal WHERE id = '$_POST[id]'"),0);
    if($antal < 1)
    {
      if(!empty($_POST['category']) && !empty($_POST['by']) && !empty($_POST['overskrift']) && !empty($_POST['content']) && !empty($_POST['pris']))
      {
        mysql_query("INSERT INTO lejemaal (category,by,overskrift,beskrivelse,pris,url) VALUES ('$_POST[category]','$_POST[by]','$_POST[overskrift]','$_POST[content]','$_POST[pris]','$_POST[url]'");
        print "<center><font color=\"green\">Boligen er nu tilf&oslash;jet i kategorien '$_POST[category]'<br><br><a href='opret_lejemaal.php'>Opret endnu en bolig</a><br><br><a href='index.php'>Til administrations panelet</a></font></center>";
      }
      else
      {
        print "<center><font color=\"red\">Alle felter blev ikke udfyldt<br><br><a href = 'java script:history.back()'>Back to previous page</a> </font></center>";
      }
    }
    else
    {
      print "<center><font color=\"red\">Der findes allerede en side med denne url<br><br><a href = 'java script:history.back()'>Back to previous page</a> </font></center>";
    }
}
else
{
print "<div id='logo'><img src='snoopy-logo.png'></div> <h2>Opret nyt lejemaal - $sitename </h2> <hr>";

include('menu.php');
?>
<br><br>
<form action="?do=opret" method="POST">
    <table>
        <tr>
            <td>Kategori:</td>
            <td>
                <select name="category">
                    <option value="privat">Privat</option>
                      <option value="erhverv">Erhverv</option>
                      <option value="salg">Salg</option>
                </select>
            </td>
        </tr>
        <tr>
            <td>By:</td>
            <td><input type="input" name="by"></td>
        </tr>
        <tr>
            <td>Overskrift:</td>
            <td><input type="input" name="overskrift"></td>
        </tr>
        <tr>
            <td>Indhold:</td>
            <td><textarea style="width:400px; height: 300px;" name="content"></textarea></td>
        </tr>
        <tr>
            <td>Pris:</td>
            <td><input type="input" name="pris"></td>
        </tr>
        <tr>
            <td>URL:</td>
            <td><?php echo $siteurl; ?>lejemaal.php?p= <input type="input" name="url">    (fx: 23002)</td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Opret nyt lejem&aring;l!"></td>
        </tr>
    </table>
</form>
<?php
}
?>
Avatar billede kjeldsted Novice
19. juni 2011 - 13:59 #1
Had får du af fejl
Avatar billede kjeldsted Novice
19. juni 2011 - 14:00 #2
(Der skulle naturligvis stå "Hvad får du af fejl?")
Avatar billede chris0905 Nybegynder
19. juni 2011 - 14:05 #3
Det er det sjove (glemte at skrive i første omgang), at der er ikke nogen fejl... den kører igennem og kommer ud med "din side er oprettet"...
Avatar billede kjeldsted Novice
19. juni 2011 - 14:18 #4
Man skal ikke altid regne med at få en fejl ved en MySQL fejl ved PHP. hvis du tilføjer

or die(mysql_error))

efter dine querry's finder du ud af om der er fejl i disse.
Avatar billede kjeldsted Novice
19. juni 2011 - 14:22 #5
Desuden må du ikke bruge by som navn på række i MySQL da by er et reserveret ord.
Avatar billede chris0905 Nybegynder
19. juni 2011 - 15:16 #6
mener du sådan her:

mysql_query("INSERT INTO lejemaal (category,city,overskrift,beskrivelse,pris,url) VALUES ('$_POST[category]','$_POST[city]','$_POST[overskrift]','$_POST[content]','$_POST[pris]','$_POST[url]'")or die(mysql_error);
Avatar billede kjeldsted Novice
19. juni 2011 - 15:28 #7
Måske lige et mellemrum mellem ')' og 'or' bare lige for en god ordens skyld.

Men ellers ja. Prøv det.
Avatar billede danco Nybegynder
19. juni 2011 - 15:48 #8
Og så vil jeg lige pointere at det ikke er nogen gode idé at indsætte data i en database på den måde. Her vælger du 100% at stole på at din bruger har rene intentioner, men hvis det ikke er tilfældet vil det være super let at injecte din database.
Du bør derfor altid vælge at "vaske dine input rene" inden du indsætter, et eksempel på det kunne være mysql_real_escape_string.

Men on-topic , læg din SQL streng ud i en mellemvariabel og prøv at skrive den ud, så kan du formentlig se hvis der skulle være en fejl.

$sql = "INSERT INTO lejemaal (category,city,overskrift,beskrivelse,pris,url) VALUES ('$_POST[category]','$_POST[city]','$_POST[overskrift]','$_POST[content]','$_POST[pris]','$_POST[url]'";

mysql_query($sql)or die(mysql_error . 'SQL: ' . $sql);
Avatar billede chris0905 Nybegynder
19. juni 2011 - 15:52 #9
Nu får jeg følgende besked når jeg submit'ter:

mysql_errorSQL: INSERT INTO lejemaal (category,city,overskrift,beskrivelse,pris,url) VALUES ('privat','Ebeltoft','Skønt hus med udsigt','
Skønt hus med udsigt

','3.750 pr md','23004'
Avatar billede kjeldsted Novice
19. juni 2011 - 16:06 #10
Nå, jo. PHP strengnen skal vel egentlig escapes ved brug af $_POST, $_GET, $_REQUEST o.lign.
Avatar billede danco Nybegynder
19. juni 2011 - 16:06 #11
Undskyld det var mig der ikke var vågen.

ret til:
mysql_query($sql)or die(mysql_error() . 'SQL: ' . $sql);
Avatar billede chris0905 Nybegynder
19. juni 2011 - 16:29 #12
Nu får jeg:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1SQL: INSERT INTO lejemaal (category,city,overskrift,beskrivelse,pris,url) VALUES ('privat','Ebeltoft','Skønt hus med udsigt','
Skønt hus med udsigt

','3.750 pr md','23004'
Avatar billede chris0905 Nybegynder
19. juni 2011 - 16:37 #13
Jeg fandt den... der manglede ) i slutningen af PHP strengen... ;) smid svar!
Avatar billede chris0905 Nybegynder
19. juni 2011 - 16:43 #14
er denne okay med hensyn på sikkerhed????

$sql = "INSERT INTO lejemaal (category,city,overskrift,beskrivelse,pris,url) VALUES ('mysql_real_escape_string($_POST[category])','mysql_real_escape_string($_POST[city])','mysql_real_escape_string($_POST[overskrift])','mysql_real_escape_string($_POST[content])','mysql_real_escape_string($_POST[pris])','mysql_real_escape_string($_POST[url])')";
Avatar billede chris0905 Nybegynder
19. juni 2011 - 16:44 #15
prøver lige igen...

$sql = "INSERT INTO lejemaal (category,city,overskrift,beskrivelse,pris,url) VALUES
('mysql_real_escape_string($_POST[category])','mysql_real_escape_string($_POST[city])',
'mysql_real_escape_string($_POST[overskrift])','mysql_real_escape_string($_POST[content])',
'mysql_real_escape_string($_POST[pris])','mysql_real_escape_string($_POST[url])')";
Avatar billede danco Nybegynder
19. juni 2011 - 17:06 #16
Nu ved vi jo ikke hvordan dit system virker, men som hovedregel skal du ALTID escape på input der kommer fra inputfelter , altså alle steder hvor brugeren har mulighed for at skrive noget.
Generelt ville jeg dog nok blive irriteret hvis jeg skulle læse din kode igennem, den der opbygning er bare ikke særlig pæn, men semantik er jo noget man selv vælger at priotere :)

jeg ligger et svar.
Avatar billede kjeldsted Novice
19. juni 2011 - 17:33 #17
Det pæneste ville klart være noget a lá:


//Henter POST data og kører en mysql_real_escape_string for at undgå MySQL injection
$category = mysql_real_escape_string($_POST['category']);
$city = mysql_real_escape_string($_POST['city']);
$overskrift = mysql_real_escape_string($_POST['overskrift']);

$sql = "INSERT INTO lejemaal (category,city... ... VALUES ('$cetagory','$city'...

Jeg behøver vel næppe skrive mere end dette. Men som tidligere nævnt er det jo en smagssag. Men mine erfaringer siger mig at hvis ikke man passer på giver en kode som #15 ikke meget mening efter et par måneder :)
Avatar billede webweaver Praktikant
19. juni 2011 - 17:55 #18
#14 Nej, du har ingen sikkerhed overhovedet. Så det kan ikke just siges. Der bør valideres på dine inputfelter og så skal du sikre dit data, inden du smider det i databasen.

mysql_real_escape_string bliver nævnt af de andre, hvilket er en udemærket måde at sikre sig på. Det bedste mod SQL injections vil dog være at benytte sig af prepared statements. Så det vil jeg anbefale, at du læser lidt om :-)
Avatar billede chris0905 Nybegynder
22. juni 2011 - 18:40 #19
jeg mangler stadig kjeldsted...
Avatar billede kjeldsted Novice
22. juni 2011 - 18:47 #20
#19: Hvis du tænker på point så behøver jeg ikke nogen for denne gang.
Avatar billede chris0905 Nybegynder
22. juni 2011 - 19:33 #21
ok, lukker....
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