Gå til innhold

[Løst]Hente informasjon fra SQL tabell


Anbefalte innlegg

Heisann,

 

Jeg lager et administrasjons system til bedriften min i Prosjekt Til Fordypning på skolen. Har brakt dette til et ganske høyt nivå, og sliter litt med dette scriptet:

 

	$sql_1 = mysql_query("SELECT * FROM SB_arr_radioer WHERE modell = '$modell'");
while($row_2 = mysql_fetch_array($sql_1)) {
$sb_nr_sjekk = $row_2['SB_nummer'];
$sb_nr_sjekk .= ", ";
$_SESSION['sb_nummer_sess'] .= $sb_nr_sjekk;
									  }

	$sb_nummer_sess = $_SESSION['sb_nummer_sess'];
	$sb_nummer_sess .= '0';
$sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer = $sb_nummer_sess");
while($row_dato_sjekk = mysql_fetch_array($sql_sjekk_opptatt)) {
	if($dato >= $row_dato_sjekk['fra_dato'] || $til_dato <= $row_dato_sjekk['til_dato']){
		$ikke_sb = $row_dato_sjekk['SB_nummer'];
		$ikke_sb .= ', ';
		$_SESSION['ikke_sb_nummer'] = $ikke_sb;
																	}else{
		unset($_SESSION['ikke_sb_nummer']);
																	}
													}

 

$sb_nummer_sess blir satt uten problemer, men når det kommer til $ikke_sb_nummer, så blir det ikke satt noen variabler der! Dato variablene går på tall, så i dag (11/11-2009) ville da i systemet mitt blitt 20091111. Jeg har satt inn noe i tabellen "SB_arr_leie" med sb_nummer SBR_001, hvor fra_dato er 20091111 og til_dato er 20091126.

 

Håper noen kan hjelpe meg med problemløsning her :)

Takk på forhånd!

 

- Joachim.

Lenke til kommentar
Videoannonse
Annonse

Jeg skjønner ikke helt systemet, men kan spørre om noen ting som kanskje klarer opp i noe:

 

Først, hvor er $ikke_sb_nummer som du snakker om i koden din? Jeg ser ingen variabel med dette navnet?

 

Videre ang debugging, har du prøvd med noen print_r($array) underveis for å se hva variab lene dine inneholder etterhvert som koden blir kjørt?

 

Feks:

 

    $sql_1 = mysql_query("SELECT * FROM SB_arr_radioer WHERE modell = '$modell'");
   while($row_2 = mysql_fetch_array($sql_1)) {
   $sb_nr_sjekk = $row_2['SB_nummer'];
   $sb_nr_sjekk .= ", ";
   $_SESSION['sb_nummer_sess'] .= $sb_nr_sjekk;
                                         }

       $sb_nummer_sess = $_SESSION['sb_nummer_sess'];
       $sb_nummer_sess .= '0';
   $sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer = $sb_nummer_sess");
   while($row_dato_sjekk = mysql_fetch_array($sql_sjekk_opptatt)) {
[b]        print_r("<BR><BR>\n\n".$row_dato_sjekk);[/b]
       if($dato >= $row_dato_sjekk['fra_dato'] || $til_dato <= $row_dato_sjekk['til_dato']){
           $ikke_sb = $row_dato_sjekk['SB_nummer'];
           $ikke_sb .= ', ';
[b]            print("<BR>\n".$ikke_sb);[/b]
           $_SESSION['ikke_sb_nummer'] = $ikke_sb;
[b]            print_r("<BR>\n".$_SESSION);[/b]
                                                                       }else{
           unset($_SESSION['ikke_sb_nummer']);
                                                                       }
                                                       }

Endret av Ekko
Lenke til kommentar
Jeg skjønner ikke helt systemet, men kan spørre om noen ting som kanskje klarer opp i noe:

 

Først, hvor er $ikke_sb_nummer som du snakker om i koden din? Jeg ser ingen variabel med dette navnet?

 

Videre ang debugging, har du prøvd med noen print_r($array) underveis for å se hva variab lene dine inneholder etterhvert som koden blir kjørt?

 

Hei, og takk for hjelpen så langt :)

 

