[PHP, SQL] problem z dodaniem rekordu zawierającego zmienną "POST"


(przemo996) #1

witam, mam problem z dodaniem do bazy rekordu w którym występuje zawartość pola tekstowego wysłana metodą POST.

Próbowałem na kilka sposobów, jednak zawsze były jakieś błędy.

Poniżej przedstawiam kod zawierający również dane do połączenia z testową bazą danych.

z uwagi na to, że "echo" również nie wyświetla zmiennej to zakładam że PHP źle interpretuje ową zmienną, ale co z tym zrobić to już nie mam pomysłu. Czemu zmienaa która zawsze jest INT-em działa ok a zmienna będąca łańcuchem już nie?

<form action="" method="POST">

<input type="submit" value="zapisz" />	
<select name="opcja">
	<option value="1">opcja1</option>
	<option value="2">opcja2</option>
	<option value="3">opcja3</option>
</select>
<textarea name='notatka' cols="30" rows="10"></textarea>
</form>
<?php

try {
  $pdo = new PDO('mysql:host=mysql.hostinger.pl;dbname=u353370355_2', 'u353370355_2', 'zaq12wsx');
}
catch (PDOException $e) {
  echo 'Connection failed: ' . $e -> getMessage();
} 
$qr = "SELECT * FROM tabela";
$stmt = $pdo -> query($qr);

if ($stmt -> rowCount() > 0) {
  while ($resource = $stmt -> fetch(PDO::FETCH_ASSOC)) {
    foreach ($resource as $key => $value) echo $key . ': ' . $value . '<br/>';
  }
} else echo 'Zapytanie nie zwróciło wyników'; 





$qr = "INSERT INTO tabela values(null,'$_PST[notatka]','$_POST[opcja]')";
$stmt = $pdo -> query($qr);
echo"$_POST[opcja]";
echo"$_POST[notatka]";
/*
 kolumny:id,notatka,kategoria
adres: http://zaqsa.esy.es/1/

*/
?>


PS. Proszę o poprawienie kodu i dokładne objaśnienie, ponieważ jestem w tym początkujący.

(fedora24x) #2
  1. MASA błędów:

action=""

name=‘notatka’

echo"$_POST[opcja]";

echo"$_POST[notatka]";

$qr = “INSERT INTO tabela values(null,’$_PST[notatka]’,’$_POST[opcja]’)”;

 

 

Stringi łaczymy znakiem kropki!

action to nasz plik wykonawczy

a echo to nie wspomne - echo $_POST[“notatka”];

 

sypie sie u podstaw, to nie twój kod…


(przemo996) #3

(kostek135) #4

Nie przemo996, to co proponujesz jest błędne. RFC jest w tym temacie ścisłe. Albo pomijamy całkowicie, albo musi się tam znaleźć niepusty URL, który jest poprawny i opcjonalnie otoczony spacjami.

https://html.spec.whatwg.org/#attr-fs-action


(przemo996) #5

Kak więc dziękuję za zwrócenie na to uwagi. Gość w kursie powiedział, że “zaleca się umieszczanie action zawsze, nawet z pustym linkiem”, ale teraz wiem że na to co on mówi trzeba uważać ponieważ on mówił też, że składnia echo wygląda tak echo(""); podczas gdy powinno być bez nawiasu. jednak te dwa błędy zwykle nie wpływają na wykonywanie skryptu, ale estetyka i szybkość pisania skryptu też są ważne. :slight_smile:


(nintyfan) #6

Co do “$_POST{“KLUCZ”]”, to powoduje to błąd, gdyż znak " rozpoczyna lub kończy cudzysłów.

Powinno to być tak:

"$_POST['klucz']"

(fedora24x) #7
<form action="index.php" method="POST">
	<input type="submit" value="zapisz" />	
	<select name="opcja">
	<option value="1">opcja1</option>
	<option value="2">opcja2</option>
	<option value="3">opcja3</option>
	</select>
	<textarea name="notatka" cols="30" rows="10"></textarea>
</form>

<?php
try {
	$pdo = new PDO('mysql:host=mysql.hostinger.pl;dbname=u353370355_2',
		       'u353370355_2',
		       'zaq12wsx');
} catch (PDOException $e) {
	echo 'Connection failed: '.$e -> getMessage();
}

$qr = "SELECT * FROM tabela";
$stmt = $pdo -> query($qr);
 
if ($stmt -> rowCount() > 0) {
	while ($resource = $stmt -> fetch(PDO::FETCH_ASSOC)) {
    		foreach ($resource as $key => $value) echo $key . ': ' . $value . '<br/>';
  	}
} else {
	echo 'Zapytanie nie zwróciło wyników'; 
}
 
$qr = 'INSERT INTO tabela values(null,"'.$_POST['notatka'].'", "'.$_POST['opcja']'")';
$stmt = $pdo -> query($qr);
echo $_POST['opcja'];
echo $_POST['notatka'];
?>

Prosze gotowy kod :slight_smile:

 

Błedy były w :

-action

-w cudzysłowach i kropkach

-w implentacji polecenia SQL

 

Popraw sobie zapytanie do SQL:

 

wg wzoru:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

wiecej na http://dev.mysql.com/doc/refman/5.6/en/insert.html


(przemo996) #8

Dziękuję wam za pomoc, troszkę pokombinowałem i może nie jest to do końca zgodne ze standardami, ale działa:-)

$qr = "INSERT INTO tabela values(null,'" . $_POST['notatka'] . "','" . $_POST['opcja'] . "')";

Zacząłem się zastanawiać czy komputer interpretuje ten kod tak jak ja, okazało się że jednak tak nie jest:-).