jvc1986 Skrevet 18. desember 2011 Del Skrevet 18. desember 2011 (endret) God kveld! Har prøvd en god stund nå på å løse dette problemet, jeg prøver å få satt inn rader fra en dynamisk form i databasen, men får den kun til å sette inn siste linjen. Echo funksjonen virker og viser alle de respektive linjene, men kun siste settes inn i DB. <?php $id = $_POST['id']; $tittel = $_POST['tittel']; include ("config.php"); foreach($id as $a => $b) echo "$id[$a] - $tittel[$a] <br />"; $sql ="INSERT INTO filmdb (id, tittel) VALUES (".$id[$a].", ".$tittel[$a].")"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "Film lagret <br \>"; ?> Endret 18. desember 2011 av jvc1986 Lenke til kommentar
pkj Skrevet 18. desember 2011 Del Skrevet 18. desember 2011 $sql ="INSERT INTO filmdb (id, tittel) VALUES (".$id[$a].", ".$tittel[$a].")"; Om tittel består av flere ord eller symboler så blir det kluss med spørringen. Går ut i fra at alle id'er er et nummer. Det bør være quotes på strenger, så noe sånt: $sql ="INSERT INTO filmdb (id, tittel) VALUES (".((int)$id[$a]).", '".mysql_real_escape_string($tittel[$a])."')"; Lenke til kommentar
Lycantrophe Skrevet 18. desember 2011 Del Skrevet 18. desember 2011 (endret) Du mangler klammer rundt løkken din. <?php $id = $_POST['id']; $tittel = $_POST['tittel']; include ("config.php"); foreach($id as $a => $b){ echo "$id[$a] - $tittel[$a] <br />"; $sql ="INSERT INTO filmdb (id, tittel) VALUES (".$id[$a].", ".$tittel[$a].")"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "Film lagret <br \>"; } ?> Endret 18. desember 2011 av Lycantrophe Lenke til kommentar
Occi Skrevet 18. desember 2011 Del Skrevet 18. desember 2011 (endret) Det er mye mer effektivt å gjøre alt i en query enn å kjøre samme query N antall ganger. Syntaxen for å skrive flere rows i en query er: INSERT INTO tableName(col1,col2,col3) VALUES(1,2,3),(4,5,6),(7,8,9); Sett derfor noe á: $query = "INSERT INTO tableName(col1,col2,col3) VALUES"; /* for-løkke som går igjennom array og tar: */ $query += "(" . $foo[$i] . ")," /* fjerner siste komma */ Er ikke sikker på om akkurat utførelsen av hvordan du printer ut VALUES blir det mest effektive, men poenget er å ta en løkke på queries N ganger er veldig ineffektivt. En mer beskrivende guide finnes her (bruker en litt annen måte å fikse values-biten)- Endret 18. desember 2011 av Occi 1 Lenke til kommentar
Terrasque Skrevet 11. januar 2012 Del Skrevet 11. januar 2012 Ingen input sanitering? aiaiai! http://www.unixwiz.net/techtips/sql-injection.html http://php.net/manual/en/function.mysql-real-escape-string.php Lenke til kommentar
Crowly Skrevet 11. januar 2012 Del Skrevet 11. januar 2012 Det er mye mer effektivt å gjøre alt i en query enn å kjøre samme query N antall ganger. Syntaxen for å skrive flere rows i en query er: INSERT INTO tableName(col1,col2,col3) VALUES(1,2,3),(4,5,6),(7,8,9); Alle databaser støtter vel ikke dette? Og det er en øvre grense for hvor mange rander du kan sette inn med en insert (uten at jeg er helt sikker på nøyaktig hva den er i mysql), jeg begrenser den til 50. Hvis ikke denne syntaksen er støttet, så bør man se på og bruke prepared statements Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå