Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  11 794
Jeg har kommet til ett lite problem som jeg ikke får helt til.

Kode

echo "<input type='hidden' name='score[]' value='|' /><br />";
                    echo "<input type='number' name='score[]' value='1' min='1' max='20' /><br />";
foreach ($score as &$value)
          if ($mysqli->query("INSERT INTO score (score,uke,dato,sted,bruker_id) VALUES ('$value','$uke','$dato','$sted','$bruker_id')"))
Det kan feks være 10 score[] fra $_POST['score'] og jeg skal legge den inn i databasen som en linje og ikke bare første tallet.

Tallet skal bli slik feks: |1|2|3|4|5|6
Trigonoceps occipita
vidarlo's Avatar
Donor
$foo = '';
foreach ($core as$value) {
$foo = $foo . "|" . $value;
}
Forøvrig så virker det som en ekstremt dårlig idè å gjere det slik.

I tillegg er databasen pip åpen. Kva om score er ';DROP TABLE score?
Trådstarter
15 0
Jeg vet, er bare noe jeg holder på med, skal ta noen runder med real_escape_string.

Hvordan andre måter går det ann og gjøre det på?

For jeg har fått opp |1|2|3|4, men får den ikke i databasen, blir bare endten ett og ett tall eller kunn ett tall..
Trigonoceps occipita
vidarlo's Avatar
Donor
Du lagrer kvart tal som eiga rad i databasen vil eg tru.
Trådstarter
15 0
Joda har gjort det, men siden den er variabel ettersom hvor mange score[] som er så ble det litt vanskelig..

Anthull: 1 2 3 4 5
score : 2 3 4 2 1

Om du skjønner? Så kunne ikke ha noe fast rad for vær score..
Trigonoceps occipita
vidarlo's Avatar
Donor
Jo, det kan du. Du har åpenbart ein fellesnemnar for score, og da kan du lagre kvart tal i eiga rad og assosiere det ved hjelp av fellesnemnaren.
Trådstarter
15 0
Tenker du : score1 | score2 | score3 i databasen?
Trigonoceps occipita
vidarlo's Avatar
Donor
Nei.

Sei at du har tabell over 'Anthull' som du kaller det. Kvar rad der har ein id. Så har du ein tabell over score, der eit av felta er ein referanse til iden frå 'Anthull'. Men all den tid du seier så lite om kva du vil er det vanskelig å vere veldig konkret
For å svare direkte på spørsmålet ditt, kan du se på implode.
$results = implode('|', $_POST['score'])
Dette vil knytte alle radene i arrayet sammen til en string, med | mellom.

Når det er sagt, støtter jeg slashdot sitt forslag om databasestruktur. Se på dette:

Kode

parent_table (
- parent_id (int, ai)
- user_id (int)
- dato (date)
- sted (varchar)
)

child_table (
- parent_id (int)
- score (int)
)

<?php
if (isset($_POST['score'])) {
	$parent = $PDO->prepare('INSERT INTO parent_table (user_id, dato, sted) VALUES (:user_id, NOW(), :sted)');
	$parent->execute(array(
		':user_id' => $user_id,
		':sted' => $sted
	);
	
	$parent_id = $PDO->lastInsertId();
	
	$child = $PDO->prepare('INSERT INTO child_table (parent_id, score) VALUES ('.$parent_id.', :score)');
	$child->bindParam(':score', $score);
	
	foreach ($_POST['score'] as $score) {
		$child->execute();
	}
}
?>
Bruker her PDO til databasespørringer. Men du skjønner uansett tegningen.
Trådstarter
15 0
Sitat av ma10as Vis innlegg
For å svare direkte på spørsmålet ditt, kan du se på implode.
$results = implode('|', $_POST['score'])
Dette vil knytte alle radene i arrayet sammen til en string, med | mellom.

Når det er sagt, støtter jeg slashdot sitt forslag om databasestruktur. Se på dette:

Kode

parent_table (
- parent_id (int, ai)
- user_id (int)
- dato (date)
- sted (varchar)
)

child_table (
- parent_id (int)
- score (int)
)

<?php
if (isset($_POST['score'])) {
	$parent = $PDO->prepare('INSERT INTO parent_table (user_id, dato, sted) VALUES (:user_id, NOW(), :sted)');
	$parent->execute(array(
		':user_id' => $user_id,
		':sted' => $sted
	);
	
	$parent_id = $PDO->lastInsertId();
	
	$child = $PDO->prepare('INSERT INTO child_table (parent_id, score) VALUES ('.$parent_id.', :score)');
	$child->bindParam(':score', $score);
	
	foreach ($_POST['score'] as $score) {
		$child->execute();
	}
}
?>
Bruker her PDO til databasespørringer. Men du skjønner uansett tegningen.
Vis hele sitatet...
Den implode(); var den enkleste løsningen. Veldig bra den andre løsningen også! Er vell sånn jeg har det på dato og uker til den score tabellen.

Takk for hjelpen!
Overskuddsmateriell
Skal du datere tingene tilbake i tid eller er uke og dag når de legges inn?

Hvis nå så ville jeg heller brukt:

Kode

DATE(NOW())
WEEK(NOW())
Mindre PHP kode og ryddigere
Sist endret av Bullhill; 7. juli 2012 kl. 19:52.
Pass deg for sql-injections. Er typisk at sånne hjemmesnekra systemer er sårbare Nå du tar imot input fra brukeren er det særdeles viktig at inputen sjekkes nøye for ulumskheter. Kjør f.eks. en grunnleggende sjekk på om dataene som kommer inn er som forventa. Hvis du bare trenger tall og tegnet "|" som input, sjekk at strengen ikke innholdet noen andre tegn. Om den gjør det, så forkast inputen og spør brukeren på nytt.