$ikke_sb_nummer blir satt i en session på slutten av koden over, for den brukes videre i scriptet.

 

	  $ikke_sb = $row_dato_sjekk['SB_nummer'];
		$ikke_sb .= ', ';
		$_SESSION['ikke_sb_nummer'] = $ikke_sb;

 

Har prøvd med noen print, og den øverste, $sb_nummer_sess virker slik den skal.. Så det er noe som går galt i den siste delen av scriptet.. Men finner ikke ut hva! :S

Lenke til kommentar

Kan være jeg er veldig treg her, men for å ha forstått riktig:

 

Er $ikke_sb_nummer det samme som $ikke_sb?

 

Hva får du ut om du bruker printene som jeg foreslo?

 

EDIT:

Eller mener du at $ikke_sb_nummer er det samme som $_SESSION['ikke_sb_nummer']?

Endret av Ekko
Lenke til kommentar

Litt offtopic kanskje men, du bør lære deg å gi logiske og forklarende variabel navn. Og bortsett fra det er forklaringen på problemet ditt litt håpløs.

 

Ontopic: Gjør som Ekko foreslår, dump eller print arrayene dine og sjekk hva de faktisk inneholder(om noe)

Lenke til kommentar
Litt offtopic kanskje men, du bør lære deg å gi logiske og forklarende variabel navn. Og bortsett fra det er forklaringen på problemet ditt litt håpløs.

 

Ontopic: Gjør som Ekko foreslår, dump eller print arrayene dine og sjekk hva de faktisk inneholder(om noe)

 

 

Takker for gode forslag og hjelp! Var på farten i går, så fikk ikke utdypt og forklart så veldig mye.

 

Har endret scriptet til:

 

	$sql_1 = mysql_query("SELECT * FROM SB_arr_radioer WHERE modell = '$modell'");
while($row_2 = mysql_fetch_array($sql_1)) {
$sb_nr_sjekk = $row_2['SB_nummer'];
$sb_nr_sjekk .= ", ";
$_SESSION['sb_nummer_sess'] .= $sb_nr_sjekk;
									  }

	$sb_nummer_sess = $_SESSION['sb_nummer_sess'];
	$sb_nummer_sess .= '0';
$sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE '%$sb_nummer_sess%'");
while($row_dato_sjekk = mysql_fetch_array($sql_sjekk_opptatt)) {
	$dato_sess = $_SESSION['dato_sess'];
	$dato_sess_til = $_SESSION['dato_sess_til'];

	if($dato_sess <= $row_dato_sjekk['fra_dato'] || $dato_sess_til >= $row_dato_sjekk['til_dato']){
		$ikke_sb = $row_dato_sjekk['sb_nummer'];
		$ikke_sb .= ', ';
		$_SESSION['ikke_sb_nummer'] = $ikke_sb;
																	}
													}

 

Det er kun en eneste variabel som ikke blir satt, eller hentet ut fra databasen, og det er $ikke_sb_nummer. Har sjekket opp mot tabellen, prøvd uten selve variabelen i SQL spørringen, og prøvd med kun selve "SB Nummeret", men det blir fortsatt ikke satt noe i sessionen.

 

$sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE '%$sb_nummer_sess%'");
while($row_dato_sjekk = mysql_fetch_array($sql_sjekk_opptatt)) {
	$dato_sess = $_SESSION['dato_sess'];
	$dato_sess_til = $_SESSION['dato_sess_til'];

	if($dato_sess <= $row_dato_sjekk['fra_dato'] || $dato_sess_til >= $row_dato_sjekk['til_dato']){
		$ikke_sb = $row_dato_sjekk['sb_nummer'];
		$ikke_sb .= ', ';
		$_SESSION['ikke_sb_nummer'] = $ikke_sb;
																	}
													}

Det er forsåvidt den delen av scriptet jeg sliter med.¨

 

Vil i midlertid si at i variabelen "$sb_nummer_sess" ligger følgende: SBR_001, SBR_002, SBR_003, SBR_004, 0. Hvordan kan jeg evt. dele disse opp slik at kun et "SB Nummer" går gjennom spørringen av gangen?

Lenke til kommentar

