» »

vnos podatkov v mysql s php in html obrazcem

vnos podatkov v mysql s php in html obrazcem

romegregor ::

Zdravo,

imam eno zagonetko, pa me zanima kako bi vi to rešili, torej v prvi vrsti iščem teoretične rešitve problema, potem pa tudi praktične :D

PROBLEM: v mysql tabelo bi rad za vsako vrstico (po stisku gumba 'oddaj') vpisal v vrstico tri podatke iz hmtl obrazca ter tri podatke iz php spremenljivk. Število izpisanih vrstic se spreminja od vaje do vaje, podatki vpisani v obrazec pa so v neposredni povezavi le s taisto vrstico v kateri se nahaja polje. Primer:

 primer

primer



kar pomeni, da bi v tabelo v prvo vrstico rad vpisal da je uporabnik za prvo serijo vaje počep opravil recimo 12 ponovitev pri 3,5kg - se razumemo? :D

Marino88 ::

Ne razumem problema.

A je potrebno, da skripta naredi kako računico ali je problem dva inputa prenest v bazo? o.O

Mesar ::

Ali zadevo rešiš z AJAXom ali pa narediš za vsako vrstico svoj FORM in daš noter zraven še http://www.w3schools.com/jsref/dom_obj_... recimo
<input type="hidden" name="idVaje" value="1" />
v form2
<input type="hidden" name="idVaje" value="2" />
itd, ... ki uporabniku ni viden, v PHP pa vseeno dobiš spremenljivko.
Your turn to burn!

romegregor ::

Nič ni računanja, dva vnosa iz vsake vrstice obrazca v vrstico v bazo. Še bolje bi bilo, da bi bil samo en gumb 'oddaj' na koncu obrazca. Če poenostavim:
Na ekranu se izpišejo vrstice za vsako serijo, ter koliko ponovitev je potrebnop opraviti pri tej seriji, uporabnik v obrazec vpiše število ponovitev in breme, v vsako vrstico posebej in pritisne na gumb oddaj. Aplikacija zapiše te podatke v PB, torej vsako vrstico iz ekrana, v PB...

Problem je, ker je pri vsaki vaji drugačno število vrstic - jaz pa v bazi potrebujem vse zapise, da jih povežem z uporabniki.

Mesar ::

Many-to-many %28data model%29 @ Wikipedia

ali

http://dev.mysql.com/doc/refman/5.0/en/...

ali

pa vstavljaš "" prazna polja v PB, kar je sicer slaba praksa.

Mogoče je še boljše, če si pripraviš več oziroma ustreznejše tabele. Tabelo za uporabnike, tabelo za izvajanje vaj, tablo vrste vaj... recimo.
Your turn to burn!

Zgodovina sprememb…

  • spremenil: Mesar ()

romegregor ::

...to sem sicer že poskušal z zanko WHILE, se pravi:
<?php
	while($i < $serije)
	{
		echo $j.". serija vaje ".$vaja['imeVaje']." | ".$ponovitve." ponovitev | " ?> opravil <input type="text" name="ponovitve_up"> ponovitev pri <input type="text" name="breme"> kg <input type="hidden" name="serija" value="<?php $j ?>"><input type="submit" name="knof" value="ODDAJ" /><br> <?php ;
        //---insert into mysql
		$i++; $j++;
	} ?> 


...pa mi v $_POST shrani samo zadnjo vrstico, pa še to ne popolnoma - brez zaporedne številke serije ($i).

Tabele imam kar štiri...eno za uporabnike, eno za vaje, eno za predpisane vaje in eno za aktivnosti, ki naj bi jih uporabnik izvajal - relacije med tabelami so mi jasne Ni mi jasno, kako naj zapisujem podatke - vrstico za vrstico v tabelo.

Zgodovina sprememb…

Marino88 ::

Npr:
<?php
$host="localhost";
$username="uporabnik1_ime"; // usporabniško ime baze 
$password="GESLO"; // geslo baze 
$db_name="uporabnik1_baza"; // ime baze
$tbl_name="tabelca"; // ime tabele

