Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Zmienna w nazwie
Forum PHP.pl > Forum > Przedszkole
wupasek
Problem wyglada tak, dodaja se rekordy, znajduje ostatnie id
ale jak mam to wpisac do inserta zeby sie dobrze nazwa pliku zapisala?
1/do tabeli chcialbym wrzucic nazwe skladajaca sie z ID rekordu i _cyfry od 1 do 4 czyli np 60_1.jpg 60_2.jpg itd, w przypadku inserta czesc _1.jpg _2.jpg itd moze byc zdefiniowana recznie bo sa tylko cztery wiec nie ma duzo roboty, ale jak polaczyc otrzymane id z ta koncowka?
2/ do folderu chcialbym wrzucic plik tez o takiej samej nazwie oczywiscie, ale tym razem chcialbym wykorzystac iteracje od 1 do 4
3/ no i kwestia kolejna - czy musze dopisywac .jpg za kazdym razem? jak nie dodam to zapisuja sie bez rozszerzen wiec lipa - jakie jest z tego wyjscie?
4/ czy da rade jakos zrobic z jednym Insertem tylko?

bo teraz wrzucam czesc, potem odczytuje id rekordu i dopiero wrzucam reszte z id w nazwie (przynajmniej takie bylo zalozenie winksmiley.jpg )
Probowalem laczenia tych dwoch zmiennych na rozne sposoby, z ' , ", kropka i to w kilku kombinacjach, ale nie trafilem na poprawna konfiguracje :/
Dopiero kilka dni grzebie w php wiec napewno o czyms nie wiem albo przeoczylem

Prosze o pomoc bo mnie juz szlag trafia

kod (fragment ktory dotyczy mojego problemu)
  1. <?
  2. mysql_connect ("localhost", "$user", "$pass") or die ("Brak połączenia z MySQL");
  3.  mysql_select_db ("$database") or die ('Błąd połączenia z bazą'.': '.mysql_error());
  4. mysql_query ($query);
  5.  
  6. $query = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW() )");
  7.  
  8. $new_id = mysql_insert_id();
  9.  
  10. mysql_query ($query2);
  11.  
  12. $query2 = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW(), '$marka', '$model', '$opis', '$rocznik', '$przebieg', '$cena', '$miasto', '$sprzedajacy', '$email', '$telefon', '$new_id_1.jpg', '$new_id_2.jpg', '$new_id_3.jpg', '$new_id_4.jpg' )");
  13.  
  14. if (!$query2)
  15. {
  16. echo " Wpisu nie dodano!!";
  17.  
  18. } else {
  19. echo "Dodano";
  20. }
  21. //ZMIANA NAZWY PLIKU
  22. for ($i=1; $i<=4; $i++) 
  23. {
  24.  
  25. $tmp_img = "ogl_tmp_img$i";
  26.  
  27. if (is_uploaded_file($$tmp_img)) {
  28.  move_uploaded_file($$tmp_img, 'up/$new_id_$i.jpg');
  29. echo "Przesłano na serwer."; }
  30. ?>
nitek
nie bardzo mogę połapać się, o co dokładnie ci chodzi (może to przez tą późną porę winksmiley.jpg), ale ogólnie dodawanie czegoś takiego jak ty chcesz, powinno wyglądać tak:

Kod
<?php
(...)

$new_id=10; //założmy ze akurat tak jest
$sql="INSERT INTO tabela (id, nazwa) VALUES ($new_id, '".$new_id."_1.jpg'";
mysql_query($sql);

(...)
?>


To w wyniku wstawi ci do tabeli rekord o id 10 i nazwie "10_1.jpg"
Mam nadzieje, ze załapałeś ideę łączenia. tak naprawdę ten insert jest stringiem, czyli musisz do niego elegancko dołączyć zmienną za pomocą właśnie kropek o których wspomniałeś..
wupasek
dzieki wielkie
o to chodzilo, i smiga

chociaz cos mi dzisiaj przestalo dzialac mysql_insert_id() :/
pokazuje mi ciagle 0 :/

  1. <?php
  2. mysql_connect ("localhost", "$user", "$pass") or die ("Brak połączenia z MySQL");
  3.  mysql_select_db ("$database") or die ('Błąd połączenia z bazą'.': '.mysql_error());
  4. mysql_query ($query);
  5.  
  6. $query = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW() )");
  7. mysql_query ($new_id);
  8. $new_id=mysql_insert_id();
  9. ?>



a jak zrobie po insert:
  1. <?php
  2. $new_id = mysql_query ("SELECT LAST_INSERT_ID()");
  3. ?>

albo
  1. <?php
  2. $new_id = mysql_query ("SELECT id FROM ogloszenia_auta ORDER BY id DESC LIMIT 1");
  3. ?>

to dostaje

"Resource id #3"
ohmy.gif

moze ktos ma pomysl czemu? sad.gif

wszystko sie ladnie pieknie dodaje tylko nie moze znalezc tego last id w zaden sposob? moze cos trzeba w bazie przestawic czy jak?
pole id jest auto_increment i nie jest BIGINT sad.gif
sciana.gif
nitek
Jasne że mam pomysł dlaczego...
Jeśli dopiero zaczynasz przygodę z php, polecam lekturę strony php.net! i stamtąd od razu się dowiesz:
"mysql_insert_id — Podaje numer ID wygenerowany podczas ostatniej operacji INSERT"
czyli nie ma szans, żeby odczytać to id, przed wykonaniem zapytania.. Jeśli koniecznie chcesz mieć bieżace id w nazwie pliku, ostatecznie mógłbyś wyciągnąć przed insertem ostatnie największe id (selectem), dodać do tego jeden i miałbyś aktualnie wstawiane id - ale to rozwiązanie 'mało eleganckie'...
Inne rozwiązanie, to wykonanie po insercie update, który zaktualizuje ci pole z nazwą o właściwe id (właśnie wykorzystując mysql_insert_id())
specialplan
  1. SELECT LAST_INSERT_ID() AS last_id
wupasek
Cytat(nitek @ 28.02.2008, 09:15:06 ) *
Jasne że mam pomysł dlaczego...
Jeśli dopiero zaczynasz przygodę z php, polecam lekturę strony php.net! i stamtąd od razu się dowiesz:
"mysql_insert_id — Podaje numer ID wygenerowany podczas ostatniej operacji INSERT"
czyli nie ma szans, żeby odczytać to id, przed wykonaniem zapytania.. Jeśli koniecznie chcesz mieć bieżace id w nazwie pliku, ostatecznie mógłbyś wyciągnąć przed insertem ostatnie największe id (selectem), dodać do tego jeden i miałbyś aktualnie wstawiane id - ale to rozwiązanie 'mało eleganckie'...
Inne rozwiązanie, to wykonanie po insercie update, który zaktualizuje ci pole z nazwą o właściwe id (właśnie wykorzystując mysql_insert_id())

staram sie czytac forum i odpowiednie zrodla (m.in.php.net, "Vademecum profesjonalisty") zanim poprosze o pomoc
a to INSERT nie wystarczy?
zreszta po jego usunieciu i zrobieniu najpierw Select Last_ID() a potem Insert nadal dostaje Resourde ID #3 exclamation.gif sciana.gif

  1. <?php
  2. mysql_connect ("localhost", "$user", "$pass") or die ("Brak połączenia z MySQL");
  3.  mysql_select_db ("$database") or die ('Błąd połączenia z bazą'.': '.mysql_error());
  4. mysql_query ($query);
  5.  
  6. [b] $query = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW() )");[/b]
  7. mysql_query ($new_id);
  8. $new_id=mysql_insert_id();
  9. ?>