Jeg må si jeg fremdeles må ha klart for meg hvilken variabel som er $ikke_sb_nummer. Dette er 3. gangen jeg spør.

Jeg ser den ikke i koden og jeg regner med den er der siden du lurer på hvorfor den ikke blir satt.

 

Jeg lurer også litt på disse tre linjene som jeg har i codeboxen under.

Den første linjen overskriver hele $ikke_sb.

Den andre linjen konkatinerer(?) denne variabelen med et komma.

Den tredje linjen overskriver $_SESSION['ikke_sb_nummer'].

 

Jeg skjønner ikke helt hva du er ute etter her, men det ser ut for meg som du vil lage en lang kommaseparert streng som du lagrer til en variabel ($_SESSION['ikke_sb_nummer']). Denne vil vel aldri bli større enn en oppføring slik det er nå? (Jeg er litt rusten på syntaksen her, har ikke programmert php på noen år).

 

           $ikke_sb = $row_dato_sjekk['sb_nummer'];
           $ikke_sb .= ', ';
           $_SESSION['ikke_sb_nummer'] = $ikke_sb;

 

Jeg tror fortsatt at en print av alle variabler underveis vil hjelpe deg.

Lenke til kommentar
Vil i midlertid si at i variabelen "$sb_nummer_sess" ligger følgende: SBR_001, SBR_002, SBR_003, SBR_004, 0. Hvordan kan jeg evt. dele disse opp slik at kun et "SB Nummer" går gjennom spørringen av gangen?

 

Kjør en

print $sql_sjekk_opptatt;

og vis den til oss her.

Lenke til kommentar
Vil i midlertid si at i variabelen "$sb_nummer_sess" ligger følgende: SBR_001, SBR_002, SBR_003, SBR_004, 0. Hvordan kan jeg evt. dele disse opp slik at kun et "SB Nummer" går gjennom spørringen av gangen?

 

Kjør en

print $sql_sjekk_opptatt;

og vis den til oss her.

 

God morgen! :)

 

Da har jeg tatt en print på både $sql_sjekk_opptatt og $sb_nummer_sess:

 

$sb_nummer_sess = SBR_001, SBR_002, SBR_003, SBR_004, 0

Den er satt inn slik i spørringen:

$sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE '%$sb_nummer_sess%'");

 

$sql_sjekk_opptatt = Resource id #5

 

Så noe må være feil i selve SQL spørringen! :S Noen stusser kanskje på at WHERE sb_nummer skrives med små bokstaver i forhold til den andre SQL spørringen i begynnelsen av koden, men det er slik strukturen på den tabellen er.. Skiller da lettere mellom utleie tabellen og selve "vare"-tabellen.

Lenke til kommentar

Det virker og på meg som den sql-spørringen er litt tvilsom. Men det hadde vært greit om du hadde limt printene inn her i meldingene dine slik jeg ber om i forrige melding slik at vi får se hva som kommer ut.

 

Min første tanke er at sql-spørrignen din ser noe slikt ut:

 

 

 

"SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE 'SBR_001, SBR_002, SBR_003, SBR_004, 0'"

 

Med mindre det er noe syntaks som jeg ikke kjenner til (og det er mulig) så hadde jeg egentlig ikke trodd at denne spørringen ville gi noen resultater. Gjør den det? Det kan du evt teste gjennom å kjøre sprringen direkte mot databasen vha feks phpadmin eller login på serveren der mysql kjører.

Endret av Ekko
Lenke til kommentar

$sql_1:

Resource id #4

 

sb_nummer_sess:

SBR_001, SBR_002, SBR_003, SBR_004, 0

 

sql_sjekk_opptatt:

Resource id #5

 

Edit: I variabelen $sql_sjekk_opptatt (variabelen som blir satt etter spørringen da) så kommer det ingenting, den er tom.

 

Det får jeg når jeg bruker print. Men i $sql_1 så henter den ut SBR_001, SBR_002, SBR_003 og SBR_004.

 

Men hvordan kan jeg da sjekke flere elementer i en SQL spørring? I stedetfor å bruke

$sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE 'SBR_001, SBR_002, SBR_003, SBR_004, 0'");

?

Endret av Sec_NB
Lenke til kommentar

