problema inserare de 2 ori aeleasi date[rezolvat]

Întrebări legate de conectarea la baze de date MySQL prin intermediul PHP

Moderatori: Zamolxe, Moderatori

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

problema inserare de 2 ori aeleasi date[rezolvat]

Mesajde ndianaz » Joi Iul 02, 2009 8:18 pm

Buna. Am si eu o problema de inserare in mysql. Am creat tabelele cu urmatorul cod (din export phpmyadmin):

CREATE TABLE IF NOT EXISTS `producatori` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nume_producator` varchar(50) DEFAULT NULL,
`producator_ap` varchar(1000) DEFAULT NULL,
`producator_roboti` varchar(1000) DEFAULT NULL,
`adresa_web` varchar(500) DEFAULT NULL,
`observatii` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;


de cate ori nu specific id-ul (si din php si direct din musql) sau trec 0 (zero), imi insereaza de 2 ori aceleasi campuri., incerc de ceva tim sa imi dau seama care e problema. Stie cineva sa-mi zica si mie? va rog!
Ultima oară modificat Vin Iul 03, 2009 7:51 pm de către ndianaz, modificat de 2 ori în total.



LXS
Senior Member
Mesaje: 375
Membru din: Dum Oct 05, 2008 8:34 pm
Localitate: Timisoara
Contact:

Mesajde LXS » Joi Iul 02, 2009 8:27 pm

Faci un UNIQUE KEY pe fiecare coloana, sau pe o coloana care nu vrei sa se mai repete, mai usor poti sa verifici din PHP cu o conditie daca mai exista acea valoare in baza de date iar daca ea mai exista sa nu o mai reintroduca!

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

Mesajde ndianaz » Joi Iul 02, 2009 8:36 pm

cred ca nu ma exprimai corect, nu-mi dubleaza id-ul, restul valorilor se dubleaza adica ceva de gen:

id nume_producator prod_ap prodr_roboti adresa_web obs
18 prod 1 da nu www nu
19 prod 1 da nu www nu

la o singura inserare

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

Mesajde ndianaz » Joi Iul 02, 2009 11:33 pm

cred ca nu ma exprimai corect, nu-mi dubleaza id-ul, restul valorilor se dubleaza adica ceva de gen:

id nume_producator prod_ap prodr_roboti adresa_web obs
18 prod 1 da nu www nu
19 prod 1 da nu www nu

la o singura inserare

lorand1
Average Member
Mesaje: 108
Membru din: Vin Apr 25, 2008 7:44 pm
Localitate: Baia Mare

Mesajde lorand1 » Joi Iul 02, 2009 11:41 pm

aratane si partea de cod cum faci tu insert in acea tabela, de acolo ai buba in cod , undeva la insert

sau din codul php iti dublezi instructiunea sql

asa ar trebui sa iti arate o instructiune insert in tabela ta, la coloana id nu mai e necesar sa ii atribui o valoare deoarece se autoincrementeaza

Cod: Selectaţi tot

INSERT INTO `producatori` (
`nume_producator` ,
`producator_ap` ,
`producator_roboti` ,
`adresa_web` ,
`observatii`
)
VALUES (
'variabila_nume_producator',
'variabila_producator_ap',
'variabila_producator_roboti',
'variabila_adresa_web,
'variabila_observatii'
);
Oamenii normali nu stiu ca totul e posibil. David Rousset
Nu am vreo insusire speciala, ci sunt numai un pasionat curios. Albert Einstein

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

Mesajde ndianaz » Joi Iul 02, 2009 11:48 pm

lorand1, din mysql insertia o fac asa cum ai scris si tu, daca specific id-ul imi insereaza o singura line, daca nu-l specific imi insereaza 2 linii identice, dar cu id diferit. In php codul arata astfel:

$id = $_POST['id'];
$name = $_POST['nume_producator'];
$prod_ap= $_POST['producator_ap'];
$prod_roboti = $_POST['producator_roboti'];
$web = $_POST['adresa_web'];
$observes = $_POST['observatii'];

$query = "INSERT INTO producatori (id, nume_producator, producator_ap, producator_roboti, adresa_web, observatii)
VALUES ('$id','$name', '$prod_ap', '$prod_roboti', '$web','$observes')";

cu valorile specifice de tip input dintr-o pagina html

lorand1
Average Member
Mesaje: 108
Membru din: Vin Apr 25, 2008 7:44 pm
Localitate: Baia Mare

Mesajde lorand1 » Vin Iul 03, 2009 12:06 am

incearca acuma asa, ar trebui sa iti functioneze

Cod: Selectaţi tot

$id = $_POST['id'];
$name = $_POST['nume_producator'];
$prod_ap= $_POST['producator_ap'];
$prod_roboti = $_POST['producator_roboti'];
$web = $_POST['adresa_web'];
$observes = $_POST['observatii'];

$query = "INSERT INTO `producatori` (
`nume_producator`,
`producator_ap`,
`producator_roboti`,
`adresa_web`,
`observatii`
)
VALUES (
'$name',
'$prod_ap',
'$prod_roboti',
'$web',
'$observes'
)";
Oamenii normali nu stiu ca totul e posibil. David Rousset

Nu am vreo insusire speciala, ci sunt numai un pasionat curios. Albert Einstein

preda.vlad
Average Member
Mesaje: 192
Membru din: Vin Mar 20, 2009 4:56 pm
Contact:

Mesajde preda.vlad » Vin Iul 03, 2009 12:06 am

Userul isi specifica singur idul ? Asta ar trebui generat automat pentru fiecare intrare prin autoincrement la coloana id.

Eu as lasa atat :

Cod: Selectaţi tot

$name = $_POST['nume_producator'];
$prod_ap= $_POST['producator_ap'];
$prod_roboti = $_POST['producator_roboti'];
$web = $_POST['adresa_web'];
$observes = $_POST['observatii'];

$query = mysql_query(SELECT 1 FROM producatori WHERE nume_producator = '$name' AND producator_ap ='$prod_ap' AND producator_roboti='$prod_roboti' AND adresa_web='$web' observatii='$observes' ) or die (mysql_error());

if (mysql_num_rows($query) == 0)
{
$query = mysql_query("INSERT INTO producatori VALUES ('','$name', '$prod_ap', '$prod_roboti', '$web','$observes')") or die mysql_error();
}


Mie mi-e lene sa scriu si coloanele la insert into :P Si ... inserarea de 2 ori e posibil sa o faca pentru ca userul da click de 2 ori pe submit, si cum nu poate sa pune acelasi id de 2 ori => autoincrement.

Asta se rezolva cu verificarea pe care am facut-o mai sus.

Sper sa ajute cat de cat ce am scris aici

Bafta

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

Mesajde ndianaz » Vin Iul 03, 2009 1:18 am

Am intarziat putin cu raspunsul pentru ca am incercat ambele coduri;
lorand1-scriptul acela face exact ce-a facut si al meu, nu-i nici o diferenta, merci oricum;
vlad, la asta nu ma gandisem, ideea e buna, problema e ca acum nu functioneaza deloc, incerc sa-i gasesc "buba", dar inca nu reusesc.
Am vrut ca userul sa-si poate alege locatia in tabel, daca e libera, in caz ca doreste, deoarece in momentul in care stergi o linie, mysql-ul continua numaratoarea sarind peste linia aceea, plus ca pe mine ma ajuta mult, deoarece grasesc mereu :oops: si trebuie sa sterg si ar insemna ca tabelul meu sa aiba id-urile foarte distantate. Am vazut ca 0 in locul id-ului functioneaza ca lipsa id-ului, plus ca vreau sa folosesc si if pentru prezenta sau lipsa id-ului.
sper ca ai inteles ceva din ce scrisei :oops:

Avatar utilizator
Ctek
Senior Member
Mesaje: 310
Membru din: Dum Oct 05, 2008 12:05 am
Contact:

Mesajde Ctek » Vin Iul 03, 2009 12:41 pm

Ia cauta tu in script poate mai ai pe o linie cate iti scapa din vedere inca odata unde iti executa $query;

este posibil sa il mai execute si sa nu iti dai seama, ai folosit la o afisare ceva ? sau faci apel la acea functie din alta parte.

Vezi scriptul de la cap la coada inca o data si vezi sa nu iti fi scapat ceva.
Bafta

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

Mesajde ndianaz » Vin Iul 03, 2009 1:46 pm

Acesta este tot scriptul:

<?php
$db = "ap_si_roboti";
$host = "localhost";
$user = "root";
$pass = "diana";
$link = mysql_connect($host, $user, $pass);
if ($link == null) {
print "EROARE la conexiune<br/>".mysql_error();
die();
}
else {
print "Conexiunea a reusit<br/>";
if (mysql_select_db($db, $link)) {
print "Selectia bazei de date ".$db. " a reusit<br/>";
}
else {
print "EROARE de selectie<br/>".mysql_error();
die();
}
}
$name = $_POST['nume_producator'];
$prod_ap= $_POST['producator_ap'];
$prod_roboti = $_POST['producator_roboti'];
$web = $_POST['adresa_web'];
$observes = $_POST['observatii'];

$query = mysql_query(SELECT * FROM producatori WHERE nume_producator = '$name' AND producator_ap ='$prod_ap' AND producator_roboti='$prod_roboti' AND adresa_web='$web' observatii='$observes' ) or die (mysql_error());

if (mysql_num_rows($query) == 0)
{
$query = mysql_query("INSERT INTO producatori ( nume_producator, producator_ap, producator_roboti, adresa_web, observatii) VALUES ('$name', '$prod_ap', '$prod_roboti', '$web','$observes')") or die mysql_error();
}
mysql_query($query);
mysql_close();

?>

nu-mi dau seama care e problema :( :scratch:

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Iul 03, 2009 2:03 pm

Sigur nu executi bucata aia de cod si la GET si la POST? Care e verificarea pe
care o folosesti ca sa executi codul de insert? Ar trebui sa fie ceva de genul:

Cod: Selectaţi tot

<?php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // do insert
    // redirect
    exit;
}

?>
<!-- afiseaza formular -->
I'm under construction | http://igstan.ro

ndianaz
Junior Member
Mesaje: 43
Membru din: Sâm Iun 20, 2009 5:01 pm
Localitate: Craiova
Contact:

Mesajde ndianaz » Vin Iul 03, 2009 3:15 pm

Amenthes, sper ca intelesei bine ce-ai vrut sa spui (sunt la inceput rau de tot in programare); acela e tot scriptul php, nu mai am nimic in plus, daca pagina ar merge mi-ar afisa "EROARE la conexiune" sau "Conexiunea a reusit" si daca selectia a reusit sau nu, in programul initial afisam si daca insertia a reusit sau nu, si numarul de randuri introduse. Problema e ca pagina nu merge deloc, si chiar nu-mi dau seama de ce. :wallbash:

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Iul 03, 2009 3:40 pm

Trebuie sa mai ai ceva in plus. Daca nu, e voodoo programming. Nu ai un
fisier HTML cu un formular (FORM), care FORM are un atribut ACTION in care
e adresa catre scriptul de l-ai postat mai sus? Poti sa postezi si partea aceea?

LATER EDIT.

Sper sa nu te deranjeze, dar daca ai spus ca esti la inceput cu PHP-ul, m-am
gandit sa iti rescriu scriptul intr-un mod care mi se pare mie mai organizat.
Scriptul nu e ideal. Se poate si mai bine, dar nu am vrut sa fie prea greu.

Nu il postez aici, l-am pus la adresa asta:

http://gist.github.com/140094

Sper sa te ajute putin, iar daca nu intelegi, poti sa ma intrebi. A, da. Cand il
citesti, citeste-l de jos in sus, nu de sus in jos.
I'm under construction | http://igstan.ro

Avatar utilizator
Ctek
Senior Member
Mesaje: 310
Membru din: Dum Oct 05, 2008 12:05 am
Contact:

Mesajde Ctek » Vin Iul 03, 2009 4:28 pm

iti introduce de doua ori pentru ca iti executi query-ul de doua ori


odata cand il atribui aici:

$query = mysql_query("INSERT INTO producatori ( nume_producator, producator_ap, producator_roboti, adresa_web, observatii) VALUES ('$name', '$prod_ap', '$prod_roboti', '$web','$observes')") or die mysql_error();

si apoi cu

penultima linie
mysql_query($query);


la atribuirea de mai sus trebuia sa ai asa:

$query = "INSERT INTO producatori ( nume_producator, producator_ap, producator_roboti, adresa_web, observatii) VALUES ('$name', '$prod_ap', '$prod_roboti', '$web','$observes')";


si abia apoi il poti executa cu:

mysql_query($query);

Sper ca ai inteles.

PS : la atribuire $query = mysql_query..... $query primeste o functie si ca urmare se executa :)

@ Amenthes, frumos scriptul, am aruncat si eu o privire :)

Bafta


Înapoi la “MySQL”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 7 vizitatori