a teraz sprobowalem tego
SELECT LAST_INSERT_ID() AS last_id
i nadal dostaje Resource Id # 3 za kazdym razem
dodam ze auto_increment wynosi ok 80 w tej chwili
  1. <?php
  2. mysql_connect ("localhost", "$user", "$pass") or die ("Brak połączenia z MySQL");
  3.  mysql_select_db ("$database") or die ('Błąd połączenia z bazą'.': '.mysql_error());
  4.  
  5. //mysql_query ($query);
  6. //$query = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW() )");
  7. // mysql_query ($new_id);
  8.  //$new_id=mysql_insert_id();
  9.  
  10. [b]$new_id = mysql_query("SELECT LAST_INSERT_ID() AS last_id ");[/b]
  11.  
  12. echo $last_id;
  13. $new_id=$last_id+1;
  14.  
  15. mysql_query ($query2); 
  16.  
  17. $query2 = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW(), '$marka', '$model', '$opis', '$rocznik', '$przebieg', '$cena', '$miasto', '$sprzedajacy', '$email', '$telefon', '".$new_id."_1.jpg', '".$new_id."_2.jpg', '".$new_id."_3.jpg', '".$new_id."_4.jpg')");
  18. ?>


caly kod wyglada tak:
  1. <?php
  2.  
  3. $ogl_img1 = $_POST['ogl_img1'];
  4. $ogl_tmp_img1 = $_FILES['ogl_img1']['tmp_name'];
  5. $ogl_nazwa_img1 = $_FILES['ogl_img1']['name'];
  6. $ogl_img1_rozmiar = $_FILES['ogl_img1']['size'];
  7. $ogl_img2 = $_POST['ogl_img2'];
  8. $ogl_tmp_img2 = $_FILES['ogl_img2']['tmp_name'];
  9. $ogl_nazwa_img2 = $_FILES['ogl_img2']['name'];
  10. $ogl_img2_rozmiar = $_FILES['ogl_img2']['size'];
  11. $ogl_img3 = $_POST['ogl_img3'];
  12. $ogl_tmp_img3 = $_FILES['ogl_img3']['tmp_name'];
  13. $ogl_nazwa_img3 = $_FILES['ogl_img3']['name'];
  14. $ogl_img3_rozmiar = $_FILES['ogl_img3']['size'];
  15. $ogl_img4 = $_POST['ogl_img4'];
  16. $ogl_tmp_img4 = $_FILES['ogl_img4']['tmp_name'];
  17. $ogl_nazwa_img4 = $_FILES['ogl_img4']['name'];
  18. $ogl_img4_rozmiar = $_FILES['ogl_img4']['size'];
  19.  
  20. $rodzaj = $_POST['rodzaj'];
  21. $marka = $_POST['marka'];
  22. $model = $_POST['model'];
  23. $opis = $_POST['opis'];
  24. $rocznik = $_POST['rocznik'];
  25. $przebieg = $_POST['przebieg'];
  26. $cena = $_POST['cena'];
  27. $miasto = $_POST['miasto'];
  28. $sprzedajacy = $_POST['sprzedajacy'];
  29. $email = $_POST['email'];
  30. $telefon = $_POST['telefon'];
  31.  
  32. if ($_GET['akcja']=="dodaj") {
  33.  $user = "login";
  34.  $pass = "pass";
  35.  $database = "typ";
  36.  
  37.  mysql_connect ("localhost", "$user", "$pass") or die ("Brak połączenia z MySQL");
  38.  mysql_select_db ("$database") or die ('Błąd połączenia z bazą'.': '.mysql_error());
  39.  // mysql_query ($query);
  40.  
  41. // $query = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW() )");
  42. //mysql_query ($new_id);
  43.  // $new_id=mysql_insert_id();
  44.  
  45.  
  46. $last_id = mysql_query("SELECT LAST_INSERT_ID() AS last_id ");
  47.  
  48. echo $last_id;
  49. $new_id= $last_id+1;
  50. /* mysql_query ($new_id);
  51. $new_id= mysql_insert_id ();
  52. echo "<center> $new_id";
  53. printf (" %s", $new_id);
  54. echo "/<center>"; */
  55.  
  56. mysql_query ($query2); 
  57. $query2 = mysql_query ("INSERT INTO ogloszenia_auta VALUES (NULL, '$rodzaj', NOW(), '$marka', '$model', '$opis', '$rocznik', '$przebieg', '$cena', '$miasto', '$sprzedajacy', '$email', '$telefon', '".$new_id."_1.jpg', '".$new_id."_2.jpg', '".$new_id."_3.jpg', '".$new_id."_4.jpg')");
  58.  
  59. if (!$query2)
  60. {
  61. echo "<center>&nbsp;&nbsp;Wpisu nie dodano!!<br><br> 
  62. <input type=button value='Wróć i spróbuj jeszcze raz' class=tekst onclick='javascript:history.back()'>";
  63. } else {
  64. echo "<br><br><center>Dziękujemy za zamieszczenie ogłoszenia !<br><br><br>
  65. <a href='wybor.php'>Przejdź do przeglšdania ogłoszeń</a><br><br>
  66.  lub <a href='nowy3.php'>Dodaj następne ogłoszenie</a></center>";
  67. }
  68.  
  69. //ZMIANA NAZWY PLIKU
  70. for ($i=1; $i<=4; $i++) 
  71. {
  72.  
  73. $tmp_img = "ogl_tmp_img$i";
  74.  
  75. if (is_uploaded_file($$tmp_img)) {
  76.  move_uploaded_file($$tmp_img, 'up/'.$new_id.'_'.$i.'.jpg');
  77. echo "<center>'.$new_id.'_'.$i.'.jpg' przesłano na serwer.</center><br>";
  78. }
  79. else { echo "<center>Nie udało się wysłać pliku <strong>$i</strong> na serwer.<br><br>
  80. <input type=button value='Wróć i spróbuj jeszcze raz' class=tekst onclick='javascript:history.back()'></center><br>";
  81. }
  82. }  
  83.  
  84. }  
  85.  
  86. else {
  87. echo "<form method='POST' action='nowy3.php?akcja=dodaj' style='display: inline;' ENCTYPE='multipart/form-data'>
  88.  
  89. <table width=550 align=center>
  90. <tr><td width=400>Rodzaj ogłoszenia:</td><td>
  91. <select NAME='rodzaj' >
  92. <option value='1' >Sprzedam samochód</option>
  93. <option value='2' >Kupię samochód</option>
  94. <option value='3' >Sprzedam części</option>
  95. <option value='4' >Kupię części</option>
  96. </select></td></tr>
  97.  
  98. <tr><td width=150>  Marka: </td><td width=400><INPUT TYPE='text' NAME='marka' size=30><br></td></tr>
  99. <tr><td width=150>  Model: </td><td width=400><INPUT TYPE='text' NAME='model' size=30><br></td></tr>
  100. <tr><td width=150>  Opis: </td><td width=400><textarea name='opis' rows=8 cols=35></textarea><br></td></tr>
  101. <tr><td width=150>  Rocznik: </td><td width=400><INPUT TYPE='text' NAME='rocznik' size=10><br></td></tr>
  102. <tr><td width=150>  Przebieg: </td><td width=400><INPUT TYPE='text' NAME='przebieg' size=15></td></tr>
  103. <tr><td width=150>  Cena: </td><td width=400><INPUT TYPE='text' NAME='cena' size=15>&nbsp;zł.</td></tr>
  104. <tr><td width=150>  Miasto: </td><td width=400><INPUT TYPE='text' NAME='miasto' size=20></td></tr>
  105. <tr><td width=150>  Sprzedający: </td><td width=400><INPUT TYPE='text' NAME='sprzedajacy' size=30></td></tr>
  106. <tr><td width=150>  E-mail: </td><td width=400><INPUT TYPE='text' NAME='email' size=30></td></tr>
  107. <tr><td width=150>  Telefon: </td><td width=400><INPUT TYPE='text' NAME='telefon' size=30></td></tr>
  108. <tr><td width=150>  Dodaj zdjęcie 1:</td>
  109. <td width=400><input type='hidden' name='MAX_FILE_SIZE' value='2000000'><input name='ogl_img1' type='file' size=40></td></tr>
  110. <tr><td width=150>  Dodaj zdjęcie 2:</td>
  111. <td width=400><input type='hidden' name='MAX_FILE_SIZE' value='2000000'><input name='ogl_img2' type='file' size=40></td></tr>
  112. <tr><td width=150>  Dodaj zdjęcie 3:</td>
  113. <td width=400><input type='hidden' name='MAX_FILE_SIZE' value='2000000'><input name='ogl_img3' type='file' size=40></td></tr>
  114. <tr><td width=150>  Dodaj zdjęcie 4:</td>
  115. <td width=400><input type='hidden' name='MAX_FILE_SIZE' value='2000000'><input name='ogl_img4' type='file' size=40 ></td></tr>
  116. <tr><td width=150> </td><td width=400> <INPUT TYPE='submit' VALUE='Dodaj'>
  117. <button type='reset' name='reset'> Wyczyść </button>
  118. <input type=button value='Wróć' onclick='javascript:history.back()'>
  119. </td></tr></table></form>";
  120. }
  121. ?>