Jeg var litt rask, det var slik jeg mente, jeg ville se spørringen din:

 

$min_sql = "SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE '%$sb_nummer_sess%'";

print $min_sql;

$sql_sjekk_opptatt = mysql_query($min_sql);

 

EDIT:Men som du spør, så har du vel et behov for å gjøre spørringen på en annen måte. Gi meg 2 min så skal jeg foreslå noe.

 

 

Jeg tror du må kjøre en spørring for hvert element du har i $sb_nummer_sess. Du må altså dele opp igjen denne kommaseparerte listen du har til enkle verdier som du kjører en og en spørring for.

 

Jeg ville og sett på muligheten for å gjøre denne lagringen på en annen måte, feks lage seg en array, så kan du bruke push for å lagre nye elementer og pop for å få en og en tilbake når du skal kjøre spørringen.

 

EDIT:Hvis yankes løsning fungerer så er jo den betraktelig mer enkel og resursbesparende.

Endret av Ekko
Lenke til kommentar

Forsto jeg deg helt feil nå eller mener du at du skal hente ut all info fra SB_arr_leie der sb_number er lik SBR_001 eller SBR_002 eller SBR_003 osv.?

 

da blir det hvertfall sånn her

SELECT * FROM SB_arr_leie WHERE sb_number LIKE 'SB_001' OR 'SB_002' OR 'SB_003'

Endret av YaNkEs
Lenke til kommentar

Jeg fikk det til, takket være mye hjelp fra dere, og en god del tenking! :)

 

Det fungerende scriptet ser slik ut:

 

$sql_1 = mysql_query("SELECT * FROM SB_arr_radioer WHERE modell = '$modell'");
while($row_2 = mysql_fetch_array($sql_1)) { //starter row_2
$sb_nr_sjekk .= $row_2['SB_nummer'];

	$sql_sjekk_opptatt = mysql_query("SELECT * FROM SB_arr_leie WHERE sb_nummer LIKE '%$sb_nummer_sjekk'");

while($row_dato_sjekk = mysql_fetch_array($sql_sjekk_opptatt)) { //starter row_dato_sjekk
	$dato_sess = $_SESSION['dato_sess'];
	$dato_sess_til = $_SESSION['dato_sess_til'];

	if($dato_sess >= $row_dato_sjekk['fra_dato'] || $dato_sess_til <= $row_dato_sjekk['til_dato']){ //starter dato_sjekk
		$ikke_sb = $row_dato_sjekk['sb_nummer'];

																								  } //lukker dato_sjekk

$sql = mysql_query("SELECT * FROM SB_arr_radioer WHERE modell = '$modell' AND SB_nummer NOT LIKE '$ikke_sb' ORDER BY SB_nummer LIMIT $antall");
																  } //lukker row_dato_sjekk

												} //lukker row_2											
		$ant = mysql_num_rows($sql);

(utdrag fra det totale script brukt på siden)

 

 

Tusen takk for hjelpen! :)

God helg!

Lenke til kommentar

Bare hyggelig. En liten ting tilslutt.

 

Fungerer skriptet selv om du får flere rader i retur fra denne spørringen?

 

"SELECT * FROM SB_arr_radioer WHERE modell = '$modell'"

 

 

og er $sb_nr_sjekk og $sb_nummer_sjekk to ulike variabler? De hadde fryktelig like navn til å skulle være forskjellige.

Lenke til kommentar
Bare hyggelig. En liten ting tilslutt.

 

Fungerer skriptet selv om du får flere rader i retur fra denne spørringen?

 

"SELECT * FROM SB_arr_radioer WHERE modell = '$modell'"

 

 

og er $sb_nr_sjekk og $sb_nummer_sjekk to ulike variabler? De hadde fryktelig like navn til å skulle være forskjellige.

 

Oisann! Haha, der surret jeg litt, så er nok meningen det skal være samme variabel! Bra du så det!

 

Ja, det fungerer - hele spørringen kjøres jo igjennom for hver eneste rad som blir hentet ut, så det er jo forsåvidt et tungvindt script.. Men heldigvis er det for intern bruk, så det blir ikke så mye trafikk om gangen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...