Insert non inserirsce tutti i valori

Antonio102

Utente Attivo
12 Set 2014
36
0
6
Ciao a tutti, ho un piccolo problema con una INSERT. Devo inserire tutti e 20 i nomi delle regioni italiane dentro la tabella regioni, ma anziche' 20 ne vengono inseriti solo 19 (manca la Valle d'Aosta). Credo che il problema stia nel codice di escape in Valle d'Aosta, ma non capisco come modificarlo

PHP:
<?php
$regioni = array('Valle d\'Aosta','Piemonte','Liguria','Lombardia','Trentino-Alto Adige','Veneto','Friuli-Venezia Giulia','Emilia-Romagna','Toscana','Umbria','Marche','Lazio','Abruzzo','Molise','Campania','Puglia','Basilicata','Calabria','Sicilia','Sardegna');

$capoluoghi = array('Aosta','Torino','Genova','Milano','Trento','Venezia','Trieste','Bologna','Firenze','Perugia','Ancona','Roma','L\'Aquila','Campobasso','Napoli','Bari','Potenza','Catanzaro','Palermo','Cagliari');

foreach ($regioni as $regions)
{
$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);
$insert = mysqli_query($conn,"INSERT INTO regioni (id,regione) VALUES ('','$regions')");
}
if ($insert === TRUE)
echo "Records created successfully";
else 
echo "Error: " . $insert . "<br>" . $conn->error;
$conn->close();
?>
 
Ultima modifica:

Perfetto, ora funziona.

Sto provando ad inserire dei dati dentro un altro database chiamato 'customers', composto da 6 campi: id, name, address, city, cap, country. Voglio inserire i dati di 10 clienti, ma con il codice seguente inserisce primi i nomi, poi gli indirizzi, etc, ma non inserisce i dati relativi ad un singolo cliente tutti nello stesso record. Come posso risolvere?

PHP:
<?php

$name = array('Alfreds Futterkiste','Ana Trujillo Emparedados','Antonio Moreno Taqueria','Around the Horn','Berglunds snabbkop','Blauer See Delikatessen','Blondel pere et fils ','Bolido Comidas preparadas','Bon app','Bottom-Dollar Marketse');

$address = array('Obere Str. 57','Avda. de la Constitucion 2222','Mataderos 2312','120 Hanover Sq.','Berguvsvagen 8','Forsterstr. 57','24, place Kleber','C/ Araquil, 67','12, rue des Bouchers','23 Tsawassen Blvd');

$city = array('Berlin','Mexico D.F.','Mexico D.F.','London','Lulea','Mannheim','Strasbourg','Madrid','Marseille','Tsawassen');

$cap = array('12209','05021','05023','WA1 1DP','S-958 22','68306','67000','28023','13008','T2F 8M4');

$country = array('Germany','Mexico','Mexico','UK','Sweden','Germany','France','Spain','France','Canada'); 

foreach ($name as $names)
{
$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);
$namess = mysqli_real_escape_string($conn,$names);
$insert = mysqli_query($conn,"INSERT INTO customers (id,name) VALUES ('','$namess')");
}

foreach ($address as $k=>$addresses)
{
$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);
$addressess = mysqli_real_escape_string($conn,$addresses);
$insert = mysqli_query($conn,"INSERT INTO customers (id,address) VALUES ('','$addressess')");
}

foreach ($city as $cities)
{
$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);
$citiess = mysqli_real_escape_string($conn,$cities);
$insert = mysqli_query($conn,"INSERT INTO customers (city) VALUES ('$citiess')");
}

foreach ($cap as $caps)
{
$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);
$capss = mysqli_real_escape_string($conn,$caps);
$insert = mysqli_query($conn,"INSERT INTO customers (cap) VALUES ('$capss')");
}

foreach ($country as $countries)
{
$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);
$countriess = mysqli_real_escape_string($conn,$countries);
$insert = mysqli_query($conn,"INSERT INTO customers (country) VALUES ('$countriess')");
}

$conn->close();
?>
 
Ciao,
non so perchè i dati sono contenuti in array.... avrai i tuoi buoni motivi... ma credo che nel tuo caso dovresti utilizzare degli array multidimensionali, vedi questo esempio: http://goo.gl/CXpbdo

e' un esercitazione, non sono dati che vanno online, utilizzo per gli array per esercizio ;)

ho scritto nuovamente il codice, per ottengo questo errore

PHP:
Error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Dollar Marketse,23 Tsawassen Blvd,Tsawassen,T2F 8M4,Canada)' at line 1

lo script e' questo

PHP:
<?php

