08. februar 2013 - 11:04 
												Der er
									31  kommentarer													og 					1  løsning									 
									
		 
		
			php og mysqli 
			jeg forsøger at få mysqli til at virke ud fra guiden her fra eksperten. men af en eller anden grund virker min kode ikke, jeg får bare en blank skærm, og ingen fejl. 
Nogle der kan se hvad jeg gør galt?
http://pastebin.com/pXaWQLTD 
					 
		
	 
                            
Annonceindlæg fra Conscia 
 
 
	
		
								
					
				08. februar 2013 - 13:56  
				#1 
						
		 
		
			i linje 7
if ($stmt = $mysqli->prepare('INSERT INTO `elev` (fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email, birthday, holdid, type, status,rate1, rate2, bog, syg, dato) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')) {  dette: 
 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)  skal se således ud: 
('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?') dvs du skal sætte ' ' omkring de steder som er tekst strenge..
altså et eksempel ville være; $query = "INSERT INTO `people` (`id`,`name`,`age`) VALUES (NULL,'Mitch','25');";
det er lige umiddelbart mit bud, men ellers kig på dette: 
http://php.net/manual/en/mysqli.error.php 
		 
		
	 
	
		
								
					
				08. februar 2013 - 14:06  
				#2 
			 				 
						
		 
		
			@#1 Nej. Man saetter ikke '' omkring strenge naar man bruger prepared statement.
		
		
	 
	
		
								
					
				08. februar 2013 - 14:09  
				#3 
			 				 
						
		 
		
			Hvad returnerer execute? Hvad indeholder $error?
		
		
	 
	
		
								
					
				08. februar 2013 - 15:00  
				#4 
						
		 
		
			med chance for at virke dum, hvordan kan jeg se hvad execute returnere, jeg får som sagt ike andet end en hvid side, når jeg køre min kode. med echo $error; får jeg intet på siden?
		
		
	 
	
		
								
					
				08. februar 2013 - 15:22  
				#5 
			 				 
						
		 
		
			Test paa den retur vaerdi og udskriv hvis den fejler.
		
		
	 
	
	
	
		
								
					
				08. februar 2013 - 15:24  
				#6 
			 				 
						
		 
		
			Men er du sikker paa at koden ikke virker? Du udskriver saa vidt keg kan heller ikke noget ved success!?!?
		
		
	 
	
		
								
					
				08. februar 2013 - 15:24  
				#7 
						
		 
		
			bare som info, køre PHP Version 5.2.17, via surftown, men såvidt jeg kan se understøtter den fint mysqli
		
		
	 
	
		
								
					
				08. februar 2013 - 15:25  
				#8 
						
		 
		
			Bare lige ved et hurtigt kig: $one = '1'; $zero = '0'; Til: $one = 1; $zero = 0;
		
		
	 
	
		
								
					
				08. februar 2013 - 15:26  
				#9 
						
		 
		
			"Men er du sikker paa at koden ikke virker? Du udskriver saa vidt keg kan heller ikke noget ved success!?!?" nej det har du ret i, men jeg kan se der ikke kommer noget ind i min database? der ud over kan jeg se den mail der står i koden der skal sendes ikk e bliver sendt, og jeg ej heller bliver vidre sendt til tak siden. hvis jeg tilføjer et echo "det virker"; efter $stmt->close();, så bliver den del heller ikke skrevet.
		
		
	 
	
		
								
					
				08. februar 2013 - 15:29  
				#10 
						
		 
		
			michael_stim > tak, men det er ikke det der giver mig problemet. men kan godt se du har ret i at det skal være $one = 1; $zero = 0; så tak :)
		
		
	 
	
		
								
					
				08. februar 2013 - 15:37  
				#11 
						
		 
		
			tilføjer jeg en  echo "1"; før min if kode og en echo "2"; efter den lukker forbindelsen til sql, er det kun echo 1 der bliver kørt, er som om den ikke får kørt selve sql koden
		
		
	 
	
		
								
					
				08. februar 2013 - 16:39  
				#12 
			 				 
						
		 
		
			<ole>
