Upload viacerých riadkov do DB

Programovacie jazyky, rady, poradňa...
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Upload viacerých riadkov do DB

Príspevok od používateľa Michaelo »

Zdravím,

robím jednu stránku a potrebujem tam upload viacerých riadkov z textarea tak, aby každý bol v novom riadku DB, ale ak už taký v DB existuje, nezapíše ho znova.

Kód som si spravil, ale očividne nefunguje tak ako by mal.
Chyba je v tom, že ak pridám zoznam kódov, tak niektoré ktoré sú v DB rozozná a nepridá ich, no niektoré pridá aj tak (väčšinou sú to kódy nad kódmi čo sa v DB nenachádzajú).

Netuším kde v kóde je chyba.

Tuto je kód:

Kód: Vybrať všetko

      if (isset($_POST['upload'])){
         $lines = explode("\n", $_POST["codes"]);
         foreach($lines as $line) {
            $select_codes = dbquery("SELECT * FROM codes WHERE code='".$line."'");
            $exist = dbrows($select_codes);
            if ($exist == 0){
               $sql = dbquery("INSERT INTO codes (code) VALUES ('$line')");
            }
         }
      }

      echo "<form method='post' action=''>";
      echo "<textarea name='codes' cols='50' rows='15'></textarea>";
      echo "<br/><input type='submit' name='upload' value='Upload'>";
      echo "</form>";
      echo "</div>";

Presnejšie používam tento kód ktorý mi zobrazí počet pridaných kódov, počet existujúcich atď. (kvôli jednoduchšiemu debugu):

Kód: Vybrať všetko

		if (isset($_POST['upload'])){
			$all_count = 0;
			$added_count = 0;
			$already_in_count = 0;
			$lines = explode("\n", $_POST["codes"]);
			foreach($lines as $line) {
				$all_count += 1;
				$select_codes = dbquery("SELECT * FROM codes WHERE code='".$line."'");
				$exist = dbrows($select_codes);
				if ($exist == 0){
					$sql = dbquery("INSERT INTO codes (code) VALUES ('$line')");
					if ($sql){
						$added_count += 1;
					}
				}else{
					$already_in_count += 1;
				}
			}
		}

		echo "$added_count code/s added from $all_count code/s posted.";
		if ($already_in_count > 0){ echo "<br/> <strong>$already_in_count code/s were already in DB.</strong>";}

Dbrows je vlastne funkcia ktorá vráti mysql_num_rows.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Upload viacerých riadkov do DB

Príspevok od používateľa pcsiete »

Všetko to môžeš dať do jednej query

Kód: Vybrať všetko

INSERT INTO codes (code) SELECT '$line' WHERE NOT EXISTS (SELECT * FROM codes WHERE code = '$line')
Do tabuľky sa vloží reťazec vybraný cez select iba v prípade, že sa už nenachádza v tabuľke.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Upload viacerých riadkov do DB

Príspevok od používateľa *****HERO***** »

chyba bude asi v tom, ze tie riadky mozu kludne koncit \r\n, pripadne nejakou nechcenou medzierkou, takze si ich treba pred pouzitim otrimovat

Kód: Vybrať všetko

$lines = explode("\n", $_POST["codes"]);
foreach($lines as $line) {
    $line = trim($line);
    //....
}
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: Upload viacerých riadkov do DB

Príspevok od používateľa Michaelo »

Hmm, nad niecim na tento styl som rozmyslal, ale vobec ma nenapadol funkcny kod No aj tak, tvoj kod ma niekde chybu, kedze ak vkladam kod ktory v DB nie je, tak to hodi chybu:
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 'WHERE NOT EXISTS (SELECT * FROM codes WHERE code='KVCVYN-TZR89C'' at line 1
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 'WHERE NOT EXISTS (SELECT * FROM codes WHERE code='aADJAJ-ACJAJA'' at line 1
0 code/s added from 10 code/s posted.
8 code/s were already in DB.
Jo, na ten trim som uplne zabudol. Teraz to uz funguje ako ma.
Divne ale je, ze som nikdy nepridal medzeru. Aj v DB boli kody uplne identicke (bez medzier).


Vdaka.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: Upload viacerých riadkov do DB

Príspevok od používateľa *****HERO***** »

medzera nemusi byt, uplne staci to "\r", co ti zostane na koncoch po tom, co to explodnes po "\n". to cez PhpMyAdmina v databaze neuvidis.
Michaelo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6177
Registrovaný: 16 júl 2008, 20:29
Bydlisko: Pri PC
Kontaktovať používateľa:

Re: Upload viacerých riadkov do DB

Príspevok od používateľa Michaelo »

Aha, moze byt. Vdaka.
Nabuduce na to uz nezabudnem :)

Kod funguje ako ma.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Upload viacerých riadkov do DB

Príspevok od používateľa pcsiete »

Michaelo napísal:Hmm, nad niecim na tento styl som rozmyslal, ale vobec ma nenapadol funkcny kod No aj tak, tvoj kod ma niekde chybu, kedze ak vkladam kod ktory v DB nie je, tak to hodi chybu:
Nepovedal by som že má chybu, ak funguje na ôsmych záznamoch a na dvoch nie. Buď to bude chyba vstupu, alebo akurát tie dva neboli v tabuľke a teda chybu si urobil ty niekde pred where.
Napísať odpoveď