$person = array(
    array('name' => 'Alfreds Futterkiste', 'address' => 'Obere Str. 57', 'city' => 'Berlin', 'cap' => '12209', 'country' => 'Germany'),
    array('name' => 'Ana Trujillo Emparedados', 'address' => 'Avda. de la Constitucion 2222', 'city' => 'Mexico D.F.', 'cap' => '05021', 'country' => 'Mexico'),
	array('name' => 'Antonio Moreno Taqueria', 'address' => 'Mataderos 2312', 'city' => 'Mexico D.F.', 'cap' => '05023', 'country' => 'Mexico'),
	array('name' => 'Around the Horn', 'address' => '120 Hanover Sq.', 'city' => 'London', 'cap' => 'WA1 1DP', 'country' => 'UK'),
	array('name' => 'Berglunds snabbkop', 'address' => 'Berguvsvagen 8', 'city' => 'Lulea', 'cap' => 'S-958 22', 'country' => 'Sweden'),
	array('name' => 'Blauer See Delikatessen', 'address' => 'Forsterstr. 57', 'city' => 'Mannheim', 'cap' => '68306', 'country' => 'Germany'),
	array('name' => 'Blondel pere et fils', 'address' => '24, place Kleber', 'city' => 'Strasbourg', 'cap' => '67000', 'country' => 'France'),
	array('name' => 'Bolido Comidas preparadas', 'address' => 'C/ Araquil, 67', 'city' => 'Madrid', 'cap' => '28023', 'country' => 'Spain'),
	array('name' => 'Bon app', 'address' => '12, rue des Bouchers', 'city' => 'Marseille', 'cap' => '13008', 'country' => 'France'),
	array('name' => 'Bottom Dollar Marketse', 'address' => '23 Tsawassen Blvd', 'city' => 'Tsawassen', 'cap' => 'T2F 8M4', 'country' => 'Canada'));

$conn= mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);

foreach ($person as $people)
{
$names['name'] = mysqli_real_escape_string($conn,$people['name']);
$addressess['address'] = mysqli_real_escape_string($conn,$people['address']);
$citiess['citiess'] = mysqli_real_escape_string($conn,$people['city']);
$capss['capss'] = mysqli_real_escape_string($conn,$people['cap']);
$countriess['countriess'] = mysqli_real_escape_string($conn,$people['country']);
$insert = mysqli_query($conn,"INSERT INTO customers (id,name,address,city,cap,country) VALUES ('',$names[name],$addressess[address],$citiess[citiess],$capss[capss],$countriess[countriess])");
}

if ($insert === TRUE)
echo 'Province inserite con successo'.'<br>';
else 
echo 'Error: '. $insert . '<br>' . $conn->error;

$conn->close();
?>
 
Sono riuscito ad inserire tutti i record. Ora tramite select count vorrei estrapolare il numero di ordini effettuati da un utente a mia scelta, ottengo un errore, ma non viene visualizzato quale

PHP:
<?php

$conn = mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);

$select = mysqli_query($conn,"SELECT COUNT(customerid) AS number FROM orders WHERE customerid=7");

if ($select === TRUE)
{
$data=mysql_fetch_row($select);
echo $data['number'];
}
else 
echo 'Errore: '.mysqli_error($conn);

$conn->close();

?>
 
Ultima modifica:
Non è un errore. In realtà non entra nella condizione if($select === TRUE) perché appunto è diverso da true.
Guarda nel manuale: la variabile $select ora contiene i dati che tu hai chiesto e non true.
Al massimo puoi scrivere la condizione in questo modo:
PHP:
if ($select != FALSE)
In quanto (come dice il manuale) $select avrà valore false in caso di fallimento della query.
 
sempre tendando di estrapolare il numero di ordini effettuati da ogni singolo acquirente, riscontro degli errori

PHP:
<?php

$conn = mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error);

echo '<table border="1">';

for ($i=1;$i<20;$i++)
{
$select = mysqli_query($conn,"SELECT COUNT(customerid) FROM orders WHERE customerid={$i}");
while($row = mysqli_fetch_assoc($select))
{
echo $row[$i];
}
}

mysqli_free_result($select);

$conn->close();

?>

PHP:
Notice: Undefined offset: 0 in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\esercizipreesame\numeroordini.php on line 12
 
Per estrapolare il numero di ordini effettuati da ogni singolo utente basta fare:
PHP:
<?php 

$conn = mysqli_connect('127.0.0.1','root','','preesame') or die("Connection failed: " . $conn->connect_error); 

echo '<table border="1">'; 

$select = mysqli_query($conn,"SELECT COUNT(*) as n_ordini, customerid FROM orders GROUP BY (customerid)"); 
while($row = mysqli_fetch_assoc($select)) 
{ 
echo $row["customerid"]." ha effettuato ".$row["n_ordini"]." ordini"; 
} 

mysqli_free_result($select); 

$conn->close(); 

?>

Ci potrebbero essere degli errori perché non l'ho testato.
Fammi sapere.
 
Problema risolto, pero' ho un altra domanda. E' possibile raggruppare queste 3 query in una sola

PHP:
$pant = mysqli_query($conn,"SELECT COUNT(tipo) FROM adidas WHERE tipo='pantalone'");
	$scarpe = mysqli_query($conn,"SELECT COUNT(tipo) FROM adidas WHERE tipo='scarpe'");
	$maglie = mysqli_query($conn,"SELECT COUNT(tipo) FROM adidas WHERE tipo='t-shirt'");
 
PHP:
$query= mysqli_query($conn,"SELECT COUNT(*) as n_ricorrenze, tipo FROM adidas GROUP BY tipo");
 
Ultima modifica:

Discussioni simili