Du har i hvertfald rod i dine variabler. Hvis vi tager de første syv, ser de sådan ud:
fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email $fnavn, $enavn, $mobil1, $email, $adresse_by, $adresse_vej,$adresse_postnr
Det er der vist ikke meget overensstemmelse i  =)
Derudover bør du fortsætte det spor, arne_v ledte dig ind på:
$stmt->bind_param(... ... ...); echo $mysqli->error . '<br>'; // og: $exec_result = $stmt->execute(); echo '$exec_result: ' . $exec_result . '<br>'; echo $mysqli->error . '<br>';
/mvh
</bole>
		
 
		
	 
	
		
								
					
				08. februar 2013 - 16:44  
				#13 
						
		 
		
			fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email det henviser da til datatabellen $fnavn, $enavn, $mobil1, $email, $adresse_by, $adresse_vej,$adresse_postnr dette henviser da til hvad jeg sat mine post resultater som, eller misforstår jeg det helt her?
		
		
	 
	
		
								
					
				08. februar 2013 - 16:52  
				#14 
			 				 
						
		 
		
			Nej, det henviser ikke til det, du tror. Prøv at tjekke rækkefølgen i #12 . Rækkefølgen i de to linjer hænger ikke sammen  =)
		
		
	 
	
		
								
					
				08. februar 2013 - 16:53  
				#15 
			 				 
						
		 
		
			$email  sætter du ind i feltet 'adresse_vej' ... osv
		
		
	 
	
		
								
					
				08. februar 2013 - 17:02  
				#16 
						
		 
		
			if ($stmt = $mysqli->prepare('INSERT INTO `elev` (fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email, birthday, holdid, type, status,rate1, rate2, bog, syg, dato) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')) {   $stmt->bind_param('sssssssiiiiiiiii', $fnavn, $enavn, $mobil1, $adresse_vej, $adresse_by, $adresse_postnr, $email, $birthday, $hold, $one, $one, $zero, $zero, $zero, $zero, $stamp_now); nu er det rette til så det kommer i den rigtig række følge. når der står valus(?, ?,?...) der vil man jo i normal sql bre have sine $værdier, er det ikke muligt bare at gøre det sådan med mysqli, eller så mister man måske den sikkerhed det giver?
		
		
	 
	
		
								
					
				08. februar 2013 - 17:11  
				#17 
			 				 
						
		 
		
			Jo, det kan du sagtens gøre - og ja, det ville være tåbeligt, da det ville fjerne fordelene ved prepared statements. Hvad fik du ud af at echo'e resultatet af execute samt evt. fejl?
		
		
	 
	
		
								
					
				08. februar 2013 - 17:13  
				#18 
			 				 
						
		 
		
			Er du i øvrigt sikker på, $birthday  er et tal?
		
		
	 
	
		
								
					
				08. februar 2013 - 17:22  
				#19 
						
		 
		
			birthday er en dato, min gamle sql kode som virker perfekt, er bare lavet sådan her: $sql="INSERT INTO elev (fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email, birthday, holdid, type, status,rate1, rate2, bog, syg, dato) VALUES ('$fnavn','$enavn','$mobil1','$adresse_vej','$adresse_by','$adresse_postnr','$email','$birthday','$hold','1','1','0','0','0','0',NOW())"; jeg fik ikke rigtig nogen fejl, sidder og roder med om det er muligt at slå php fejl til på surftown, går ud fra det er derfor jeg bare får en hvid side og ikke en fejl kode.
		
		
	 
	
		
								
					
				08. februar 2013 - 17:26  
				#20 
			 				 
						
		 
		
			Hvis $birthday er en dato, skal du nok ikke angive den som integer, når du binder parametre  *o) Ja, det er sikkert fint at få Surftown til at slå fejlmeddelelser til ... specielt, når du åbenbart ikke selv gider gøre noget for at finde dine fejl
		
		
	 
	
		
								
					
				08. februar 2013 - 17:51  
				#21 
						
		 
		
			er nok ikke fordi jeg ikke gider, men nærmere ikke fatter det.
		
		
	 
	
		
								
					
				08. februar 2013 - 18:22  
				#22 
			 				 
						
		 
		
			Nej, i så fald er det måske, fordi du ikke gider informere, når der er noget, du ikke fatter - og så er det tæt på umuligt at hjælpe. Jeg viste dig i #12 , hvordan du kan udskrive de ting omkring udskrivning af fejl og resultat af execute, arne_v foreslog - og som du skrev, du ikke forstod. Din respons på det: Larmende tavshed! I #17  spørger jeg: "Hvad fik du ud af at echo'e resultatet af execute samt evt. fejl?" . Din response på det: Igen larmende tavshed. Hvis du ikke forstår, må du spørge. Hvis du forstår, må du oplyse, hvad der blev skrevet ud
		
		
	 
	
		
								
					
				08. februar 2013 - 18:26  
				#23 
						
		 
		
			syntes jeg skrev jeg intet output fik på det, har sat det ind sådan her?.     /* Eksekver forespørgslen */     $exec_result = $stmt->execute();     echo '$exec_result: ' . $exec_result . '<br>';     echo $mysqli->error . '<br>';     /* Luk statement */     $stmt->close();
		
		
	 
	
		
								
					
				08. februar 2013 - 18:38  
				#24 
			 				 
						
		 
		
			Prøv denne kode (vent med mail):
