Skocz do zawartości

XAMPP Array to string conversion SQL I PHP


`Krzychuu
 Udostępnij

Rekomendowane odpowiedzi

Witam

Próbuje zrobić wysyłanie kilku tych samych nazw do bazy i robię według tego co napisał GeDox w tym temacie: TEMAT, ale napotkałem problem, po dodaniu [] do klasy name wyświetla się coś takiego Notice: Array to string conversion in C:\xampp\htdocs\www\dodaj.php on line 14, 14 linijka to: 

$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa','$cena','$data')";

a w bazie do kolumn dodaje się tylko Array

<?php
	
	require_once ('connect.php');
	$connect = @new mysqli($host,$db_user,$db_password, $db_name);
	
	if(!empty($_POST))
	{
		var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']);
		
		$naprawa = $_POST['naprawa'];
		$cena = $_POST['cena'];
		$data = $_POST['data'];
			
		$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa','$cena','$data')";
		$orders = mysqli_query($connect, $sql);		
	}
?>
<!DOCTYPE html>
<HTML>
<head>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title> TITLE </title>
		<META charset="UTF8">
		<link rel="Stylesheet" type="text/css" href="css.css" />
		<link rel="Stylesheet" type="text/css" href="css/fontello.css" />
			
</head>
	<body>
					
			<form method="post">
				<table border="1" width="1000" cellpadding="4">
			
                  <tr>
                  <td><input type="text" name="naprawa[]" placeholder="Naprawa" required /></td>
                  <td><input type="text" name="cena[]" placeholder="Cena" required /></td>
                  <td><input  type="text" name="data[]" value="<?php echo date('Y-m-d'); ?>" required /></td>
                  </tr>

                  <tr>
                  <td><input type="text" name="naprawa[]" placeholder="Naprawa" required /></td>
                  <td><input type="text" name="cena[]" placeholder="Cena" required /></td>
                  <td><input  type="text" name="data[]" value="<?php echo date('Y-m-d'); ?>" required /></td>
                  </tr>

                 </table>
			
				  <input type="submit" value="Dodaj" />
			
			</form>
		
	</body>
</HTML>
Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

Po dodaniu [] do ATRYBUTU (nie klasy) name, zmienna ta staje się tablicą. I żeby rozwiązać problem musiałbyś użyć czegoś takiego:

Pobierasz pierwszy element z z tablicy:

<?php
	$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[0]','$cena[0]','$data[0]')";
Odnośnik do komentarza
Udostępnij na innych stronach

2 minuty temu, Salvation napisał:

Po dodaniu [] do ATRYBUTU (nie klasy) name, zmienna ta staje się tablicą. I żeby rozwiązać problem musiałbyś użyć czegoś takiego:

Pobierasz pierwszy element z z tablicy:


<?php
	$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[0]','$cena[0]','$data[0]')";

 

dzięki, co trzeba poprawić w kodzie żeby zamiast 1 rekordu to wysyłało tyle ile jest napraw?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

Na trzech tablicach, to foreach() będzie problemem, ale możesz to rozwiązać poprzez pętlę for(). Tyle tylko, że będziesz musiał sprawdzić czy wszystkie tablice mają tyle samo elementów.

Edytowane przez Salvation
Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, Salvation napisał:

Na trzech tablicach, to foreach() będzie problemem, ale możesz to rozwiązać poprzez pętlę for(). Tyle tylko, że będziesz musiał sprawdzić czy wszystkie tablice mają tyle samo elementów.

zrobiłem z pętlą for, dodaje do bazy 3 rekordy ale rekordy są z taką samą wartością którą pobiera z pierwszego formularza 

<?php
	
	require_once ('connect.php');
	$connect = @new mysqli($host,$db_user,$db_password, $db_name);
	
	for($i=0;$i<3;$i++)
	{		
		if(!empty($_POST))
		{
			var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']);
			
			$naprawa = $_POST['naprawa'];
			$cena = $_POST['cena'];
			$data = $_POST['data'];
				
			$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[0]','$cena[0]','$data[0]')";
			$orders = mysqli_query($connect, $sql);		
		}
	}
?>
Edytowane przez `Krzychuu
Odnośnik do komentarza
Udostępnij na innych stronach

Teraz, Salvation napisał:

xD zmieniłeś [0], które podałem wcześniej na wartość inkrementowaną czy nie? Pokaż kod.

<?php
	
	require_once ('connect.php');
	$connect = @new mysqli($host,$db_user,$db_password, $db_name);
	
	for($i=0;$i<3;$i++)
	{		
		if(!empty($_POST))
		{
			var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']);
			
			$naprawa = $_POST['naprawa'];
			$cena = $_POST['cena'];
			$data = $_POST['data'];
				
			$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[0]','$cena[0]','$data[0]')";
			$orders = mysqli_query($connect, $sql);		
		}
	}
?>
<!DOCTYPE html>
<HTML>
<head>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title> TITLE </title>
		<META charset="UTF8">
		<link rel="Stylesheet" type="text/css" href="css.css" />
		<link rel="Stylesheet" type="text/css" href="css/fontello.css" />
			
</head>
	<body>		
			<form method="post">
			<table border="1" width="1000" cellpadding="4">
			
			<tr>
			<td><input type="text" name="naprawa[]" placeholder="Naprawa"  /></td>
			<td><input type="text" name="cena[]" placeholder="Cena"  /></td>
			<td><input  type="text" name="data[]" value="<?php echo date('Y-m-d'); ?>"  /></td>
			</tr>
			
			<tr>
			<td><input type="text" name="naprawa[]" placeholder="Naprawa"  /></td>
			<td><input type="text" name="cena[]" placeholder="Cena"  /></td>
			<td><input  type="text" name="data[]" value="<?php echo date('Y-m-d'); ?>"  /></td>
			</tr>
			
			<tr>
			<td><input type="text" name="naprawa[]" placeholder="Naprawa"  /></td>
			<td><input type="text" name="cena[]" placeholder="Cena"  /></td>
			<td><input  type="text" name="data[]" value="<?php echo date('Y-m-d'); ?>"  /></td>
			</tr>

		
			</table>
			
			<input type="submit" value="Dodaj" />
			
			</form>
		
	</body>
</HTML>
Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

O ludzie...

<?php
	require_once ('connect.php');
	$connect = @new mysqli($host,$db_user,$db_password, $db_name);
	if(!empty($_POST)) {
      /* var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']); */
      $naprawa = $_POST['naprawa'];
      $cena = $_POST['cena'];
      $data = $_POST['data'];
      
      for($i = 0; $i < 3; $i++) {
        $sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[$i]', '$cena[$i]', '$data[$i]')";
        $orders = mysqli_query($connect, $sql);
      }
    }
Odnośnik do komentarza
Udostępnij na innych stronach

6 minut temu, Salvation napisał:

O ludzie...


<?php
	require_once ('connect.php');
	$connect = @new mysqli($host,$db_user,$db_password, $db_name);
	if(!empty($_POST)) {
      /* var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']); */
      $naprawa = $_POST['naprawa'];
      $cena = $_POST['cena'];
      $data = $_POST['data'];
      
      for($i = 0; $i < 3; $i++) {
        $sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[$i]', '$cena[$i]', '$data[$i]')";
        $orders = mysqli_query($connect, $sql);
      }
    }

 

a co zrobić jeśli w naprawach dodam 2 a w pętli jest wpisane 3, jak zablokować wysyłanie pustego rekordu?

Edytowane przez `Krzychuu
Odnośnik do komentarza
Udostępnij na innych stronach

6 minut temu, Salvation napisał:

Wszystkie zmienne tablicowe są jednakowej wielkości? To zamiast 3 w pętli daj np. count($naprawa)

nadal dodaje pusty rekord

<?php
	
	require_once ('connect.php');
	$connect = @new mysqli($host,$db_user,$db_password, $db_name);
	
	
	if(!empty($_POST))
	{
		/* var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']); */
				
		$naprawa = $_POST['naprawa'];
		$cena = $_POST['cena'];
		$data = $_POST['data'];
			
		for($i = 0; $i < count($naprawa); $i++)
		{	
			$sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[$i]','$cena[$i]','$data[$i]')";
			$orders = mysqli_query($connect, $sql);		
		}
	}
?>
Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

Zamiast tego:

<?php
	/* var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']); */

Wstaw:

<?php
	echo '<pre>';
	print_r($_POST['naprawa']);
	print_r($_POST['cena']);
	print_r($_POST['data']);
	echo '</pre>';
	die();

Wyświetlą Ci się odebrane dane. Sprawdzisz ile każde z nich ma ile i jakie wartości. Jeżeli dodaje pusty rekord, to na 100% jest błąd z zapytaniu. Rozwiązałoby go m.in. bindowanie parametrów.

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, Salvation napisał:

Zamiast tego:


<?php
	/* var_dump($_POST['naprawa'],$_POST['cena'],$_POST['data']); */

Wstaw:


<?php
	echo '<pre>';
	print_r($_POST['naprawa']);
	print_r($_POST['cena']);
	print_r($_POST['data']);
	echo '</pre>';
	die();

Wyświetlą Ci się odebrane dane. Sprawdzisz ile każde z nich ma ile i jakie wartości. Jeżeli dodaje pusty rekord, to na 100% jest błąd z zapytaniu. Rozwiązałoby go m.in. bindowanie parametrów.

wyświetliło się coś takiego:

Array
(
    [0] => 1
    [1] => 2
    [2] => 
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 
)
Odnośnik do komentarza
Udostępnij na innych stronach

3 minuty temu, Salvation napisał:

Sam widzisz, że odbierasz puste dane w 3 kolumnie, więc skrypt działa poprawnie. Teraz jeżeli nie chcesz pustych danych, to wystarczy dać warunek w pętli przed wykonaniem zapytania i już.

i jak wpisze 2 naprawy a 3 naprawa będzie pusta to wykona się zapytanie?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Ekspert

Serio? Myślałem, że już opanowałeś takie rzeczy...

<?php

for($i = 0; $i < count($naprawa); $i++) {
  if(!empty($naprawa[$i])) {
    $sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[$i]', '$cena[$i]', '$data[$i]')";
  	$orders = mysqli_query($connect, $sql);
  }
}
Odnośnik do komentarza
Udostępnij na innych stronach

3 minuty temu, Salvation napisał:

Serio? Myślałem, że już opanowałeś takie rzeczy...


<?php

for($i = 0; $i < count($naprawa); $i++) {
  if(!empty($naprawa[$i])) {
    $sql = "INSERT INTO `naprawy`(`Naprawa`, `Cena`, `Data`) VALUES ('$naprawa[$i]', '$cena[$i]', '$data[$i]')";
  	$orders = mysqli_query($connect, $sql);
  }
}

dzięki za pomoc, myślałem że to będzie bardziej skomplikowane xD

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Podobna zawartość

    • Poradnik dotyczy instalacji MyBB na serwerze lokalnym przy wykorzystaniu XAMPP.
      Pobierz: Download XAMPP
      KROK 1.
      KREATOR INSTALACJI
      Setup
      Tutaj znajduje się wiadomość powitalna.
      Kliknij Next.
      Select Components
      Wybierz komponenty do zainstalowania.
      Wymagane komponenty:
      Apache MySQL PHP phpMyAdmin Kliknij Next.
      Installation folder
      Wybierz lokalizację folderu, gdzie ma być zainstalowany XAMPP.
      Ważne!
      Nie instaluj programu w folderach typu Pliki programów (x86), ponieważ folder posiada inne uprawnienia. Program nie będzie działać poprawnie.
      Zalecana lokalizacja folderu to C:\XAMPP
      Kliknij Next.
      Language
      Wybierz język programu.
      Kliknij Next.
      Bitnami for XAMPP
      Tutaj znajduje się informacja o Bitnami.
      Kliknij Next.
      Ready to Install
      Instalator jest gotowy do rozpoczęcia instalacji.
      Kliknij Next.
      Installing
      Trwa instalacja. Poczekaj na zakończenie procesu instalacji.
      Completing the XAMPP Setup Wizard
      Jeśli zobaczysz poniższy komunikat:
      Oznacza to, że XAMPP został pomyślnie zainstalowany na twoim komputerze.
      Kliknij Finish.
      KROK 2.
      WŁĄCZENIE MODUŁÓW
      Włącz moduł Apache oraz MySQL klikając Start.
      Aby wejść na naszą stronę wpisujemy > localhost
      Aby zarządzać bazami danych wpisujemy > localhost/phpmyadmin

      KROK 3.
      LOKALIZACJA GŁÓWNEGO KATALOGU
      Główny katalog serwera lokalnego znajduję się w lokalizacji > C:\XAMPP\htdocs
      KROK 4.
      INSTALACJA MYBB
      Zainstaluj skrypt MyBB postępując według poradnika > Instalacja MyBB
    • Mam problem z XAMPP`em i połączeniem się z localhostem. Wczoraj normalnie działało, dzisiaj przy próbie odpalenia pokazał się następujący błąd: "server certificate does NOT include an ID which matches the server name"
      Co ciekawe w lokalizacji D:\\Zainstalowane\\xampp\\php\\extras nie posiadam folderu extras i nic nie usuwałem. Ktoś wie co może być przyczyną?
    • Witam 🙂 Z przyczyn osobistych nie mam czasu ani siły na samodzielne wykonywanie takich zadań zatem szukam osoby, która była by chętna oczywiście za opłatą wykonać dla mnie parę zadań tego typu co znajduję się w załączniku :L) 
      Praca polega na wypisaniu na kartce kwerend wykonanych (przetestowanych) na komputerze w środowisku XAMPP.
      Za cenę: do uzgodnienia.
      Sposób płatności: Przelew
      Kontakt: PW

      Ukryta zawartość
      Zareaguj na post lub odpowiedz w temacie aby zobaczyć ukrytą zawartość.
    • Witam, podczas wejścia do phpMyAdmin przy zainstalowanym XAMPP, pokazuje się błąd "Brak rozszerzenia mysqli. Proszę sprawdzić konfigurację PHP."

      Wiecie może jak to naprawić? Kiedyś XAMPP działał mi bez zarzutów, nie korzystałem z niego od miesiąca i teraz jak go potrzebuję to wyskakuje mi coś takiego 😉 
    • Mam postawiony XAMPP, chcę aktualizować z 1.8.13 na 1.8.21. I przekopiowałem wszystko do folderu  http://127.0.0.1/forum/install/upgrade.php i jest stara wersją.  Co robię złe ?
      I większego niż 1.8.12 nie ma.  
       

  • Najnowsze tematy

  • Ostatnio rozwiązane

×