HEEELPPP sad.gif
nitek
Jeśli nie działa ci ta funkcja (osobiście nigdy jej nie używałem), to spróbuj odczytać najwyższe id i dodać do neigo jeden w ten sposób:

Kod
$w = mysql_query("SELECT max(id) AS last_id ");
$r = mysql_fetch_object ($w);
$last_id=$r->last_id;
  
$new_id=$last_id+1;


btw:
po wykonaniu mysql_query nie będziesz miał dostępnego last_id z twojego zapytania.. musisz ją potem przypisać do zmiennej za pomocą mysql_fetch_object...
wupasek
ok, dzieki
zaraz sprobuje
nitek
dodam, że jest to rozwiązanie mało eleganckie, bo nie masz żadnej gwarancji (szczególnie jeśli będzie dużo insertów jednocześnie), że nic się nie rozsypie...
Powinieneś wymyślić jakoś inaczej nazywanie zdjęć..
przykładowo możesz generować jakąś losową liczbę, wstawiać ją do tabeli obok id i do niej dopisywać swoje _1.jpg, _2.jpg itd...

Sam już nie wiem - może ktoś ma jakiś lepszy pomysł rozwiązania tego problemu?questionmark.gif
wupasek
zadzialalo, ale dopiero to co na koncu napisales (max(id))
tylko, ze auto increment moze miec wartosc wyzsza niz max id wiec nie moge tego zastosowac ;(

a reszta nie dziala
select last_id zwraca albo 0 albo resource id 3

moze sprobuje zrobic pierwszego inserta z danymi z formularza, potem mysql_insert_id a potem update samych nazw zdjec?
to czy moze to wygladac tak mniej wiecej
INSERT INTO ogloszenia_auta VALUES (NULL, 'rodzaj', NOW(), '', '', '' itd wszystkie pozozostale rekordy puste);
$last_id = mysql_insert_id();
UPDATE (tu jeszcze nie wiem co ale zaraz poszukam smile.gif

tylko czy moze byc insert i zaraz potem update? czy update moze byc tylko po select?
nitek
koncepcje masz dobrą...
po insercie będziesz mógł wyciągnąć wstawione przed chwilą id, a potem zrobić update'a - pisałem o tym w pierwszym moim poście w tym temacie...

co do update:

Kod
mysql_query("INSERT INTO ....
     $wstawione_id=mysql_insert_id();

mysql_query("update tabela set nazwa_foto='xxx' where id=$wstawione_id";


coś w tym stylu...
wupasek
dzieki wielkie mistrzu za pomoc
smiga jak nalezy yahoo.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.