<?phperror_reporting(E_ALL);  include 'drive_con.php'; ?> <?php if ($stmt = $mysqli->prepare('INSERT INTO `elev` (fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email, birthday, holdid, type, status,rate1, rate2, bog, syg, dato) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')) {      /* Bind parametre */     $stmt->bind_param('ssssssssiiiiiiii', $fnavn, $enavn, $mobil1, $adresse_vej, $adresse_by, $adresse_postnr, $email, $birthday, $hold, $one, $one, $zero, $zero, $zero, $zero, $stamp_now);          echo $mysqli->error . '<br>';           /* Sæt værdier på parametrene */     $fnavn = $_POST['fnavn'];     $enavn = $_POST['enavn'];     $mobil1 = $_POST['mobil1'];     $email = $_POST['email'];     $adresse_by = $_POST['adresse_by'];     $adresse_vej = $_POST['adresse_vej'];     $adresse_postnr = $_POST['adresse_postnr'];     $birthday = isset($_REQUEST["birthday"]) ? $_REQUEST["birthday"] : "";     $hold = $_POST['hold'];     $stamp_now = time();     $one = 1;     $zero = 0;     /* Eksekver forespørgslen */     $exec_result = $stmt->execute();          echo '$exec_result: ' . $exec_result . '<br>';     echo $mysqli->error . '<br>';      /* Luk statement */     $stmt->close();          echo 'Øjensynlig succes!';  } else {     /* Der er opstået en fejl */     echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error; } $mysqli->close(); ?>
- og slet det, jeg har markeret med rødt, når/hvis du har fået koden til at virke
		
 
		
	 
	
		
								
					
				08. februar 2013 - 19:04  
				#25 
						
		 
		
			Tak det virker med det samme. smider du et svar?
		
		
	 
	
		
								
					
				08. februar 2013 - 19:05  
				#26 
						
		 
		
			forresten skal en dato med now() være en string? når jeg angiver typen?
		
		
	 
	
		
								
					
				08. februar 2013 - 19:08  
				#27 
						
		 
		
			ændre jeg time() til now() så holder det op med at virke. dato i tabellen er sat som en "date" type. hvis jeg ikke kan bruge now() for at få en dato i dette format. 2013-02-02, hvordan gør jeg så?
		
		
	 
	
		
								
					
				08. februar 2013 - 19:50  
				#28 
						
		 
		
			ok now() skal ind i values, da det er en mysql del. så fjerner jeg $stampnow fra param, da den nu ikke længere skal tage værdien fra den, men bruger den der bliver angivet med now, og sætter typen til string. så det ser sådan her ud, burde det ikke være rigtigt? ($stmt = $mysqli->prepare('INSERT INTO `elev` (fornavn, efternavn, mobil, adresse_vej, adresse_by, adresse_postnr, email, birthday, holdid, type, status,rate1, rate2, bog, syg, dato) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now())')) {      /* Bind parametre */     $stmt->bind_param('ssssssssiiiiiis', $fnavn, $enavn, $mobil1, $adresse_vej, $adresse_by, $adresse_postnr, $email, $birthday, $hold, $one, $one, $zero, $zero, $zero, $zero);
		
		
	 
	
		
								
					
				08. februar 2013 - 20:22  
				#29 
			 				 
						
		 
		
			Ja, NOW() er en MySQL funktion - som vil udløse en fejl, når den bliver brught som en PHP-funktion. PHP's time() giver et timestamp, som naturligvis ikke kan bruges, når det er en dato, der ønskes  =)
Bemærk, at når du sætter 
error_reporting  som vist, slår du fejlmeddelelser til på dokumentplan. Læs evt. 
denne guide  om sikrere fejlhåndtering.
Jeg samler ikke point, men Arne kom med meget vigtige pointer, før jeg blandede mig  =)
		
 
		
	 
	
		
								
					
				08. februar 2013 - 21:56  
				#30 
						
		 
		
			Jeg takker for tolmodigheden og hjælpen... arne må smide et svar så. tak for linket til guiden, læser den med det samme.
		
		
	 
	
		
								
					
				08. februar 2013 - 22:02  
				#31 
			 				 
						
		 
		
			Selvtak  *o)
		
		
	 
	
		
								
					
				10. februar 2013 - 21:04  
				#32 
			 				 
						
		 
		
			svar fra mig - selvom jeg jo kun var med i starten
		
		
	 
	
		
	
		
		
		
			
			Kurser inden for grundlæggende programmering