Tom rad skapas i mysql

Databaser & SQL

4 svar · 492 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Trådstart#1

Jag använder följande kod för att spara data till mysql:

<?php 

ob_start("ob_gzhandler");

include("mysql.php");

if(isset($_POST['submit']))
{

$namn = htmlspecialchars($_POST['namn']);
$fodd = htmlspecialchars($_POST['fodd']);

for($i = 0; $i < count($namn); $i++) 
{ 
  $values[] = sprintf("('%s', '%s')",$namn[$i],$fodd[$i]); 
}
$sql = "INSERT INTO personer (namn, fodd) VALUES ".implode(',',$values);
$result = mysql_query($sql)or die("Kunde inte lägga till<br />" . mysql_error() . "<br />" . $sql); 
}

?>

<form action="test.php" method="post"> 
Namn:<br />
<input type="text" name="namn[]" /><br /> 
Född:<br />
<input type="text" name="fodd[]" />
<br /><br /> 
Namn:<br />
<input type="text" name="namn[]" /><br /> 
Född:<br />
<input type="text" name="fodd[]" />
<br /><br />
Namn:<br />
<input type="text" name="namn[]" /><br /> 
Född:<br />
<input type="text" name="fodd[]" />
<br /><br />
Namn:<br />
<input type="text" name="namn[]" /><br /> 
Född:<br />
<input type="text" name="fodd[]" />
<br /><br /> 

<input type="submit" name="submit" value="lägg till" />
 
</form>

..men om något av input-fälten lämnas tomma, skapas en tom rad i mysql. :x
Hur förhindrar jag detta?

Sedan undrar jag även var/hur jag lägger in "NOW()" i insert ovan.

Medlem sedan dec. 200012 464 inlägg
#2

Det får du kontrollera i din for loop och i så fall låta bli att göra sprintf.

Använd inte now. Det är specifikt för Mysql och fungerar inte i vissa andra databashanterare.

$values[] = sprintf("('%s', '%s',current_timestamp)",$namn[$i],$fodd[$i]);  

$sql = "INSERT INTO personer (namn, fodd,dateColumn) VALUES ".implode(',',$values);
Medlem sedan juli 20041 271 inlägg
#3

Vet inte om du missuppfattade min fråga, eller om jag var otydlig.
Man SKA kunna lämna några input-fält tomma, man måste inte fylla i alla.

Medlem sedan dec. 200012 464 inlägg
#4

Då förstår jag inte vad du menar med tom rad. Exemplifiera med det resultat du får nu och det resultat du vill ha.

Medlem sedan nov. 20014 054 inlägg
#5

Guldstrand skrev:

Vet inte om du missuppfattade min fråga, eller om jag var otydlig.
Man SKA kunna lämna några input-fält tomma, man måste inte fylla i alla.

Antar att detta är för att de postas även fast de inte har några värden. Du får väl helt enkelt kontrollera att namn, fodd har värde om de skall få sparas.

 for($i = 0; $i < count($namn); $i++)  {  
  if(strlen($namn[$i]) != 0 && strlen($fodd[$i]) != 0) {
     $values[] = sprintf("('%s', '%s')",$namn[$i],$fodd[$i]);
  }
}

Nu vet jag inte om detta är rätt väg att gå eller om det kommer att hjälpa.

250 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)