// povezava s strežnikom.
$link = mysql_connect("localhost", "uporabnik1_ime", "GESLO")or die("cannot connect"); 
mysql_select_db('uporabnik1_ime', $link) or die("Povezave ni bilo mogoče vspostavit - spremeniti dovoljenja na bazi.");

// Vrednosti iz obrazca - Tuki definiraš inpute
$opravil=$_POST['opravil'];
$ponovite_pri_kg=$_POST['ponovite_pri_kg'];

// vnos v mysql 
$sql="INSERT INTO tabelca(opravil, ponovite_pri_kg)VALUES('$opravil', '$ponovite_pri_kg')";
$result=mysql_query($sql);

// uspešen vnos 
if($result){
echo "Uspesno ste vnseli podatke v bazo.";
}

else {
echo "ERROR";
}
?>

<?php 
mysql_close();
?>


V obrazecu nastaviš
<form method="post" action="vaja1.php">

Zgodovina sprememb…

  • spremenilo: Marino88 ()

Mesar ::

Ja posta ti samo tisto v FORM značkah, pa method="post" rabiš po tem pa bi moral vse dobit v $_POST ... lahko na začetku izpišeš ceu array, da vidiš kaj je prišlo print_r($_POST); če hočeš več spremenljivk, ker se ti obrazec ponavlja pa lahko imaš tudi vnosna polja kot arraye namesto posamezne indexe $_POST ... http://stackoverflow.com/questions/2018...

http://php.net/manual/en/faq.html.php#f...
Your turn to burn!

Zgodovina sprememb…

  • spremenil: Mesar ()

romegregor ::

Marino88...tole je super rešitev za primer, ko ima vsaka vrstica svoj gumb oddaj...kako pa naj uporabnika obdržim na istem mestu in spremembo apliciram samo na vrstico v kateri je stisnil gumb, ostale pa ostanejo nespremenjene na zaslonu in PB?

Pišuka razpet sem med več rešitvami in ne vem katera je najbolj elegantna in enostavna...Mesar, ti si tudi predlagal dobro rešitev s tem array...

TRENUTNA KODA:
if(isset($_POST['uknof']))
{
	$kolser = 3;
	$kolpon = 3;
	
	$vaja = noge();
	$i=0;
	$j=1;
	$ponovitve = round($vaja['kolicnikPon'] * $kolpon);
	$serije = round($vaja['kolicnikSer'] * $kolser);
	echo "<br>";
	echo $vaja['imeVaje'];
	echo "<br>";
	?>
    <form action="uv.php" method="POST">
    <?php
	while($i < $serije)
	{
		echo $j.". serija vaje ".$vaja['imeVaje']." | ".$ponovitve." ponovitev | " ?> opravil <input type="text" name="ponovitve_up"> ponovitev pri <input type="text" name="breme"> kg <input type="hidden" name="serija" value="<?php $j ?>"><input type="submit" name="uvknof" value="ODDAJ" /><br> <?php ;
		//---insert into up_vadba values serija=$j ponovitve=$ponovitve where uporabnik=$_SESSION['upid']
		$i++; $j++;
	} ?>

function noge()
{
	include("povezi.inc");
	$cxn=mysqli_connect($gostitelj,$uporabnik,$geslo,$pb) or die ("Nisem uspel povezati s strežnikom");
	$sql="SELECT * FROM vaje
		WHERE MskupinaNo=10 AND rekvizitNo=1 AND kolicnikSer=1 ORDER BY RAND() LIMIT 0,1";
	$rezultat=mysqli_query($cxn,$sql) or die ("Nisem uspel izvesti poizvedbe");
	$noge=mysqli_fetch_assoc($rezultat);
	return $noge;
}


V uv.php imam samo print_r($_POST), pa mi je vedno izpisalo podatke samo zadnje vrstice (ko sem imel samo en gumb na koncu vaje in ne tako kot sedaj ko je gumb na koncu vsake vrstice),...sedaj vem zakaj, ker ni naredilo array in so pač zadnji podatki v formi prepisali vse prejšnje...takrat sem imel
<input type="submit" name="uvknof" value="ODDAJ" />
med $i++; $j++; } in ?>
uknof v zgoraj napisano kodo, posta informacije s prejšnje strani, kjer je uporabnik izbral parametre vadbe, v PB imam ločeni tabeli za vadbo, ki je uporabniku predpisana in tabela, kamor naj bi se shranili podatki opravljene vadbe.

Malce sem zbegan, ker ne vem katero rešitev uporabiti in kako jo aplicirati :( ...najboljše da prespim zadevo :8)

btw Offtopic: po treh tednih php-ja (odkar sva se prvič srečala v živo), sem opazil da ne pišem več sintaktičnih napak, ampak samo še logične, pa ne vem ali naj bom ponosen ali ne :)

Marino88 ::

Saj kokr jaz vidim ima vsaka vrstica svoj gumb in dva inputa.
S to skripto lahko komot to tko narediš. Predivdevam, da se morajo ljudje registrirat. Za login imaš
$_SESSION
, ko se uprabnik prijavi pa ima obrazec z inputi in kjer ima uporabnik že vnešene podatke narediš sam
<?php echo $_SESSION[...]?>
in ti zadeva laufa. Tko, lahko uporabnik vidi svoje vnose in brez težave vnaša nove podatke. Aja in povezave ne pozabi. ;)

romegregor ::

Mogoče kdo tule opazi kšno napako?
echo print_r($_SESSION);
echo print_r($vaja);
include("misc/misc.inc");
$cxn = mysqli_connect($gostitelj,$uporabnik,$heslo,$pb) or die ("Nisem uspel povezati s strežnikom.");
$vpis = "INSERT INTO up_vadba 
	(upid,vajaNo,serija,ponovitve,imeVaje)
	VALUES
	(".$_SESSION['upid'].",".$vaja['vajaNo'].",'$j','$ponovitve',".$vaja['imeVaje'].")";
	mysqli_query($cxn,$vpis) or die ("Nisem uspel povezati z bazo.");
print_r funkciji mi izpišeta vse vrednosti vseh spremenljivk povsem natančno in pravilno Podatkov v bazo pa mi ne vpiše, javi napako da ni uspel povezait z bazo, WTF???!!! :|
Če poskusim brez konkatenacije v $vpis, torej da iz SESSION in VAJE pred $vpis, poberem podatke in jih vržem v obični spremenljivki, naredi vse lepo in prav, RAZEN številke uporabnika (upid) NE vpiše v bazo - meni ni nič jasno...

4kik4 ::

lahko da imaš problem z narekovaji... .")"; dvojni znotraj enojnih ali obratno...

Zgodovina sprememb…

  • spremenilo: 4kik4 ()

švrk ::

mogoče zato ker imaš napisano $heslo namesto $geslo.

lp

romegregor ::

1) Spremenljivke so ustrezne, ker ne javi napake ob povezavi z bazo, temveč ob vpisu ;)

2) Kar se tiče oklepajev pa, hmmm, ne vem, dreamweaver mi ne javi sintaktične napake :8) ...bom še enkrat (vsaj) preveril...

Isti problem imam z vnosom spola v neki drugi tabeli...mogoče po kakšnem slučajo igra vlogo dejstvo, da je polje kamor vnašam podatek, tuji ključ, neke druge tabele znotraj iste baze?

Zgodovina sprememb…

romegregor ::

Javljam da mi je uspelo najti napako:
- spremenljivko za uporabnika sem hkrati uporabljal za dejanskega (fizičnega) uporabnika aplikacije in hkrati povezavo s PB...slednja je povozila uporabnika in ker ni bila pravi tip spremenljivke ni vpisalo v PB...
- spola pa mi ni hotelo vpisati, ker sem v php-ju pozabil nastaviti spremenljivko...

Hvala vsem za pomoč.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

pomoč v excelu (strani: 1 2 )

Oddelek: Programiranje
628939 (3268) omni-vor
»

PHP izpisovanje vrstic

Oddelek: Programiranje
6831 (694) Miha 333
»

SQL query za datume, ki se ne prekrivajo

Oddelek: Programiranje
212549 (2180) omnimint
»

MS Access (strani: 1 2 )

Oddelek: Programiranje
647283 (5341) travica
»

Pomoč pri programiranju z javo

Oddelek: Programiranje
203476 (2403) milc

Več podobnih tem