Še eno mysql vprašanje

Lep pozdrav!

Zamima me, če kdo najde kako napako v slednji kodi. Nekaj delam narobe.
HTML:

<body>
    <form method="post" action="procesiraj.php">
    <input name="stevilka" type="text"></input>
    <input type="submit" name="submit"></input>
</body>

In še php:

<?php

$dbc=mysqli_connect("localhost", "xxx@localhost", "", "test") or die("Danger, danger Will Robinson, no entry into database!");

$query="INSERT INTO testek VALUES($_POST["stevilka"])";
mysqli_query($dbc,$query);

if (!mysqli_query($dbc,$query))
  {
  die('Error: ' . mysqli_error($dbc));
  }

mysqli_close($dbc);
?>

13 odgovorov

$query="INSERT INTO testek VALUES($_POST["stevilka"])";

Tole je syntax error. Saj ti verjetno PHP to javi, ti ne?

3

Niti ne, hvala Vini!

Potem si pa vključi error reporting. :)

$query="INSERT INTO testek VALUES($POST[stevilka])";
Je pa sila nevarna taka praksa, prej bi, če ne drugo, vsaj naredil intval($
POST['stevilka']).

Opazil sem, da nisem konsitenten pri pisanju narekovajev. Enojni, dvojni...mi lahko kdo na kak preprosti način razloži razliko?

Ker recimo, zakaj obravnavamo enkrat $stevilka kot string z '$stevilka', potem pa ga evalviramo kot spremenljivko preko ""?:

$query="INSERT INTO testek VALUES('$stevilka')";

Tukaj imaš vse razloženo, sploh pod "variable parsing"
http://php.net/manual/en/language.types.string.php

1

Hvala Slim.

Bi lahko še pokomentiral primer? Je nujno uporabiti enojne narekovaje za $stevilka?

Z vidika pravilnosti MySQL stavka ja. Sicer, če je $stevilka integer ali float pa bi delovalo tudi brez enojnih navednic.

1

Ne, ravno obratno je. Če je $stevilka integer ali float mora bit brez narekovajev, deluje pa sicer tudi z.

1

Aha fanta, odlično. Nisem se zamislil, da je enojni narekovaj posledica MySQL sintakse, sem mislil, da je tu PHP vmes. Sedaj je jasno!